Webpack 2:供应商、通用和特定包
Webpack 2: vendor, common and specific bundles
使用 CommonsChunkPlugin
我目前的代码分为:
vendors.js
common.js
page-1.js
page-2-authenticated.js
page-3-authenticated.js
所以 page-1.html
我加载了以下脚本:
<script src="vendors.js" />
<script src="common.js" />
<script src="page-1.js" />
工作正常,page-1.js
、page-2-authenticated.js
和 page-3-authenticated.js
中的所有共享代码都捆绑到 common.js
。
如您所见,我的应用程序要求用户登录 page-2-authenticated.html
和 page-3-authenticated.html
。但是,page-2-authenticated.js
和 page-3-authenticated.js
中的共享代码也被捆绑到 common.js
中。 但我不想打扰未登录的用户,使用仅在您登录时使用的代码。
所以 page-2-authenticated.html
我想要:
<script src="vendors.js" />
<script src="common.js" />
<script src="common-authenticated.js" /> // Shared code for authenticated users
<script src="page-2-authenticated.js" />
但是,当我在 common-authenticated.js
中导出一个测试变量并将它们导入 page-2-authenticated.js
和 page-3-authenticated.js
时,此共享代码仍然捆绑在 common.js
中。 common-authenticated.js
是空的(只有一些 webpackJsonp([12],[],[85]);
)。
我有以下 webpack 2 配置:
entry: {
vendors: ['react'],
common: 'index.js',
'common-authenticated': 'common-authenticated.js',
'page-1': 'page-1.js',
'page-2-authenticated': 'page-2-authenticated.js',
'page-3-authenticated': 'page-3-authenticated.js'
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({
// The order of this array matters
names: ['common', 'vendors'],
minChunks: 2
})
]
问题:如何将特定代码捆绑到common-authenticated.js
?有什么想法吗?
我能够通过以下配置解决它:
entry: {
// Same as in topic start
},
plugins: [
/*
* Check the files used for pages on which you need to be logged in
* and bundle the shared code of these files in a chunk named
* 'common-authenticated' (its output will be in 'common-authenticated.js')
*/
new webpack.optimize.CommonsChunkPlugin({
name: 'common-authenticated',
chunks: [
'page-2-authenticated',
'page-3-authenticated'
],
minChunks: 2
}),
/*
* Now check for shared code in the bundle defined above plus the files for
* pages on which you do not need to be logged in. Bundle this shared code into
* 'common.js'
*/
new webpack.optimize.CommonsChunkPlugin({
name: 'common',
chunks: [
'common-authenticated', // Name of the chunk defined above
'page-1'
],
minChunks: 2
}),
/*
* I don't really now how this works. But it works :).
* It generates the 'vendors.js'
*/
new webpack.optimize.CommonsChunkPlugin({
name: 'vendors',
chunks: ['common', 'vendors'],
minChunks: 2
})
]
它正是我想要的。 page-1.html
中的脚本加载保持不变(我在那里不需要 common-authenticated.js
)。 page-2-authenticated.html
现在有:
<script src="vendors.js" />
<script src="common.js" />
<script src="common-authenticated.js" /> // Shared code for authenticated users
<script src="page-2-authenticated.js" />
使用 CommonsChunkPlugin
我目前的代码分为:
vendors.js
common.js
page-1.js
page-2-authenticated.js
page-3-authenticated.js
所以 page-1.html
我加载了以下脚本:
<script src="vendors.js" />
<script src="common.js" />
<script src="page-1.js" />
工作正常,page-1.js
、page-2-authenticated.js
和 page-3-authenticated.js
中的所有共享代码都捆绑到 common.js
。
如您所见,我的应用程序要求用户登录 page-2-authenticated.html
和 page-3-authenticated.html
。但是,page-2-authenticated.js
和 page-3-authenticated.js
中的共享代码也被捆绑到 common.js
中。 但我不想打扰未登录的用户,使用仅在您登录时使用的代码。
所以 page-2-authenticated.html
我想要:
<script src="vendors.js" />
<script src="common.js" />
<script src="common-authenticated.js" /> // Shared code for authenticated users
<script src="page-2-authenticated.js" />
但是,当我在 common-authenticated.js
中导出一个测试变量并将它们导入 page-2-authenticated.js
和 page-3-authenticated.js
时,此共享代码仍然捆绑在 common.js
中。 common-authenticated.js
是空的(只有一些 webpackJsonp([12],[],[85]);
)。
我有以下 webpack 2 配置:
entry: {
vendors: ['react'],
common: 'index.js',
'common-authenticated': 'common-authenticated.js',
'page-1': 'page-1.js',
'page-2-authenticated': 'page-2-authenticated.js',
'page-3-authenticated': 'page-3-authenticated.js'
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({
// The order of this array matters
names: ['common', 'vendors'],
minChunks: 2
})
]
问题:如何将特定代码捆绑到common-authenticated.js
?有什么想法吗?
我能够通过以下配置解决它:
entry: {
// Same as in topic start
},
plugins: [
/*
* Check the files used for pages on which you need to be logged in
* and bundle the shared code of these files in a chunk named
* 'common-authenticated' (its output will be in 'common-authenticated.js')
*/
new webpack.optimize.CommonsChunkPlugin({
name: 'common-authenticated',
chunks: [
'page-2-authenticated',
'page-3-authenticated'
],
minChunks: 2
}),
/*
* Now check for shared code in the bundle defined above plus the files for
* pages on which you do not need to be logged in. Bundle this shared code into
* 'common.js'
*/
new webpack.optimize.CommonsChunkPlugin({
name: 'common',
chunks: [
'common-authenticated', // Name of the chunk defined above
'page-1'
],
minChunks: 2
}),
/*
* I don't really now how this works. But it works :).
* It generates the 'vendors.js'
*/
new webpack.optimize.CommonsChunkPlugin({
name: 'vendors',
chunks: ['common', 'vendors'],
minChunks: 2
})
]
它正是我想要的。 page-1.html
中的脚本加载保持不变(我在那里不需要 common-authenticated.js
)。 page-2-authenticated.html
现在有:
<script src="vendors.js" />
<script src="common.js" />
<script src="common-authenticated.js" /> // Shared code for authenticated users
<script src="page-2-authenticated.js" />