Webpack不包括node_modules

时间:2015-10-07 19:52:14

标签: javascript webpack

我使用webpack作为我正在构建的Node框架(尽管我应该使用gulp,但不可否认)。当我包含EJS模块时,webpack将其包含在已编译的源代码中,即使我明确告诉它要排除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"] }'
            }
        ]
    }
};

正如您所看到的,我对JS文件进行了测试,并告诉它排除node_modules;为什么忽略我的排除?

6 个答案:

答案 0 :(得分:148)

从您的配置文件中,您似乎只是将node_modules排除在使用babel-loader而非进行解析后才被捆绑。

为了从捆绑中排除node_modules和本机节点库,您需要:

  1. target: 'node'添加到您的webpack.config.js。这将exclude native node modules(路径,fs等)捆绑在一起。
  2. 使用webpack-node-externals排除其他node_modules
  3. 因此,您的结果配置文件应如下所示:

    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 
        ...
    };
    

答案 1 :(得分:10)

如果您在使用TypeScript时遇到此问题,则可能需要在skipLibCheck: true文件中添加tsconfig.json

答案 2 :(得分:7)

尝试使用绝对路径:

exclude:path.resolve(__dirname, "node_modules")

答案 3 :(得分:1)

这发生在我身上,因为我已经指定了自己的resolve.extensions,但未能包含空的''

resolve: {
  extensions: ['.js', '.jsx']
},

来自webpack docs

  

设置此选项将覆盖默认值,这意味着webpack将不再尝试使用默认扩展名解析模块。如果您希望正确解析其扩展所需的模块(例如require('./ somefile.ext')),则必须在数组中包含空字符串。同样,如果您希望将没有扩展名所需的模块(例如require('下划线'))解析为扩展名为“.js”的文件,则必须在数组中包含“.js”。

添加空扩展名解决了错误:

resolve: {
  extensions: ['', '.js', '.jsx']
},

答案 4 :(得分:-1)

尝试以下解决方案:

exclude:path.resolve(__dirname, "node_modules")

答案 5 :(得分:-2)

这对我有用:

排除:[/ bower_components /,/ node_modules /]

module.loaders

一系列自动应用的加载程序。

每个项目都可以具有以下属性:

测试:必须满足的条件

排除:必须满足的条件

包括:必须满足的条件

loader:字符串“!”分开的装载机

loaders:字符串形式的加载器数组

条件可以是RegExp,绝对路径开始或其中之一与“ and”组合的数组。

请参见http://webpack.github.io/docs/configuration.html#module-loaders