在私有注册表上发布和安装npm软件包时出现问题

时间:2019-05-30 15:12:32

标签: javascript node.js npm

我完成了我的包(1个js文件),并希望将其发布在工件上。

package.json:

{
  "name": "@company/package_name",
  "main": "dist/index.js",
  "publishConfig": {
    "registry": "http://artifactory_url"
  },
  "files": ["dist/index.js"],
  "devDependencies": {
    "tslint": "^5.15.0",
    "webpack": "^4.29.6",
  },
  "dependencies": {
    "axios": "^0.18.0"
  }
}

我将其发布:

npm login --registry=https://artifacory_url --scope=@company
npm publish

我的npm软件包现在在工件上可用(1个js文件和package.json)

现在,如果我要安装它:

npm install @company/package_name --registry=https://artifacory_url

它抱怨npm注册表中没有依赖项:

Not Found - GET https:artifactory_url/axios - not_found
npm ERR! 404 
npm ERR! 404  'axios@^0.18.0' is not in the npm registry

当然是对的,我没有在注册表中发布axios,但是我希望它可以从npm注册表中获取。

我不确定要遵循的策略。 我使用webpack,因此axios已捆绑在我的dist/index.js文件中。我应该像对待tslint这样的devDependencies吗?看来这不是开发人员对我的依赖...

1 个答案:

答案 0 :(得分:1)

npm开发人员不会立即促进/允许向多个注册表发布,因为这可能会导致以下问题:

  • 给定版本可以在一个注册表上,而不能在另一个注册表上
  • 可以使用不同的代码在每个注册表上发布相同的版本

为解决私有/公共注册管理机构之间的问题,大多数私有注册管理机构都使用代理功能(如果请求的软件包在私有存储库中提供,否则将请求委托给公共注册管理机构。)

许多注册表解决方案还提供复制功能。

使用这些功能,您应该只能在一个注册表上发布并从多个注册表提供服务。

您正在使用人工制品,他们可以rewriting对其进行外部依赖。

在npm virtual中选中Enable Dependency Rewrite复选框 存储库高级配置。