Javascript 在webpack中,我只能在一个条目包中使用commonchunks插件吗
我有一个包含2个捆绑包的应用程序,常用模块(如Javascript 在webpack中,我只能在一个条目包中使用commonchunks插件吗,javascript,webpack,Javascript,Webpack,我有一个包含2个捆绑包的应用程序,常用模块(如react)被提取到供应商捆绑包中。我正在添加第三个bundle,我不想从中提取公共依赖项。这可能吗 这个问题与为每个入口点创建多个供应商捆绑包有关,而我希望其中一个捆绑包不需要供应商。在我的例子中,这是因为脚本是一个简单的站点验证脚本,它是在头部设置的,因此将在供应商之前设置。然而,我仍然希望能够使用这个头包中的模块 const webpack = require('webpack'); const path = require('path');
react
)被提取到供应商捆绑包中。我正在添加第三个bundle,我不想从中提取公共依赖项。这可能吗
这个问题与为每个入口点创建多个供应商捆绑包有关,而我希望其中一个捆绑包不需要供应商。在我的例子中,这是因为脚本是一个简单的站点验证脚本,它是在头部设置的,因此将在供应商之前设置。然而,我仍然希望能够使用这个头包中的模块
const webpack = require('webpack');
const path = require('path');
const config = {
entry: {
vendor: [
'jquery',
'react',
'react-dom'
],
main: [
'./bundles/main/App',
],
cms: [
'./bundles/cms/App'
],
head: [
'./bundles/head/App'
],
},
output: {
filename: '[name]-bundle.js',
path: '../app/assets/webpack',
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
filename: 'vendor-bundle.js',
minChunks: Infinity,
})
],
module: {
loaders: [
{test: /\.jsx?$/, loader: 'babel-loader', exclude: /node_modules/},
],
},
};
module.exports = config;
似乎关于代码拆分多个bundle的类似问题确实帮助回答了我的问题。特别是Michael Margiel的答案,即使用多个CommonChunk插件指定多个供应商包,我认为这是最干净的方法
多次使用CommonChunkPlugins创建特定于条目的供应商区块:
new webpack.optimize.CommonsChunkPlugin("vendor-page1", "vendor-page1.js", Infinity),
new webpack.optimize.CommonsChunkPlugin("vendor-page2", "vendor-page2.js", Infinity)
然后为不同的文件声明不同的扩展库:
entry: {
page1: ['entry.js'],
page2: ['entry2.js'],
"vendor-page1": [
'lodash'
],
"vendor-page2": [
'jquery',
'react'
]
},
这使我能够在不包含任何供应商的情况下拥有捆绑包,而不需要任何额外的步骤,但是如果我愿意,我可以为第三个捆绑包找到一个供应商
我的配置最终是这样的:
const webpack = require('webpack');
const path = require('path');
const config = {
entry: {
head: ['./bundles/head/App'],
main: ['./bundles/main/App'],
cms: ['./bundles/cms/App'],
'vendor': [
'babel-polyfill',
'jquery',
'react'
],
'vendor-cms': [
'jquery'
]
},
output: {
filename: '[name]-bundle.js',
path: '../app/assets/webpack',
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
filename: 'vendor-bundle.js',
chunks: ['main'],
minChunks: Infinity,
}),
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor-cms',
filename: 'vendor-cms-bundle.js',
chunks: ['cms'],
minChunks: Infinity,
}),
new webpack.DefinePlugin({
'process.env': { NODE_ENV: JSON.stringify(nodeEnv)},
}),
],
module: {
loaders: [
{test: /\.jsx?$/, loader: 'babel-loader', exclude: /node_modules/},
],
},
};
module.exports = config;