首页 文章

是否可以从下载的捆绑包本地运行npm软件包安装?

提问于
浏览
3

我对NodeJS很新,所以如果我的问题很天真,请原谅 . 我觉得在服务器上运行Javascript很有意思 .

然而,有一件事严重削弱了我的经验 . 对于每个新包,这是一个冗长的容易出错的安装过程,导致似乎永远不会结束一系列HTTP请求 . 我甚至可以一次又一次地看到相同资源的多个请求,而我可能已经缓存了这些请求 .

更糟糕的是,在许多其他请求完成并浪费时间后,我经常会遇到错误,之后安装失败没有明确的原因 .

我的问题是:

  • 是否可以先下载最常用的软件包,以避免通过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

1 回答

  • 2

    首先,要解决你的两个问题,

    • 似乎没有"most used packages"的捆绑,这可能是因为他们认为下载你需要的更容易 .

    • 是的,这似乎是对第一个问题的补充 . 无论如何,还不会通过http捆绑包裹?

    npm应默认缓存包,请参阅config example here(我的〜/ .npm中包含缓存包) . 我假设你正在为你的包使用package.json文件?

    如果你真的很想在自己的机器上安装一些软件包的版本,或者看一下npm-mirror

    通过它的外观你的rimraf下载的问题似乎是它失败/被破坏(sha1总和不匹配) . 我可以在我的机器上成功下载rimraf而没有任何问题 .

    此外,如果您使用git推送到您的服务器并担心您的服务器每次推送时重新安装包,我在我的.git挂钩(post-receive)中的内容是缓存npm包,然后检查我的repo (它不保留npm软件包),然后在运行 npm install 之前将它们重新放回,这样它们就不必重新下载了 .

相关问题