javascript - loaders - webpack version
Excluir un módulo del paquete de paquete web (3)
Me gustaría que la misma funcionalidad como RequireJS esté empty:
http://requirejs.org/docs/optimization.html#empty
Mi caso de uso es que jquery-migrate
en desarrollo, pero me gustaría excluir esto cuando se construye para producción.
Usar IgnorePlugin
simplemente lo hace no incluido, y cuando lo require
en el código, arroja un error ( Uncaught Error: Cannot find module "jquery-migrate"
).
Lo que me gustaría que ocurra es que solo devuelva indefinido, o algo por el estilo (como empty:
en RequireJS). Me gustaría no tocar la importación en el código, simplemente configurándola para devolverla undefined
.
EDITAR: El uso de NormalModuleReplacementPlugin
funciona, si NormalModuleReplacementPlugin
el reemplazo a un archivo vacío. Pero mantener un archivo vacío solo para esto parece innecesario.
Puede intentar hacer una resolución.alias en webpack.config:
resolve: {
alias: {
"jquery-migrate": process.env.NODE_ENV === ''production'' ? "empty-module": "jquery-migrate"
}
}
Use el DefininePlugin de DefinePlugin
en combinación con los complementos de producción normales (Dedupe y Uglify).
Luego en tu código puedes escribir:
if(DEBUG) {
var test = require(''test'');
alert(test);
}
Y cuando se construye en producción, el DEBUG
se reemplazará por un literal if(false) { ... }
que será eliminado por completo por el plugin uglify, por lo que solo se requerirá la test
en una compilación de depuración.
Aquí hay un ejemplo de configuración de tareas de Grunt para grunt-webpack
que tiene objetivos de development
y production
para la tarea:
development: {
devtool: "sourcemap",
output: {
pathinfo: true,
},
debug: true,
production: false,
plugins: [
new webpack.DefinePlugin({
DEBUG: true,
PRODUCTION: false
})
]
},
production: {
plugins: [
new webpack.DefinePlugin({
DEBUG: false,
PRODUCTION: true
}),
new webpack.optimize.DedupePlugin(),
new webpack.optimize.UglifyJsPlugin({
output: {
comments: false,
}
})
]
},
Yo uso el cargador nulo para borrar los módulos. El noop-loader se puede utilizar para un if-else menos incómodo en la configuración.
Tratar:
rules: [{
test: /jquery-migrate/,
use: IS_DEV ? ''null-loader'' : ''noop-loader''
}]