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

NPM:如何在命令行中指定要发布的注册表?,npm,nexus3,Npm,Nexus3,我正在测试新版本的npm软件包注册表。我想在CI服务器中运行一个作业,指定不同于默认值的注册表 我试图执行npm publish--registry“http://nexus.dsv.myhost/nexus/repository/npmjs-registry但它不起作用。它已发布到默认注册表 如何在运行npm publish时指定不同的注册表。它是一个有范围的包。有多种方法可以实现这一点 1) 使用npm config来: 2) 使用npm config来: 4) 使用npmrc 听起来您在n

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

我试图执行
npm publish--registry“http://nexus.dsv.myhost/nexus/repository/npmjs-registry
但它不起作用。它已发布到默认注册表


如何在运行npm publish时指定不同的注册表。它是一个有范围的包。

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

1) 使用
npm config
来:

2) 使用
npm config
来:

4) 使用
npmrc


听起来您在npm配置中的某个地方配置了一个特定于作用域的注册表

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

例如,如果在
~/.npmrc
文件中有
@myscope:registry=xyz
,则该文件将优先于CLI上提供的
--registry=abc
,因为特定于作用域的注册表始终覆盖未作用域的注册表

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

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

请注意,由于nopt的方式(这是npm在引擎盖下解析CLI选项的方式)解析自由形式开关时,此处需要
=
符号。如果您使用空格,它将无法按预期工作。

npm配置无法工作,因为我有一个共享节点安装。它是一个CI服务器。这将更改服务器中运行的所有内容的配置。我只想更改一个特定的配置c作业。最好在命令行中配置一些内容,这样我就不需要更改代码。如果需要特定于作业,您的CI作业可以在尝试发布之前在包的根目录下生成一个
.npmrc
文件。我更新了答案,以包含有关npmrc文件的详细信息。
npm config set registry http://nexus.dsv.myhost/nexus/repository/npmjs
npm config set @<your scope here>:registry http://nexus.dsv.myhost/nexus/repository/npmjs
{
  ...
  "publishConfig": {
    "registry": "http://nexus.dsv.myhost/nexus/repository/npmjs"
  },
  ...
}
registry=http://nexus.dsv.myhost/nexus/repository/npmjs