使用lerna和本地依赖项的正确方法是什么?
我在单声道仓库中配置了两个模块,以使用具有本地依赖性的lerna。我希望如此
$ lerna bootstrap
$ lerna run test
足以下载所有外部依赖关系,链接本地依赖关系并执行并通过所有模块中的所有测试。
根据lerna bootstrap文档:
- 将所有相互依赖的Lerna软件包符号链接在一起。
因此,我希望lerna bootstrap
将在module-b/node_modules
下创建一个指向module-a
的符号链接(然后将允许执行并通过测试)。
没有链接发生,这会导致测试失败:
lerna ERR!纱线运行测试在“模块b”中退出1 lerna ERR!纱线运行测试标准: 纱线运行v1.19.1 开玩笑 信息请访问https://yarnpkg.com/en/docs/cli/run,以获取有关此命令的文档。
lerna ERR!纱线测试stderr: 失败./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应用程序,并且电子制造商希望将其依赖项安装在packages/module-b/node_modules/
文件夹中。
答案 0 :(得分:0)
我已经尝试过您的实现。
在file:../module-a
中使用packages/module-b/package.json
对我不起作用。
您可以通过为module-a
写一个版本号来轻松解决它(这无关紧要,因为我们会force-local
)
{
"name": "module-b",
"version": "1.0.0",
"private": true,
"main": "index.js",
"scripts": {
"test": "jest"
},
"dependencies": {
"module-a": "1.0.0"
},
"devDependencies": {
"jest": "^24.9.0"
}
}
在项目的根部:
本地版本的引导程序和链接:
npx lerna bootstrap --force-local
运行测试:
npx lerna run test
答案 1 :(得分:-1)
对我来说,它的工作原理是将其安装并安装在node_module文件夹中
npx lerna exec -- npm install