【问题标题】:How to upgrade node module of the lerna's subpackage如何升级lerna分包的node模块
【发布时间】:2021-01-23 17:10:44
【问题描述】:

我开始使用lerna,以便能够使用单个命令为所有子包安装所有节点模块。 目前我不使用除lerna bootstrap 之外的任何其他lerna 功能。 我的lerna.json

{
  "lerna": "3.22.0",
  "npmClient": "yarn",
  "packages": [
    "package-a",
    "package-b"
  ],
  "version": "1.0.0"
}

我的根package.json

{
  "name": "test",
  "private": true,
  "version": "1.0.0",
  "scripts": {
    "postinstall": "lerna bootstrap"
  },
  "dependencies": {
    "lerna": "^3.22.1"
  }
}

我的package-apackage.json

{
  "name": "package-a",
  "version": "1.0.0",
  "private": true,
  "dependencies": {
    "moment": "2.22.0"
  }
}

我的package-bpackage.json

{
  "name": "package-b",
  "version": "1.0.0",
  "private": true,
  "dependencies": {
    "package-a": "1.0.0",
    "moment": "2.22.0"
  }
}

我想在package-b 中升级moment。 如果我在package-b 文件夹中运行yarn upgrade moment --latest,则会出现以下错误:

yarn upgrade v1.22.5
[1/4] ????  Resolving packages...
error Received malformed response from registry for "package-a". The registry may be down.
info Visit https://yarnpkg.com/en/docs/cli/upgrade for documentation about this command.

如果我在根文件夹中运行npx lerna --scope package-b exec -- "yarn upgrade moment --latest",我会收到以下错误:

lerna notice cli v3.22.1
lerna notice filter including "package-b"
lerna info filter [ 'package-b' ]
lerna info Executing command in 1 package: "yarn upgrade moment --latest"
yarn upgrade v1.22.5
[1/4] ????  Resolving packages...
error Received malformed response from registry for "package-a". The registry may be down.
info Visit https://yarnpkg.com/en/docs/cli/upgrade for documentation about this command.
lerna ERR! yarn upgrade moment --latest exited 1 in 'package-b'
lerna ERR! yarn upgrade moment --latest exited 1 in 'package-b'

应该如何正确升级lerna子包中的node模块?

【问题讨论】:

标签: javascript node.js npm yarnpkg lerna


【解决方案1】:

由于您的两个包都是私有的,npm 存储库在升级 moment 库期间无法找到它们。此外,lerna 包目前基本上没有维护。

有一个解决方法。从您的package-b.json 文件中临时删除"package-a": "1.0.0", 行。

更新package-b/package.json文件:

{
  "name": "package-b",
  "version": "1.0.0",
  "private": true,
  "dependencies": {
    "moment": "2.22.0"
  }
}

现在运行:

cd package-b && yarn upgrade moment --latest && cd ..

然后将"package-a": "1.0.0",back 放到您的package-b.json 文件中。

【讨论】:

  • 谢谢,我找到了这个解决方法。我希望我对如何使用 lerna 有误解。有什么建议可以代替 lerna 吗?我知道纱线工作区,但工作区使用了一些特殊的提升技术,所以我的项目无法正常工作。
  • 有 lerna 的替代品。但也许 lerna 也可以做到。你想达到什么目的?你想在未来发布你的包吗?
  • 不,我的包是私有的,没有发布计划。再次 - 我只需要 lerna 以拓扑顺序在所有子包中自动安装节点模块。我不需要其他 lerna 功能(除了 lerna run,它允许我在任何/所有子包中运行任何 npm 脚本)
  • rushstack 是 lerna 的一个很好的替代品。它也得到维护:) 你提到纱线工作区不适合你。真可惜,因为它们很容易对付。 yarn workspaces 正在安装 node_modules 下的所有软件包并对其进行符号链接。看到这个example(带打字稿的纱线工作区,也可以不用打字稿)
  • @SergeyP 我的回答是否回答了您的问题?如果是,请接受。 stackoverflow.com/help/someone-answers
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多