Webpack 中的排除选项与入口点

Exclude option vs. Entry Point in Webpack

如果您在 Webpack 中有一个入口点,这是否意味着 Webpack 只会捆绑和转换位于该入口点或 required 的文件?那会自动否定或排除那些不是 required 的入口点文件的文件,对吗?为什么您仍然需要在加载程序配置中为 node_modules 中的文件添加一个排除选项?那不是 required 在你的入口点所以我认为 webpack 会完全忽略这些文件,或者我是否缺少一些魔法?如果您没有排除选项,加载程序会自动尝试转换项目中的所有文件吗?

规则不包含任何文件,但它们将加载程序应用于满足条件的任何导入模块。规则的 exclude 选项仅决定加载程序是否应处理已导入的文件。

node_modules 通常被排除在 .js 规则之外,因为通常没有理由对它们进行转换,因为大多数包在发布之前已经被编译。必须处理您正在使用的整个 node_modules 会增加构建时间相当多,即使它只是一个加载程序,至少它必须解析模块和 return 一个有效模块,这已经需要一些时间。

excludeinclude 选项还有其他用途。例如,您可以决定为您的项目使用 CSS modules,但是您有一些依赖于常规(全局)CSS 的第三方库,并且您不能轻易更改使用 [=26] 的代码=].您可以定义以下规则:

{
  // For all .css files except the ones in 3rd-party-lib
  test: /\.css$/,
  exclude: /3rd-party-lib/,
  use: [
    'style-loader',
    { loader: 'css-loader', options: { modules: true } }
  ]
},
{
  // For all .css files in 3rd-party-lib
  test: /\.css$/,
  include: /3rd-party-lib/,
  use: ['style-loader', 'css-loader']
}

这可以是从更改一个选项到使用一组完全不同的加载程序的任何事情,即使它可能与文件类型相同。