我有package.json
文件,其中包含10个依赖项,
每次我执行npm install -g
时,所有依赖项都会再次下载,这需要很长时间。
有没有办法从本地node_modules
目录中获取现有的依赖项?
这是我的package.json
依赖项:
"dependencies": {
"body-parser": "~1.16.0",
"colors": "^1.1.2",
"console-stamp": "^0.2.5",
"cookie-parser": "~1.4.3",
"dateformat": "^2.0.0",
"debug": "~2.6.0",
"express": "~4.14.1",
"ip": "^1.1.5",
"jade": "~1.11.0",
"lodash": "^4.17.4",
"morgan": "~1.7.0",
"nodemon": "^1.11.0",
"promise": "^8.0.1",
"rand-token": "^0.3.0",
"random-date-generator": "^1.0.2",
"restify": "^4.3.0",
"restify-cookies": "^0.2.2",
"serve-favicon": "~2.3.2"
}
谢谢,
npm install -g
将当前包上下文(即当前工作目录)安装为全局包。您不需要这个来安装项目依赖项。相反,您可以使用npm install
,它将在node_modules文件夹中安装/更新依赖项。默认情况下,npm install
将在package.json
中安装列为依赖项的所有模块,并且它们不会每次都安装所有依赖项,并且只有在对package.json
进行更改或node_modules
文件夹被清除时才会更新。
使用npm install -g
选项在全球范围内安装软件包,如cordova,gulp,yeoman等,您需要在多个项目中使用它们。
从概念上讲,npm-install
的输入是package.json
,而它的输出是一个完全形成的node_modules
树。
这应该不是问题,因为npm使用缓存。如果您已经安装了模块,则返回304,如果给出了相同版本的依赖项,则可以通过将--verbose
与npm install
命令一起应用来检查它。
我的意思是:
$ npm install express
npm http fetch GET http://registry.npmjs.org/express
npm http fetch GET 200 http://registry.npmjs.org/express
最后,它显示:
在12.547s中添加了49个包
如果你再次运行它,你会看到
$ npm install express
npm http fetch GET http://registry.npmjs.org/express 408ms(来自缓存)
npm http fetch GET 304 http://registry.npmjs.org/express 408ms(来自缓存)
最后,它显示:
为package.json跳过写,因为没有更改
在4.11s中更新了1个包
它命中缓存,不会再次下载。
当在项目上第二次运行npm install
时,它将不会再次下载它只有npm将检查第一级模块以确保它们已安装。
但不遍历依赖关系树以确保安装所有子模块依赖关系。您可以运行npm outdated来检查模块是否缺失但是npm不会为您安装它们。
npm update express
更新快速模块及其依赖项。因此,当您已经拥有该模块并希望获得新版本时,更新即可。更新将始终更新到最新版本,无论package.json
,而npm install
将尊重package.json
中给出的版本。