【发布时间】:2015-11-12 22:41:23
【问题描述】:
我正在考虑在我的计算机上设置一个本地 npm 镜像,例如“npm_lazy”。
但似乎npm install 和npm shrinkwrap 不适用于本地镜像。
让我解释一下。当有npm-shrinkwrap.json 文件时,npm install 命令总是从收缩包装文件的"resolved" 属性中指定的 URL 请求包。因此,即使我有一个在 http://localhost:12345/ 运行的本地 npm 镜像,即使我将 npm 配置为将其用作其注册表,它也不会不从我的本地镜像请求任何包模块(除非收缩包装文件中的"resolved" 属性恰好指向http://localhost:12345/)。
基本上,npm install 会忽略 npm 的注册表配置并遵循 shrinkwrap "resolved" 属性。
npm install 使用 "resolved" 属性而不是使用依赖包名称和版本动态构造它是否有原因?为什么 npm-shrinkwrap.json 有这个字段呢?
回到我的问题。我想使用 npm_lazy 作为本地 npm 镜像。我可以重写npm-shrinkwrap.json 中的所有"resolved" URL 以指向http://localhost:12345/。但是我的收缩包装文件的可移植性较差——除非他们的计算机运行相同的 npm_lazy 服务器,否则我的同事将无法使用。
我考虑将所有registry.npmjs.org 流量重定向到localhost 以创建透明镜像。但这太难了——它需要支持 HTTPS,而且,npm_lazy 将如何访问真正的域?我必须通过它的 IP 地址来指定它,这可能会改变。
有没有其他人尝试做同样的事情——设置本地计算机 NPM 缓存? 但是,我的主要问题是,为什么 npm 使用“已解决”属性?谢谢。
【问题讨论】:
标签: npm npm-install npm-shrinkwrap npm-lazy