Lerna 没有为每个包生成 package-lock.json

Posted

技术标签:

【中文标题】Lerna 没有为每个包生成 package-lock.json【英文标题】:Lerna not generating package-lock.json for every package 【发布时间】:2020-05-03 05:15:42 【问题描述】:

以下是问题的描述:-

预期行为是为 packages 文件夹中的每个包生成一个 package-lock.json 文件。

当前行为 我目前的项目结构如下:-

packages/internal-package-1/package.json
packages/internal-package-2/package.json
packages/internal-package-3/package.json
lerna.json
package.json
package-lock.json

现在如上所示,只有一个 package-lock.json 文件是为 .整个项目,它只包含顶部 package.json 文件中的依赖项。

我的期望是每个 package.json 文件都应该生成对应的 package-lock.json,但事实并非如此。此外,顶层 package-lock.json 文件只包含顶层 package.json 中的依赖项,而不包含每个 package.json 文件中声明的所有依赖项。

现在,如果我们尝试在另一个项目中使用 internal-package-1 ,但由于该包没有锁定文件,因此会下载最新版本的依赖项,这不是预期的行为。

可能的解决方案 可能的解决方案或期望是为每个包生成一个锁定文件。

lerna.json


  "packages": [
    "packages/*",
    "packages/Foundation/src/SampleNestedModule"    
  ],
  "version": "0.0.0"

这个问题影响了我们,因为锁定文件不是为每个包生成的,如果我尝试在不同的项目中使用 internal-package-1,那么锁定的依赖项不会被下载,但它们的最新版本会被下载.

我们正在提升依赖项,因此我们修改了我们的 npm 安装脚本,如下所示:- "install": "lerna bootstrap --hoist" ,这会正确提升依赖,但不会为单个包生成锁定文件。

可执行版本

lerna --version 3.17.0
npm --version   6.10.1
yarn --version  Not using yarn
node --version  10.16.0
| OS | Version |
MACOS
| NAME | VERSION |
| macOS Catalina | 10.15.2 |

以下是我已经研究过的一些关于相同的帖子-

    https://github.com/lerna/lerna/issues/1462 https://github.com/lerna/lerna/issues/2105

谢谢, 维谢什。

【问题讨论】:

【参考方案1】:

我找不到为所有包生成锁定文件的具体解决方案。我的意思是有办法,但是,一切都将安装时间增加到非常高。以下是为所有包生成 package-lock.json 文件的两种方法:-

    直接使用不带 --hoist 标志的 lerna bootstrap ------- 这确实会生成锁定文件,但会增加安装时间。

    使用“lerna exec -- npm i” ------ 这将生成锁定文件,但“安装”时间要长得多,这不是我的存储库中有 25 个包的可行解决方案。

由于上述 2 个解决方案花费了很多时间,因此我认为它们不是大型回购的可行解决方案,因此,我想出了第三种方法,或者我称之为解决方法,这也不是 cleaneast 解决方案,但安装时间略有增加。

在所有包中创建一个 npm 脚本,该脚本将只生成包锁定文件而无需安装,如下所示:- "genPackagelock": "npm i --package-lock-only"

在您的根 package.json 文件中,作为 postinstall 的一部分,为所有包调用上述定义的脚本,如下所示:- "postinstall": "lerna run --parallel genPackagelock"

上面的“postinstall”基本上会为所有的包以及内部依赖生成 package-lock.json 文件。

【讨论】:

以上是关于Lerna 没有为每个包生成 package-lock.json的主要内容,如果未能解决你的问题,请参考以下文章

通过 git URL 从 lerna 管理的 monorepo 安装包

Lerna 备忘清单_开发速查表分享

Lerna 包和 PublishBuildArtifactsV1 任务

允许本地项目依赖本地 lerna 包

“lerna changed”列出所有包

Yarn workspace + lerna 在每个子包中创建 node_modules