【发布时间】:2020-03-14 00:14:21
【问题描述】:
使用 lerna 和本地依赖项的正确方法是什么?
我在一个单声道存储库中配置了两个模块,以使用具有本地依赖项的 lerna。我预料到了
$ lerna bootstrap
$ lerna run test
足以下载所有外部依赖项、链接本地依赖项并执行并通过所有模块中的所有测试。
预期行为
根据lerna bootstrap 文档:
- 将所有相互依赖的 Lerna 包符号链接在一起。
因此,我预计 lerna bootstrap 会在下面的 module-b/node_modules 中创建一个指向 module-a 的符号链接(这样就可以执行并通过测试)。
当前行为
没有发生链接,导致测试失败:
lerna 错误!纱线运行测试在“模块-b”中退出 1 错了!纱线运行测试标准输出: 纱线运行 v1.19.1 $开玩笑 info 访问https://yarnpkg.com/en/docs/cli/run 获取有关此命令的文档。
lerna 错误!纱线运行测试标准错误: 失败./import.test.js ● 测试套件无法运行
Cannot find module 'module-a' from 'import.test.js' > 1 | const moduleA = require('module-a'); | ^ 2 | 3 | test('should import module-a', () => { 4 | moduleA(); at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:259:17) at Object.<anonymous> (import.test.js:1:1)
复制步骤
- 在下面创建文件夹结构
- 将内联的文件复制到对应的目录中
- 执行
$ lerna bootstrap,然后执行$ lerna run test
project-root
+ packages
| + module-a
| | + package.json
| | + index.js
| |
| + module-b
| | + package.json
| | + import.test.js
|
+ lerna.json
packages/module-a/package.json
{
"name": "module-a",
"version": "1.0.0",
"private": true,
"main": "index.js",
"scripts": {
"test": "echo \"Test passed in module-a\""
}
}
packages/module-a/index.js
module.exports = () => console.log('Log in module-a');
packages/module-b/package.json
{
"name": "module-b",
"version": "1.0.0",
"private": true,
"main": "index.js",
"scripts": {
"test": "jest"
},
"dependencies": {
"module-a": "file:../module-a"
},
"devDependencies": {
"jest": "^24.9.0"
}
}
packages/module-b/import.test.js
const moduleA = require('module-a');
test('should import module-a', () => {
moduleA();
});
lerna.json
{
"npmClient": "yarn",
"packages": [
"packages/*"
],
"version": "independent"
}
观察
执行lerna link --force-local 不会改变现状,测试仍然失败,因为module-b/node_modules/ 仍然不包含对module-a 的引用。
备注
我不能将 yarn workspaces 与 lerna 一起使用,因为 module-b 是一个 Electron 应用程序,并且 electron 构建器希望其依赖项安装在 packages/module-b/node_modules/ 文件夹中。
环境
- lerna --version 3.18.4
- npm --version 6.11.3
- yarn --version 1.19.1
- 节点 --version v12.12.0
- macOS Mojave 10.14.6
【问题讨论】:
-
投票this proposal 以缓解标签混淆。
标签: javascript node.js yarnpkg lerna