javascript - script - webpack-- w
ERROR webpack en CommonsChunkPlugin: mientras se ejecuta en modo normal, no está permitido usar un fragmento que no sea de entrada (3)
Entonces, cuando trato de dividir mi aplicación en 1 archivo application.js y 1 archivo libraries.js, todo funciona bien. Cuando trato de dividirlo en 1 archivo application.js y 2 archivos libraries.js, aparece este error al construir:
ERROR in CommonsChunkPlugin: While running in normal mode it''s not allowed to use a non-entry chunk (libraries-react)
¿Alguien sabe qué podría estar causando este error?
Mi configuración para el paquete web es
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''
}
}
Cambiar de dos entradas para el CommonChunkPlugin a una sola ayudó en mi caso.
Antes de:
plugins: [
new webpack.optimize.CommonsChunkPlugin(''libraries-core'', ''libraries-core.js''),
new webpack.optimize.CommonsChunkPlugin(''libraries-react'', ''libraries-react.js'')
]
Después:
plugins: [
new webpack.optimize.CommonsChunkPlugin({
names: [''libraries-core'', ''libraries-react''],
minChunks: Infinity
})
]
Se basa en el ejemplo two-explicit-vendor-chunks .
Las otras respuestas hablan sobre el orden de los nombres en CommonsChunkPlugin, que es verdadero. Pero a veces, incluso después de corregir el orden (es decir, al revés del orden dado en la entrada), el paquete web aún puede arrojar el mismo error.
Y esto es cuando estás usando otra instancia de CommonsChunkPlugin para extraer recursos comunes, por ej. explicit-webpack-runtime-chunk, de nuevo importa el orden - aquí el orden de las instancias en la lista de complementos de la configuración. Simplemente, mueva esta instancia después de CommonsChunkPlugin para explícitamente-proveedor-chunks. Por ejemplo,
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''s not an entry
minChunks: Infinity
})
]
Siguiendo el problema # 1016 de github , necesitas invertir el orden de los nombres de los fragmentos en la definición del plugin con respecto a la definición de los puntos de entrada
Parece ser un error para este complemento webpack por el momento ...
new webpack.optimize.CommonsChunkPlugin(''libraries-react'', ''libraries-react.js'')
new webpack.optimize.CommonsChunkPlugin(''libraries-core'', ''libraries-core.js'')
o
new webpack.optimize.CommonsChunkPlugin({names: [''libraries-react'', ''libraries-core''], filename: ''[name].js'')