Webpackをバンドラーとして使用しているアプリケーションに取り込む必要がある、昔ながらのプレーンで古いES5 JavaScriptがいくつかあります。問題は、これらのファイルの場所がパスが動的なフォルダー内にあることです。 webpackはrequire
内の式ではうまく機能せず、_require.context
_ではまったく許可されないようです。
既知のパスディレクトリがディレクトリおよびそのサブディレクトリ内のすべてのファイルを必要とする場合、このアプローチ正常に動作します:
let domainRequires = require.context('./app/domain', true, /\.js$/); domainRequires.keys().forEach(domainRequires);
_require.context
_で式を使用できないため、プレーンrequire
を使用してみましたが、それは動作していませんです。
require('../../path/to/code/my-library-' + versionNumber + '/domain/clazz.js');
完全な相対パスを使用します。
また、_require.context
_を使用しようとしましたが、正規表現部分を拡張して機能させ、運がありませんでした:
require.context('../../path/to/code', true, /^my-library-.*\/domain\/.*\.js$/);
どんな考え、提案、または解決策も歓迎されます。 webpackでサードパーティのものを使用する必要がある場合も、それで問題ありません。
私はこれを理解することになりました。 webpack _resolve.alias
_を使用して、次を追加できます。
_resolve: {
alias: {
common: path.resolve(__dirname, '../../path/to/code/my-library-' + versionNumber + '/domain')
}
}
_
_webpack.config
_で。
次に、私のコードで、_/domain
_ viaの下にあるすべてのファイルを要求できます。
_var commonRequires = require.context('common', true, /\.js$/);
commonRequires.keys().forEach(commonRequires);
_
同様に、次の方法で単一のファイルを取得できます。
_require('common/clazz.js'); // ../../path/to/code/my-library-1.0.0/domain/clazz.js
_
FWIW、versionNumber
を取得するには、ノードのfs
モジュールを使用してjsonファイルから読み取り、JSON.parse(file)
を使用して、_webpack.config
_の上部にあるバージョンを取得しました
Webpack 3.9(と思う)からcommonRequires
は必要ありません。 webpack.config.jsでこれを実行します。
resolve: {
alias: {
tmpDir: path.resolve(__dirname, '/tmp')
}
}
次に、カスタムモジュールを次のようにロードします。
const dynModule = require('tmpDir/dyn_module.js');
あなたの要件から何かを見逃しているかどうかはわかりませんが、commonRequires
は私には必要ではなく、Webpackはこれをうまくビルドします(そして動作します)。