web-dev-qa-db-ja.com

Lerna bootstrapローカル依存関係をリンクしませんか?

Lernaとローカルの依存関係を処理する適切な方法は何ですか?


ローカル依存関係のあるlernaを使用するために、2つのモジュールをモノリポジトリで構成しました。と思った

$ lerna bootstrap
$ lerna run test

すべての外部依存関係をダウンロードし、ローカル依存関係をリンクし、すべてのモジュールですべてのテストを実行して渡すには十分です。

予想される行動

lerna bootstrap のドキュメントに従って:

  1. 相互に依存関係にあるすべてのLernaパッケージをシンボリックリンクします。

したがって、私はlerna bootstrapmodule-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)

再現する手順

  1. 以下のフォルダ構造を作成します
  2. インライン化されたファイルを対応するディレクトリにコピーします
  3. $ 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 を使用できません。

環境

  • lerna-バージョン3.18.4
  • npm-バージョン6.11.3
  • 糸-バージョン1.19.1
  • ノード-バージョンv12.12.0
  • macOS Mojave 10.14.6
2
matsev

私はあなたの実装を試しました。

file:../module-apackages/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

2
kitimenpolku

私にとっては、それは機能し、node_moduleフォルダにパッケージをインストールしました

npx lerna exec -- npm install
0
D V Yogesh