Webpack不包括node_modules

ndu*_*ger 74 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"] }'
            }
        ]
    }
};
Run Code Online (Sandbox Code Playgroud)

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

lyo*_*sef 161

从您的配置文件中,您似乎只是排除node_modules了被解析babel-loader,而不是被捆绑.

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

  1. 加入target: 'node'你的webpack.config.js.这将排除捆绑本机节点模块(路径,fs等).
  2. 使用webpack-node-externals以排除其他内容node_modules.

所以你的结果配置文件应如下所示:

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 
    ...
};
Run Code Online (Sandbox Code Playgroud)

  • 浏览器上有类似的东西吗?(即目标:'浏览器') (4认同)
  • @ŠimeVidas它将使`babel-loader`在其上运行而不会从`node_modules`目录中删除,但不会将其从捆绑中排除 (2认同)

mat*_*ich 11

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


Ala*_*lan 7

尝试使用绝对路径:

exclude:path.resolve(__dirname, "node_modules")
Run Code Online (Sandbox Code Playgroud)

  • 为什么要这样做?`/node_modules/` 将匹配节点模块中任何可能的路径,不是吗? (4认同)