我对NodeJS很新,所以如果我的问题很天真,请原谅。我觉得在服务器上运行Javascript很有意思。
然而,有一件事严重削弱了我的经验。对于每个新包,这是一个冗长的容易出错的安装过程,导致似乎永远不会结束一系列HTTP请求。我甚至可以一次又一次地看到相同资源的多个请求,而我可能已经缓存了这些请求。
更糟糕的是,在许多其他请求完成并浪费时间后,我经常会遇到错误,之后安装失败,没有明确的理由。
我的问题是:
是否可以先下载最常用的 stable 软件包,以避免通过HTTP请求它们?
然后使用捆绑包中的大多数软件包在本地运行安装,并且只通过HTTP请求真正新的和重要的东西?
优点是:
最大限度地减少请求数量,使整个过程更快。我觉得这需要花费很长时间的请求数量,因此性能会急剧增加。特别是如果你的连接速度很慢。
仅使用稳定且经过测试的软件包,而不是最后一个可能导致错误并导致安装失败的软件包。我猜这些是导致安装失败的最后一个不稳定的软件包。
作为Node的新手,我的问题可能是天真的,我可能会遗漏一些基本的东西。在这种情况下,我想学习并理解背后的原因。
只是为了给一些“肉”,这是我最近(失败)尝试安装Yeoman:
$ sudo npm install -g yo Password: npm http GET https://registry.npmjs.org/yo npm http 304 https://registry.npmjs.org/yo npm http GET https://registry.npmjs.org/yeoman-generator npm http GET https://registry.npmjs.org/nopt npm http GET https://registry.npmjs.org/update-notifier npm http GET https://registry.npmjs.org/insight npm http GET https://registry.npmjs.org/sudo-block npm http GET https://registry.npmjs.org/open/0.0.4 npm http GET https://registry.npmjs.org/chalk npm http GET https://registry.npmjs.org/findup npm http GET https://registry.npmjs.org/lodash npm http GET https://registry.npmjs.org/async npm http 200 https://registry.npmjs.org/update-notifier npm http GET https://registry.npmjs.org/update-notifier/-/update-notifier-0.1.7.tgz npm http 200 https://registry.npmjs.org/open/0.0.4 npm http GET https://registry.npmjs.org/open/-/open-0.0.4.tgz npm http 200 https://registry.npmjs.org/open/-/open-0.0.4.tgz npm http 200 https://registry.npmjs.org/update-notifier/-/update-notifier-0.1.7.tgz ...
注意最后一个资源的重复请求! 然后在页面和页面之后出现错误:
npm http 200 https://registry.npmjs.org/rimraf/-/rimraf-2.2.5.tgz npm ERR! Error: shasum check failed for /Users/dmitrizaitsev/tmp/npm-2533/1387980648215-0.5165209104306996/tmp.tgz npm ERR! Expected: a4663b53686b895ff074e2ba504dfb76a8e2b770 npm ERR! Actual: 8d2a8a2b726937c7cc6a86207b56e3a38d853f1e npm ERR! at /usr/local/lib/node_modules/npm/node_modules/sha/index.js:32:8 npm ERR! at ReadStream. (/usr/local/lib/node_modules/npm/node_modules/sha/index.js:61:7) npm ERR! at ReadStream.EventEmitter.emit (events.js:117:20) npm ERR! at _stream_readable.js:883:14 npm ERR! at process._tickCallback (node.js:415:13) npm ERR! If you need help, you may report this log at: npm ERR! npm ERR! or email it to: npm ERR! npm ERR! System Darwin 12.5.0 npm ERR! command "node" "/usr/local/bin/npm" "install" "-g" "yo" npm ERR! cwd /Users/dmitrizaitsev/Dropbox/Priv/APP npm ERR! node -v v0.10.3 npm ERR! npm -v 1.2.21 npm http 200 https://registry.npmjs.org/ansi-styles npm http GET https://registry.npmjs.org/ansi-styles/-/ansi-styles-0.2.0.tgz ... npm http 200 https://registry.npmjs.org/cheerio npm ERR! registry error parsing json npm http 200 https://registry.npmjs.org/form-data/-/form-data-0.1.2.tgz ...
这里的失败(再次在页面和页面之后):
npm http 200 https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz npm ERR! npm ERR! Additional logging details can be found in: npm ERR! /Users/dmitrizaitsev/Dropbox/Priv/APP/npm-debug.log npm ERR! not ok code 0
答案 0 :(得分:2)
首先,要解决你的两个问题,
npm应默认缓存包,请参阅config example here(我的〜/ .npm中包含缓存包)。我假设你正在为你的包使用package.json文件?
如果您真的希望在自己的计算机上安装一些软件包的某个版本,或许请查看npm-mirror?
从外观来看,你的rimraf下载的问题似乎是它失败/被破坏(sha1总和不匹配)。我可以在我的机器上成功下载rimraf而没有任何问题。
此外,如果您使用git推送到您的服务器并担心您的服务器每次推送时重新安装软件包,我的一个.git挂钩(post-receive)中的内容是缓存npm软件包,然后checkout my repo(不保留npm包),然后在运行npm install
之前将它们重新放回,这样它们就不必重新下载了。