Подтвердить что ты не робот

Webpack ERROR в CommonsChunkPlugin: при работе в обычном режиме ему не разрешено использовать не входящий фрагмент

Итак, когда я пытаюсь разделить мое приложение на 1 файл application.js и 1 файл library.js, все работает нормально. Когда я пытаюсь разбить его на 1 файл application.js и 2 файла library.js, я получаю эту ошибку при создании:

ERROR in CommonsChunkPlugin: While running in normal mode it not allowed to use a non-entry chunk (libraries-react)

Кто-нибудь знает, что может вызвать эту ошибку?

Моя конфигурация для webpack

var webpack = require("webpack");
var ExtractTextPlugin = require("extract-text-webpack-plugin");

var extractSass = new ExtractTextPlugin('main.css');

module.exports = {
    module: {
        loaders: [{
            test: /\.jsx$/,
            loader: 'babel',
            exclude: ['./node_modules'],
            query: {
                presets: ['react', 'es2015']
            }
        }, {
            test: /\.scss$/,
            loader: extractSass.extract(['css', 'sass'])
        }, {
            test: /\.html$/,
            loader: 'file?name=[name].[ext]'
        }, {
            test: /\/misc\/.*\.js$/,
            loader: 'file?name=/misc/[name].[ext]'
        }, {
            test: /\.(png|jpg|jpeg|)$/,
            loader: 'file?name=/images/[name].[ext]'
        }]
    },
    plugins: [
        extractSass,
        new webpack.optimize.CommonsChunkPlugin('libraries-core', 'libraries-core.js'),
        new webpack.optimize.CommonsChunkPlugin('libraries-react', 'libraries-react.js')
    ],
    entry: {
        //3rd party libraries
        'libraries-core': [
          'lodash',
          'superagent',
          'bluebird',
          'eventemitter3',
          'object-assign',
          'schema-inspector',
          'jsuri',
          'store-cacheable',
          'immutable'
        ],

        'libraries-react': [
          'react',
          'react-dom',
          'react-router',
          'nucleus-react'
        ],

        //application code
        application: './web/app/application.jsx',

        //mocks
        'mocked-api': './web/app/mock/api.js',
        'mocked-local-storage': './web/app/mock/local-storage.js'
    },
    output: {
        path: './web/build',
        publicPath: '/build',
        filename: '[name].js'
    }
}
4b9b3361

Ответ 1

Следуя github issue # 1016, вам нужно отменить порядок имен блоков в определении плагина относительно определение точек входа

Похоже на ошибку в этом плагине webpack...

new webpack.optimize.CommonsChunkPlugin('libraries-react', 'libraries-react.js')
new webpack.optimize.CommonsChunkPlugin('libraries-core', 'libraries-core.js')

или

new webpack.optimize.CommonsChunkPlugin({names: ['libraries-react', 'libraries-core'], filename: '[name].js')

Ответ 2

Переключение с двух записей для CommonChunkPlugin на один помогло в моем случае.

До:

plugins: [
    new webpack.optimize.CommonsChunkPlugin('libraries-core', 'libraries-core.js'),
    new webpack.optimize.CommonsChunkPlugin('libraries-react', 'libraries-react.js')
]

После:

plugins: [
    new webpack.optimize.CommonsChunkPlugin({
      names: ['libraries-core', 'libraries-react'],
      minChunks: Infinity
   })
]

Он основан на примере two-explicit-vendor-chunks.

Ответ 3

В других ответах говорится о порядке имен имен в CommonsChunkPlugin, который является истинным. Но иногда даже после того, как вы исправляете заказ (например, обратный порядок, указанный в записи), веб-пакет все равно может выдать ту же ошибку.

И это когда вы используете другой экземпляр CommonsChunkPlugin для извлечения общих ресурсов - например. explicit-webpack-runtime-chunk, снова порядок имеет значение - здесь порядок экземпляров в списке плагинов конфигурации. Просто переместите этот экземпляр после CommonsChunkPlugin для явных кусков-поставщиков. Например,

plugins: [
  // explicit-vendor-chunk
  new CommonsChunkPlugin({
    names: ["vendor-2", "vendor-1"],
    minChunks: Infinity
  }),

  // and the following should go after explicit-vendor-chunk
  // in the list of plugins

  // explicit-webpack-runtime-chunk
  new CommonsChunkPlugin({
    name: "manifest", // something that not an entry
    minChunks: Infinity
  })
]