我用verdaccio
创建私有npm registry
。
我希望能够运行npm install --registry="http://localhost:4873"
并从私有registry
获取所有依赖项。
我需要从我的项目node_modules
目录中发布所有包。
我必须在目录中的每个包中运行npm publish
node_module
。(我找不到更好的方法。
更多成功发布 但在某些情况下,我遇到了错误。 例如zone.js
包中:
npm ERR! code ELIFECYCLE npm ERR! errno 2 npm ERR! zone.js@0.8.29
prepublish: `tsc && gulp build` npm ERR! Exit status 2 npm ERR! npm
ERR! Failed at the zone.js@0.8.29 prepublish script. npm ERR! This is
probably not a problem with npm. There is likely additional logging
output above. npm WARN Local package.json exists, but node_modules
missing, did you mean to install?
或acorn
包装中:
acorn@5.7.3 build:main C:UsersAdminDesktoptest ngng-prjnode_modulesacorn
rollup -c rollup/config.main.js
'rollup' is not recognized as an internal or external command,
operable program or batch file.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! acorn@5.7.3 build:main: `rollup -c rollup/config.main.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the acorn@5.7.3 build:main script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to install?
有没有简单的方法可以做到这一点?
这里 Verdaccio 维护者.
我希望能够运行 npm install --registry="http://localhost:4873" 并从私有注册表获取所有依赖项。
你想要的是一个包含所有依赖项的脱机注册表。发布所有node_modules
是不切实际的,几乎是不可能的。
更多成功发布 但在某些情况下,我遇到了错误。 例如在区域中.js
这就是重点,您需要构建每个依赖项,这没有意义。一个常规项目可以很容易地有数千个依赖项和子依赖项。更不用说您将失去未来依赖项更新的出现。
因此,您需要的是正确缓存存储文件夹中的所有依赖项。
- 运行verdaccio
$> verdaccio
- 确保您在线
- 运行
npm install --registry="http://localhost:4873
- 安装完成后,检查您的本地缓存,请参阅此处如何找到它。您应该能够在缓存中看到所有已解析的依赖项。
- 如果您想要真正的离线体验,请按如下方式注释配置文件中的
proxy
packages:
'@*/*':
access: $all
publish: $authenticated
# proxy: npmjs
'**':
access: $all
publish: $authenticated
# proxy: npmjs
如果您注释掉
proxy
Verdaccio不会要求对遥控器进行任何更新,默认情况下是npmjs
,因此不会执行与外部网络的连接。
- Restart Verdaccio
- 根据需要重复该过程。
所以,在这里,这种方法的优点。
- 当您重新脱机时(您必须再次注释掉代理部分(,您将允许Verdaccio解决是否有新的依赖项要缓存(如果您使用的是semver,例如:
lodash: ^1.5.6
( - 您将获得真正的安装体验,无需担心移除
node_modules
并清洁npm cache
。 - 存储只是一个文件夹,因此您可以将其移植到另一个地方(通过 USB 或 LAN(
- 与多个项目和节点包管理器工具(yarn、npm 或 pnpn(共享缓存
- 您不必在
node_modules
中发布每个包,因此请参阅第 2 点(。
我希望这对你有所帮助。此外,还有其他与离线模式相关的实践,但仅限于纱线。
我们使用了胡安·皮卡多(Juan Picado(上面的建议。以下是我们所做的:
- 在/home/verdaccio/config.yaml 编辑 verdaccio 的配置文件
- 确保允许代理
- 将 npm 注册表设置为指向 verdaccio 实例
- 在系统上创建一个文件夹(任何文件夹(并运行 npm install 命令以下载软件包
- 查看/home/verdaccio/storage/目录。下载的包及其依赖项现在应位于该目录中。
- 编辑Verdaccio的配置文件,注释掉两个"代理"行,以便关闭代理
- 重新启动韦尔达乔
此时运行 npm install 命令将仅指向您的 verdaccio 实例,而不会指向 registry.npmjs.com 并且/home/verdaccio/storage 中的软件包将是您的离线可用软件包。