--save和--save-dev的区别

npm install -save moduleName 命令

  1. 安装模块到项目node_modules目录下。
  2. 会将模块依赖写入dependencies 节点。
  3. 运行 npm install 初始化项目时,会将模块下载到项目目录下。
  4. 运行npm install --production或者注明NODE_ENV变量值为production时,会自动下载模块到node_modules目录中。

npm install -save-dev moduleName 命令

  1. 安装模块到项目node_modules目录下。
  2. 会将模块依赖写入devDependencies 节点。
  3. 运行 npm install 初始化项目时,会将模块下载到项目目录下。
  4. 运行npm install --production或者注明NODE_ENV变量值为production时,不会自动下载模块到node_modules目录中。

devDependencies 节点下的模块是我们在开发时需要用的,比如项目中使用的 gulp ,压缩css、js的模块。这些模块在我们的项目部署后是不需要的,所以我们可以使用 -save-dev 的形式安装。像 express 这些模块是项目运行必备的,应该安装在 dependencies 节点下,所以我们应该使用 -save 的形式安装。

查了下都是说的这个意思 但是我没明白

1 会自动下载模块到node_modules目录 这个意思是说我install一个安装包 其他的安装包全跟着更新么

2 拿vue项目来说 install的安装包是不是没有必须用--save-dev的

阅读 2.8k
2 个回答

一般来说我们自己引用的框架很少定义为devDependencies依赖。都是作为dependencies

1 会自动下载模块到node_modules目录 这个意思是说我install一个安装包 其他的安装包全跟着更新么

npm install -save/-save-dev 都是一样的,把你要求的模块下载到node_modules目录,包括它自己依赖的其他模块,但不会更新其他依赖库。

2 拿vue项目来说 install的安装包是不是没有必须用--save-dev的

这个看你的需求,如果你用的一个库,引用它的代码,只在开发过程中被执行,生产部署后不执行,那么就用--save-dev,当然这种情况很少,你可能很难碰到,基本上就是一些测试用的库,或者编译、构建、生成文档等功能的库。

事实上 vue 项目的所有依赖都应该塞到 --save-dev 中,因为生产环境下跟 node_modules 鸟关系都没有,工作的是 http_server。所有 vue 和 webpack 以及 axios 相关的东西都跟 http_server 没关系,只是开发过程中的工具。(不过因为 vue 部署跟 node 一点关系都没有,所以写在 --save 和 --save-dev 都无所谓,连 vue 官方都不在意,错就错呗又不是不能用的态度淋漓尽致)

--save 和 --save-dev 之间的区别完全在于 node,只有你的服务端是 node 的情况下才有用。Web 开发只是 node 使用场景的冰山一角。

你的例子中也举例了 express ,如果是服务端开发,比如 Server 是 express ,或是跑某种 socket 服务,这个时候才有考虑意义。

至于更新,别想着更新,不然 .lock 文件是用来干啥的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题