2016-06-01 2 views
1

問題: SPAのコードを複数のバンドルに分割しています。各バンドルには独自のバージョンがあります。したがって、prodでは、ユーザーの設定に基づいて異なるバージョンのバンドルを使用したいと考えています。したがって、同じモジュールのバージョン間でモジュールIDが変更されないようにする必要があります。Webpack:モジュールIDを無効にする方法は?

可能な解決策の1つは、configにrecordsPathを定義し、VCの下にレコードファイルを格納することです。しかし、私たちのライブラリを更新すると、ファイルは常に大きくなります。

もう1つの方法は、webpackがどのようにモジュールIDをCompilation.prototype.applyModuleIdsに生成するかを上書きすることです(モジュールへの相対パスをモジュールIDとして使用できます)。

これは安全ですか、何かを見逃してしまいました。問題を処理するためのウェブパック機能やプラグインがありますか?

答えて

1

Webpack 1.9.xではこれを行うのが完全に安全です。 YMMVをwebpack 2と一緒に使ってみましたが、この方法の単純な性質のために私は期待しませんでした。

同じモジュールに常に同じIDが与えられるという条件を満たす限り、webpackは正常に機能します。私は、次の実装を使用して終了:

var md5 = require('md5'); 

module.exports = function handleWebpackModuleSymlinks(Compilation) { 
    Compilation.prototype.applyModuleIds = function() { 
    this.modules.forEach(function(module) { 
     if (module.id === null) { 
     module.id = md5(module.userRequest); 
     } 
    }, this); 
    }; 
} 

これは、箱から出して動作するはずの行動である各ファイルへの解決の絶対パスを、オフに基づいていますが、私は原因の使用に自分自身を実装するために必要なモジュールのハッシュを作成します。シンボリックリンクnode_modulesは、開発中にデフォルトのパス比較ロジックをスローします。意図した効果を達成するために、正規表現を使用して、ハッシングの前にリソースパスのバージョンコンポーネントを置き換えることができます。

関連する問題