Lerna不会为每个软件包生成package-lock.json

时间:2020-01-16 11:08:29

标签: lerna package-lock.json

下面是问题的描述:-

预期的行为是要为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中的依赖项,而不包含evey 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 |

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

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

谢谢, Vishesh。

1 个答案:

答案 0 :(得分:0)

我找不到为所有软件包生成锁定文件的具体解决方案。我的意思是有很多方法,但是,所有这些都会使安装时间增加到很高。以下是为所有软件包生成package-lock.json文件的两种方法:-

  1. 直接使用不带--hoist标志的lerna引导程序-------确实会生成锁定文件,但是会增加安装时间。

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

由于上述2种解决方案花费了很多时间,因此我认为它们不是用于大型仓库的可行解决方案,因此,我想出了第三种方法或将其称为解决方法,这也不是清洁的解决方案,但只需稍微增加安装时间即可完成这项工作。

在所有程序包中创建一个npm脚本,该脚本将仅生成程序包锁定文件而无需安装,如下所示: “ genPackagelock”:“ npm i-仅限于包锁定”

在安装后将root.package.json文件作为后安装的一部分,为所有软件包调用上述定义的脚本,如下所示: “ postinstall”:“ lerna run --parallel genPackagelock”

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

相关问题