首页 > 解决方案 > 将具有依赖关系的 npm 包提升到发布视图

问题描述

想象一下具有两个视图的 npm 包的Azure DevOps源 (MyFeed):本地和发布。这个提要有一个上游源https://registry.npmjs.org/。两个包(@scope/a 和@scope/b)已经发布并且它们在本地视图中。它们都直接依赖于npmjs的prop-types包:

  "dependencies": {
    "prop-types": "^15.7.2"
  },
  "peerDependencies": {
    "react": "^16.12.0",
    ...
  }

包“a”和“b”被安装,构建(Storybook,ie)并部署到一些测试环境以供审查。在安装包期间,它们的依赖属性类型会从上游保存到提要的本地视图。

假设包 A 通过审查并被提升到 @Release 视图。然后我尝试将它安装到连接到 MyFeed@Release 的主项目中。但安装失败,因为 prop-types 仍在本地视图中:

$ npm i @scope/a
npm ERR! code E404
npm ERR! 404 Not Found - GET https://*/*/_packaging/MyFeed%40Release/npm/registry/prop-types - NotFound
npm ERR! 404
npm ERR! 404  'prop-types@^15.7.2' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404 It was specified as a dependency of '@scope/a'

开始使用包“a”的唯一方法是将其所有依赖项提升到同一视图(之后包“b”仍然正确安装)。但它不应该自动完成吗?或者是否有使用未升级(本地)上游包的解决方法?来自 npmjs 的公共包可能有很多依赖项,这些依赖项很难手动管理。

也许我应该创建另一个提要,连接到 npmjs 并在 MyFeed 的“前面”使用它,如下所示: npmjs <- MyUpstreamFeed(仅限本地视图)<- MyFeed(不直接连接到 npmjs)。

标签: azurenpmazure-devops

解决方案


推荐阅读