Lernaとローカルの依存関係を処理する適切な方法は何ですか?
ローカル依存関係のあるlernaを使用するために、2つのモジュールをモノリポジトリで構成しました。と思った
$ lerna bootstrap
$ lerna run test
すべての外部依存関係をダウンロードし、ローカル依存関係をリンクし、すべてのモジュールですべてのテストを実行して渡すには十分です。
lerna bootstrap のドキュメントに従って:
- 相互に依存関係にあるすべてのLernaパッケージをシンボリックリンクします。
したがって、私はlerna bootstrap
がmodule-b/node_modules
を指すmodule-a
の下にシンボリックリンクを作成し、テストを実行して合格することを期待していました。
リンクが発生しないため、テストが失敗します。
lerna ERR!糸走行テストは 'module-b' lerna ERRで1で終了しました!ヤーンランテストの標準出力:ヤーンランv1.19.1 $ jest infoこのコマンドのドキュメントについては、 https://yarnpkg.com/en/docs/cli/run にアクセスしてください。
lerna ERR! yarn run test stderr:FAIL ./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
への参照がまだ含まれていないため、テストは引き続き失敗します。
module-b
はElectronアプリであり、electron builderはその依存関係がpackages/module-b/node_modules/
フォルダーにインストールされることを想定しているため、lernaと一緒に yarn workspaces を使用できません。
私はあなたの実装を試しました。
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
私にとっては、それは機能し、node_moduleフォルダにパッケージをインストールしました
npx lerna exec -- npm install