`npm install`通过networking安装我的项目的所有依赖关系,即使它们已经安装或者从caching中可用

每当我在我的项目目录中运行npm install时,即使npm已经安装在node_modules ,npm也会提取并安装所有依赖node_modules 。 Npm不会从我的caching安装在~/.npm/ ,即使我的caching中已经有非常多的包。

这是我npmconfiguration设置从npm config ls -l

 ; cli configs long = true registry = "https://registry.npmjs.org/" ; userconfig /Users/jay/.npmrc username = "jayhendren" ; globalconfig /Users/jay/local/nodejs/etc/npmrc global = true globalconfig = "/Users/jay/local/nodejs/etc/npmrc" globalignorefile = "/Users/jay/local/nodejs/etc/npmignore" prefix = "/Users/jay/local/nodejs" ; default values always-auth = false bin-links = true browser = null ca = null cache = "/Users/jay/.npm" cache-lock-retries = 10 cache-lock-stale = 60000 cache-lock-wait = 10000 cache-max = null cache-min = 10 cert = null color = true depth = null description = true dev = false editor = "/usr/bin/vim" ; email = "" (overridden) engine-strict = false fetch-retries = 2 fetch-retry-factor = 10 fetch-retry-maxtimeout = 60000 fetch-retry-mintimeout = 10000 force = false git = "git" git-tag-version = true group = 20 heading = "npm" https-proxy = null ignore-scripts = false init-module = "/Users/jay/.npm-init.js" init.author.email = "" init.author.name = "" init.author.url = "" init.license = "ISC" json = false key = null link = false local-address = undefined loglevel = "http" ; long = false (overridden) message = "%s" node-version = "v0.10.25" npat = false onload-script = false optional = true parseable = false production = false proprietary-attribs = true proxy = null rebuild-bundle = true registry = "https://registry.npmjs.org/" rollback = true save = false save-bundle = false save-dev = false save-optional = false searchexclude = null searchopts = "" searchsort = "name" shell = "/bin/zsh" shrinkwrap = true sign-git-tag = false strict-ssl = true tag = "latest" tmp = "/var/folders/sq/ls98jmdd09l__xwpxq3qqmpw0000gn/T/" umask = 18 unicode = true unsafe-perm = true usage = false user = "nobody" user-agent = "node/v0.10.25 darwin x64" userconfig = "/Users/jay/.npmrc" ; username = "" (overridden) version = false versions = false viewer = "man" 

有人知道为什么npm坚持一遍又一遍地取新包吗?

要从caching强制安装软件包,可以使用以下方法:

 $ npm --cache-min 9999999 install 

另见: https : //addyosmani.com/blog/using-npm-offline/

使用标志的组合来模拟skip-installed

 global = false link = true 
 FOO
 +  -  node_modules
     +  -  blerg(1.2.5)<--- [A]
     +  -  bar(1.2.3)<--- [B]
     |  ` -  node_modules
     |  +  -  baz(2.0.2)<--- [C]
     |  |  ` -  node_modules
     |  |  ` -  quux(3.2.0)
     |  asdf(2.3.4)
     - 巴兹(1.2.3)<--- [D]
         ` -  node_modules
             ` -  quux(3.2.0)<--- [E]

参考

npm 1.0:链接

npm 1.0:全局vs本地安装

NPM文件夹

node.js全局对象

我在我的项目中运行“npm prune”,删除不必要的软件包(也就是说,这不是依赖关系,并给你那种刺激的“无关的”错误信息)。 一个副作用似乎是消除你所说的冗余包。 例如,gulp需要gulp-util软件包。 由于已经处于“最高”级别,因此已经从吞咽自己的节点模块中移除。