Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在webpack中,我只能在一个条目包中使用commonchunks插件吗_Javascript_Webpack - Fatal编程技术网

Javascript 在webpack中,我只能在一个条目包中使用commonchunks插件吗

Javascript 在webpack中,我只能在一个条目包中使用commonchunks插件吗,javascript,webpack,Javascript,Webpack,我有一个包含2个捆绑包的应用程序,常用模块(如react)被提取到供应商捆绑包中。我正在添加第三个bundle,我不想从中提取公共依赖项。这可能吗 这个问题与为每个入口点创建多个供应商捆绑包有关,而我希望其中一个捆绑包不需要供应商。在我的例子中,这是因为脚本是一个简单的站点验证脚本,它是在头部设置的,因此将在供应商之前设置。然而,我仍然希望能够使用这个头包中的模块 const webpack = require('webpack'); const path = require('path');

我有一个包含2个捆绑包的应用程序,常用模块(如
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;