前提
举例:例如你开发名为demo的项目,需要开发依赖eslint、生产依赖axios。
一、开发时候
1、你开发
npm install eslint -D
npm install axios -S
-D 就是 –save-dev的简写。
-S 就是 –save 的简写。
dev其实就是 develop的简写,也就是开发的意思。
我们在安装工具包之前常常先写入npm init -y 来创建package.json帮我们记录包的名称以及版本号等等,而通过输入 -D 命令时,包的名称及版本号就会在 devDependencies 中显示,输入 -S 命令时,包的名称及版本号就在 dependencies 中显示。
devDependencies即开发依赖,只在开发时使用,产品上线时不需要。
dependencies即生产依赖,在生产环境中使用。
2、你上传代码
只需要上传源代码和package.json等。node_modules目录不需要上传push到git。
3、你的协作伙伴开发demo项目。
1)git pull拿到源代码。
2)然后初始化项目,即执行npm install就能自动根据package.json下载依赖包。
npm install 会下载devDependencies和dependencies的依赖包。
npm install –production ,只会下载dependencies的依赖包。
二、发布demo模块时候
注意点: demo项目的开发依赖和生产依赖,尽量不要放的混乱。
开发依赖eslint、生产依赖axios,都放入dependencies。 别人使用npm install demo(此时的npm install只会下载dependencies生产依赖),会下载这2个依赖,是没问题,有个缺点是增加了本地项目的体积。
开发依赖eslint、生产依赖axios,都放入devDependencies。 别人下载npm install demo(此时的npm install只会下载dependencies生产依赖),不会下载这2个依赖,这是有问题。
1、你发布demo模块
在项目目录下,执行npm publish。
2、你的协助伙伴使用demo模块
执行npm install demo 下载该包。
ps:此时的npm install只会下载dependencies 生产依赖。和初始化时候的npm install不一样
三、webpack打包时候
注意点:webpack打包和dependencies/devDependencies没关系。 但在多人协作时候,推荐不要删除dependencies/devDependencies。
1、你打包
你已经执行npm install将依赖包安装到node_modules里面了,此时即使把dependencies/devDependencies删除也不影响。 webpack打包时候,会根据require会从node_modules里面查找依赖包(这也是“为什么webpack打包和dependencies/devDependencies没关系”的原因!!!),并且打包。
2、你的协助伙伴打包
但最好不要删除dependencies/devDependencies,因为你的协作伙伴等也要打包的。 如果没有dependencies/devDependencies,则他们执行npm install不会下载相关依赖包,不会下载到node_modules里面。 那么他们使用webpack打包时候,根据require会从node_modules里面查找依赖包,但找不到,所以会打包失败。