关于javascript:Webpack不排除node_modules

Webpack not excluding node_modules

我正在将webpack用于要构建的Node框架(不过,坦白地说,我可能应该使用gulp)。 当我包含EJS模块时,即使我明确告诉它要排除node_modules目录,Webpack也会将其包含在已编译的源代码中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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。 为什么忽略我的排除?


从您的配置文件中,似乎您只是将node_modules排除在使用babel-loader进行解析之外,而不是将其捆绑在了一起。

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

  • target: 'node'添加到您的webpack.config.js。这将排除捆绑本机节点模块(路径,fs等)。
  • 使用webpack-node-externals来排除其他node_modules
  • 因此,您的结果配置文件应如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    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
        ...
    };


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


    尝试使用绝对路径:

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


    请尝试以下解决方案:

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


    这对我有用:

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

    模块加载器

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

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

    测试:必须满足的条件

    排除:不得满足的条件

    包括:必须满足的条件

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

    装载程序:字符串形式的装载程序数组

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

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