5

問題が再現される場所は次のとおりです。

https://github.com/reggi/webpack-lerna-babel-loader-issue

目標: ./packages/usage/index.jswebpack でビルドしようとしています。

  • 私は4つのパッケージを持っていますalpha, beta, gamma, usage.
  • alphabetagammaはbabelを使用していないため、index.jsを使用して消費する必要があります
  • usageバベルを使用しており、次を使用して変換する必要がありbabel-loaderます。その後、トラバーサルを続行する必要があります

私が試してコンパイルするbabelと、奇妙に他の依存関係が要求されます。

$ lerna bootstrap
Lerna v2.0.0-beta.20
Linking all dependencies
Successfully bootstrapped 4 packages.
$ cd packages/usage
$ npm run webpack

> @reggi/usage@1.0.0 webpack /Users/thomasreggi/Desktop/webpack-issue/packages/usage
> webpack

Hash: 27e6d9d1d4147417b516
Version: webpack 1.13.1
Time: 429ms
    Asset     Size  Chunks             Chunk Names
bundle.js  2.11 kB       0  [emitted]  main
    + 3 hidden modules

ERROR in ../alpha/index.js
Module not found: Error: Cannot resolve module 'babel' in /Users/thomasreggi/Desktop/webpack-issue/packages/alpha
 @ ../alpha/index.js 1:11-33

そして{ exclude: /(node_modules|bower_components)/ }有効にすると、これが得られます。

$ npm run webpack

> @reggi/usage@1.0.0 webpack /Users/thomasreggi/Desktop/webpack-issue/packages/usage
> webpack

Hash: 99d08ad8b664833bba1c
Version: webpack 1.13.1
Time: 401ms
    Asset     Size  Chunks             Chunk Names
bundle.js  2.25 kB       0  [emitted]  main
    + 4 hidden modules

ERROR in ../alpha/~/@reggi/beta/index.js
Module not found: Error: Cannot resolve module 'babel' in /Users/thomasreggi/Desktop/webpack-issue/packages/alpha/node_modules/@reggi/beta
 @ ../alpha/~/@reggi/beta/index.js 1:17-82

バンドルの種類

babel-loader除外せずにnode_modules

https://github.com/reggi/webpack-lerna-babel-loader-issue/blob/master/packages/usage/bundle-without-exclude.js#L70

モジュール \"@reggi/beta\" が見つかりません

除外babel-loaderありnode_modules

https://github.com/reggi/webpack-lerna-babel-loader-issue/blob/master/packages/usage/bundle-with-exclude.js#L77

モジュール \"/Users/thomasreggi/Desktop/webpack-issue/packages/beta\" が見つかりません

&なしbabel-loaderでコードを切り替えるrequire

https://github.com/reggi/webpack-lerna-babel-loader-issue/blob/master/packages/usage/bundle-without-babel.js#L97

すべてを完全に含みます。

4

2 に答える 2

3

Lerna を使用する利点の 1 つはdevDependencies、リポジトリ ルートにプルアップして、個々のパッケージからそれらを除外できることです。devDependenciesこれにより、多くのパッケージで使用されている場合、ブートストラップ時間が大幅に改善されます。この場合、この奇妙なバベルの動作を回避するのにも役立ちます。

devDependenciespackages/usageルートに移動する場合:

diff --git a/package.json b/package.json
index d3728db..e9b313b 100644
--- a/package.json
+++ b/package.json
@@ -1,5 +1,8 @@
 {
   "devDependencies": {
-    "lerna": "2.0.0-beta.20"
+    "babel-loader": "^6.2.4",
+    "babel-preset-es2015": "^6.9.0",
+    "lerna": "2.0.0-beta.20",
+    "webpack": "^1.13.1"
   }
 }
diff --git a/packages/usage/package.json b/packages/usage/package.json
index 7186ddf..387ddc4 100644
--- a/packages/usage/package.json
+++ b/packages/usage/package.json
@@ -17,10 +17,5 @@
     "presets": [
       "es2015"
     ]
-  },
-  "devDependencies": {
-    "babel-loader": "^6.2.4",
-    "babel-preset-es2015": "^6.9.0",
-    "webpack": "^1.13.1"
   }
 }

npm install次に、リポジトリ ルートで再実行します。その後、あなたのnpm run webpackインpackages/usageは成功するはずです。

Lerna を使用すると、ここで を使用してワークフローを簡素化できることにも注意してくださいlerna run webpack

于 2016-06-21T17:43:00.647 に答える
1

ここでこのエラーを見る:

ERROR in ../alpha/~/@reggi/beta/index.js
Module not found: Error: Cannot resolve module 'babel' in /Users/thomasreggi/Desktop/webpack-issue/packages/alpha/node_modules/@reggi/beta

require.resolve兄弟ディレクトリ node_modules を検索して見つけようとしないため、babel loader を見つけるのに問題があるようです。

webpack を構成して、babel ローダーを解決する場所 (usageプロジェクト内)を指定してみてください。

resolveLoader: {
  modulesDirectories: [
    path.resolve(__dirname, 'node_modules'),
  ],
},
于 2016-11-17T21:55:50.760 に答える