如何创建Verdaccio的脱机私人注册表

时间:2019-12-25 11:43:50

标签: node.js npm npm-publish verdaccio

我用npm registry创建了私人verdaccio

我希望能够运行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:\Users\Admin\Desktop\test ng\ng-prj\node_modules\acorn

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?

是否有一种简单的方法?

2 个答案:

答案 0 :(得分:1)

这里是Verdaccio维护者。

  

我希望能够运行npm install --registry =“ http:// localhost:4873”并从私有注册表中获取所有依赖项。

您想要的是拥有一个包含所有依赖项的脱机注册表。发布所有node_modules是不切实际的,几乎是不可能的。

  

更多成功发布,但是在某些情况下,我遇到了错误。例如在zone.js

这就是重点,您将需要构建每个依赖项,但这没有任何意义。常规项目可以轻松地具有数千个依赖项和子依赖项。更不用说您会失去未来依赖更新的来临。

因此,您需要正确地缓存存储文件夹中的所有依赖项。

  1. 运行verdaccio $> verdaccio
  2. 确保您在线
  3. 运行npm install --registry="http://localhost:4873
  4. 安装完成后,请检查本地缓存,请参阅here how to find it。您应该能够看到缓存中所有已解决的依赖性。
  5. 如果您想获得真正的离线体验,请按照以下说明从配置文件中注释proxy
packages:
  '@*/*':
    access: $all
    publish: $authenticated
    # proxy: npmjs

  '**':
    access: $all
    publish: $authenticated
    # proxy: npmjs
  

如果您注释掉proxy,Verdaccio不会要求对遥控器进行任何更新,默认情况下为npmjs,因此将不执行与外部网络的连接。

  1. 重新启动Verdaccio
  2. 重复所需的时间。

因此,这里介绍了这种方法的优点。

  1. 当您离线时(必须再次注释掉代理部分),您将允许Verdaccio解析是否有新的依赖项要缓存(如果您正在使用semver,例如:lodash: ^1.5.6
  2. 您将拥有真正的安装经验,不用担心删除node_modules并清洁npm cache
  3. 存储只是一个文件夹,因此您可以将其移植到另一个位置(通过USB或LAN)
  4. 与多个项目和节点程序包管理器工具(纱线,npm或pnpn)共享缓存
  5. 您不必在node_modules中发布每个软件包,因此请参见第2点。

希望这对您有所帮助。此外,还有其他一些与离线模式有关的做法,但仅与yarn有关。

答案 1 :(得分:0)

我们使用了上述 Juan Picado 的建议。这是我们所做的:

  1. 在 /home/verdaccio/config.yaml 编辑 verdaccio 的配置文件
  2. 确保允许代理
  3. 将 npm 注册表设置为指向您的 verdaccio 实例
  4. 在系统上创建一个文件夹(任何文件夹)并运行 npm install 命令来下载包
  5. 检查 /home/verdaccio/storage/ 目录。下载的软件包及其依赖项现在应该位于该目录中。
  6. 编辑 verdaccio 的配置文件,注释掉两行“代理”以关闭代理
  7. 重启verdaccio

此时运行 npm install 命令只会指向您的 verdaccio 实例,而不会转到 registry.npmjs.com,并且 /home/verdaccio/storage 中的包将是您的离线可用包。