Webpack sin excluir node_modules

83

Estoy usando webpack para un marco de Node que estoy construyendo (aunque probablemente debería usar gulp, es cierto). Cuando incluyo el módulo EJS, el paquete web lo incluye en la fuente compilada, aunque le digo explícitamente que excluya el directorio node_modules.

module.exports = {
    context: __dirname,
    target: 'node',
    // ...
    output: {
        libraryTarget: 'commonjs'
        // ...
    },
    module: {
        loaders: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader: 'babel-loader?{ "stage": 0, "optional": ["runtime"] }'
            }
        ]
    }
};

Como puede ver, tengo una prueba para archivos JS y le digo que excluya node_modules; ¿Por qué ignora mi exclusión?

ndugger
fuente

Respuestas:

180

Desde su archivo de configuración, parece que solo está excluyendo node_modulesde ser analizado babel-loader, pero no de ser incluido.

Para excluir node_moduleslas bibliotecas de nodos nativos de la agrupación, debe:

  1. Agregue target: 'node'a su webpack.config.js. Esto excluirá los módulos de nodo nativo (ruta, fs, etc.) de la agrupación.
  2. Utilice webpack-node-externals para excluir otros node_modules.

Entonces, su archivo de configuración de resultados debería verse así:

var nodeExternals = require('webpack-node-externals');
...
module.exports = {
    ...
    target: 'node', // in order to ignore built-in modules like path, fs, etc. 
    externals: [nodeExternals()], // in order to ignore all modules in node_modules folder 
    ...
};
Lyosef
fuente
7
¿Hay algo similar en el navegador? (es decir, destino: 'navegador')
Andrea.cabral
Estoy tratando de entender lo que exclude: /node_modules/hace. ¿Podría darme más detalles? ¿Qué podría pasar si lo dejamos fuera?
Šime Vidas
Es una expresión regular. si lo deja fuera, se incluirán node_modules
meredrica
Respuesta y capacidad fantásticas.
Geek Stocks
2
@ ŠimeVidas excluirá al node_modulesdirectorio para que no lo babel-loaderejecute, pero no lo excluirá del paquete
mlg87
16

Si se encontró con este problema al usar TypeScript, es posible que deba agregar skipLibCheck: truesu tsconfig.jsonarchivo.

Mattnedrich
fuente
7

Intente usar la ruta absoluta:

exclude:path.resolve(__dirname, "node_modules")
Alan
fuente
¿Puedes mostrarnos cómo está estructurado el proyecto? La estructura del archivo
Alan
-1

prueba esta siguiente solución:

exclude:path.resolve(__dirname, "node_modules")
Sina Dorostkar
fuente
4
Bienvenido a StackOverflow. Sería mejor si proporcionara un valor adicional además de las otras respuestas. En este caso, su respuesta no proporciona un valor adicional, ya que otro usuario (Alan) ya publicó esa solución hace 5 años. Deberías votarlo una vez que tengas suficiente reputación
Oleg Valter
-2

Esto funcionó para mí:

excluir: [/ bower_components /, / node_modules /]

module.loaders

Una variedad de cargadores aplicados automáticamente.

Cada elemento puede tener estas propiedades:

prueba: una condición que debe cumplirse

excluir: una condición que no debe cumplirse

incluir: Una condición que debe cumplirse

cargador: una cadena de "!" cargadores separados

cargadores: una matriz de cargadores como cadena

Una condición puede ser una expresión regular, un inicio de ruta absoluto o una matriz de uno de estos combinados con "y".

Ver http://webpack.github.io/docs/configuration.html#module-loaders

freecks
fuente