私はPage1
とPage2
という2つのページがあるとします。jquery
backbone
のようないくつかのライブラリ(ベンダー)を使用して、1つのファイルとして抽出したい場合は、共有モジュール(ベンダーを除外)を別のファイル単一のファイル、これはWebPACKのコンフィグである:上記の設定でしかしWebpack:CommonsChunkPluginでエントリを複数の一般的なチャンクに束ねるには?
function listFiles(srcpath) {
return fs.readdirSync(srcpath).filter(function (file) {
return fs.statSync(path.join(srcpath, file)).isDirectory();
});
}
var createEntry = function (src) {
var dest = {
vendor: ["backbone", "underscore"]
};
var files = listFiles(src);
files.forEach(function (dir) {
var name = dir;
dest[name] = src + "/" + dir + "/entry.js";
});
return dest;
};
//each sub directory contains a `entry.js` as the entry point for the page
var entries = createEntry("./app/pages");// {vender:['jquery','backbone'],page1:'src/page1/entry.js',page2:'src/page2/entry.js' }
var config = {
resolve: {
root: path.resolve('./app/'),
extensions: ['', '.js']
},
plugins: [
new webpack.optimize.CommonsChunkPlugin("vendor", "vendor.js", Infinity),
new webpack.optimize.CommonsChunkPlugin({
name: 'common',
filename: 'common.js',
minChunks: 2
})
],
entry: entries,
output: {
path: './../main/webapp/static/dist',
filename: '[name].js',
publicPath: '/static/dist'
}
};
module.exports = config;
:
common.js
はWebPACKのランタイムが含まれている、
page1.js
が含まれていますSのページ1指定されたモジュールと共有モジュール
page2.js
PAGE2がpage1.js
を意味し、page2.js
があまりにも多くのリピートコードが含まれているモジュールと共有モジュール
を指定含まれています。
その後、私は設定を変更しようとしました:
var entries = createEntry("./app/pages");
var chunks = [];
for (var k in entries) {
if (k === 'vendor')
continue;
chunks.push(k);
}
new webpack.optimize.CommonsChunkPlugin("vendor", "vendor.js", Infinity),
new webpack.optimize.CommonsChunkPlugin({
name: 'common',
filename: 'common.js',
minChunks: 2,
chunks:chunks
}),
その後
common.js
はWebPACKのランタイムおよびベンダーのライブラリが含まれており、共有モジュール
vendor.js
はWebPACKのランタイムおよびベンダーが含まれていますライブラリ。
page1.js
含まれPage1の指定されたモジュール
page2.js
含まPAGE2指定されたモジュール
近づくようだが、common.js
ベンダー
何も間違った
を含めるべきではないのですか?