NPM:如何在命令行中指定要发布的注册表?

nev*_*ves 12 npm nexus3

我正在测试我们的 npm 包注册表的新版本。我想在我们的 CI 服务器中运行一个作业,指定一个不同于默认值的注册表。

我试图执行,npm publish --registry "http://nexus.dsv.myhost/nexus/repository/npmjs-registry但没有奏效。它已发布到默认注册表。

如何在运行时指定不同的注册表npm publish。它是一个作用域包。

meg*_*lop 40

听起来您在 npm 配置中的某处配置了特定于范围的注册表。

npm 将合并您的全局、本地和 CLI 提供的配置。但是任何特定于作用域的配置都将优先于无作用域的配置,无论它们是在哪里定义的。

例如,如果您@myscope:registry=xyz的文件中包含~/.npmrc此内容,则该内容将优先于--registry=abcCLI 上提供的内容,因为特定范围的注册表始终会覆盖无范围的注册表。

但是,您也可以在 CLI 本身上传递特定于范围的注册表,如下所示:

npm publish --@myscope:registry=http://nexus.dsv.myhost/nexus/repository/npmjs-registry

Run Code Online (Sandbox Code Playgroud)

请注意,由于nopt(npm 在后台使用它来解析 CLI 选项)解析自由格式开关的方式,=此处的符号是必需的。如果您改为使用空格,它将无法按预期工作。


Jak*_*ger 20

有多种方法可以实现这一点。

1)使用npm config全局设置注册表

npm config set registry http://nexus.dsv.myhost/nexus/repository/npmjs
Run Code Online (Sandbox Code Playgroud)

2)使用npm config设定为包范围注册表

npm config set @<your scope here>:registry http://nexus.dsv.myhost/nexus/repository/npmjs
Run Code Online (Sandbox Code Playgroud)

3)使用发布配置配置您的 package.json :

{
  ...
  "publishConfig": {
    "registry": "http://nexus.dsv.myhost/nexus/repository/npmjs"
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

4)使用npmrc配置注册表

registry=http://nexus.dsv.myhost/nexus/repository/npmjs
Run Code Online (Sandbox Code Playgroud)

  • 如果您需要特定于作业,您的 CI 作业可以在尝试发布之前在包的根目录生成一个“.npmrc”文件。我更新了我的答案以包含有关 npmrc 文件的详细信息。 (3认同)
  • `npm config` 不起作用,因为我有一个共享的 Node 安装。它是一个 CI 服务器。这将更改服务器中运行的所有内容的配置。我只是想针对特定工作更改它。最好在命令行配置一些东西,这样我就不需要更改代码。 (2认同)