Lerna 没有为每个包生成 package-lock.json
Lerna not generating package-lock.json for every package
问题描述如下:-
预期行为 是为 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 文件,应该生成相应的包-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 |
下面是我已经研究过的一些 post 相关内容-
谢谢,
Vishesh.
我找不到为所有包生成锁定文件的具体解决方案。我的意思是有办法,但是,一切都将安装时间增加到非常高。以下是为所有包生成 package-lock.json 文件的 2 种方法:-
不带 --hoist 标志直接使用 lerna bootstrap ------ 这确实会生成锁定文件,但会增加安装时间。
使用“lerna exec -- npm i” ------ 这将生成锁定文件,但“安装”时间要长得多,这不是我的存储库中有 25 个包的可行解决方案。
由于上述 2 个解决方案占用了很多时间,因此我认为它们不是大型回购的可行解决方案,因此,我想出了第三种方法,或者我称之为解决方法,这也不是最干净的方法解决方案,但安装时间略有增加。
在你所有的包中创建一个 npm 脚本,它将只生成 package-lock 文件而无需安装,如下所示:-
"genPackagelock": "npm i --package-lock-only"
在您的根 package.json 文件中,作为安装后的一部分,为所有包调用上面定义的脚本,如下所示:-
“安装后”:“lerna 运行 --parallel genPackagelock
上面的“安装后”基本上为所有包以及内部依赖项生成 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 文件,应该生成相应的包-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 |
下面是我已经研究过的一些 post 相关内容-
谢谢, Vishesh.
我找不到为所有包生成锁定文件的具体解决方案。我的意思是有办法,但是,一切都将安装时间增加到非常高。以下是为所有包生成 package-lock.json 文件的 2 种方法:-
不带 --hoist 标志直接使用 lerna bootstrap ------ 这确实会生成锁定文件,但会增加安装时间。
使用“lerna exec -- npm i” ------ 这将生成锁定文件,但“安装”时间要长得多,这不是我的存储库中有 25 个包的可行解决方案。
由于上述 2 个解决方案占用了很多时间,因此我认为它们不是大型回购的可行解决方案,因此,我想出了第三种方法,或者我称之为解决方法,这也不是最干净的方法解决方案,但安装时间略有增加。
在你所有的包中创建一个 npm 脚本,它将只生成 package-lock 文件而无需安装,如下所示:- "genPackagelock": "npm i --package-lock-only"
在您的根 package.json 文件中,作为安装后的一部分,为所有包调用上面定义的脚本,如下所示:- “安装后”:“lerna 运行 --parallel genPackagelock
上面的“安装后”基本上为所有包以及内部依赖项生成 package-lock.json 文件。