tutorial loaders javascript webpack

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'' }]