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

ass*_*ler 5 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,
        },
      },
...
Run Code Online (Sandbox Code Playgroud)

第二种方法:

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

两次都没有成功。

我怎样才能让它工作?我究竟做错了什么?

Mat*_*att 14

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

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',
                // ...
            },
        },
    ]
},
Run Code Online (Sandbox Code Playgroud)


ass*_*ler 10

我要感谢熊先生,他给了我一个有效解决方案的链接,我将自己回答我的问题以分享解决方案,因为很少有人阅读评论,这可能是其他人的问题。这是解决方案:

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

希望它可能会有所帮助。

  • 2023 年对我有帮助:) (2认同)