webpack如何排除除文件夹以外的node_modules

时间:2018-12-07 16:40:13

标签: webpack

我正在使用webpack 4,并且已经安装了带有许多子文件夹的模块,其结构为:

/node_modules/my_main_package/what_i_need_to_include

除了node_modules,我需要排除整个what_i_need_to_include。到目前为止,这是我在webpack.base.babel中尝试过的操作:

第一种方法:

module: {
    rules: [
      {
        test: /\.js$/, 
        exclude: '/node_modules/',
        include: '/node_modules/my_main_package/what_i_need_to_include',
use: {
          loader: 'babel-loader',
          options: options.babelQuery,
        },
      },
...

第二种方法:

{
  test: /\.js$/, 
  exclude: '/node_modules\/(?!my_main_package/what_i_need_to_include).*/'
   ...
}

两次都不成功。

我该如何工作?我在做什么错了?

2 个答案:

答案 0 :(得分:1)

我必须感谢贝尔先生,他给了我一个可行的解决方案的链接,我将分享解决方案,我将自己回答我的问题,因为很少有人阅读评论,这可能是一个问题。其他。解决方法如下:

module: {
    rules: [
      {
        test: /\.js$/, 
        exclude: /node_modules\/(?!(my_main_package\/what_i_need_to_include)\/).*/,
use: {
          loader: 'babel-loader',
          options: options.babelQuery,
        },
      },
...
}

希望这会有所帮助。

答案 1 :(得分:0)

值得注意的是,该页面上的解决方案不需要复杂的正则表达式,并且从技术上讲是受支持的方法。

module: {
    rules: [
        {
            test: /\.js$/,
            exclude: [
                // Use an object instead of a string
                {
                    test: path.resolve(__dirname, 'node_modules'),
                    // Exclude the following from the exclusion
                    exclude: path.resolve(__dirname, 'node_modules/name-of-package')
                }
            ],
            use: {
                loader: 'babel-loader',
                // ...
            },
        },
    ]
},
相关问题