在Webpack中排除选项与入口点

时间:2017-04-30 00:48:49

标签: javascript node.js webpack config

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

1 个答案:

答案 0 :(得分:1)

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

node_modules通常从.js规则中排除,因为通常没有理由对其进行转换,因为大多数软件包在发布之前已经被转换。必须处理你正在使用的整个node_modules,即使它只是一个加载器,也会增加构建时间,至少它必须解析模块和返回一个有效的模块,这已经需要一些时间。

excludeinclude选项还有其他用途。例如,您可以决定对项目使用CSS modules,但是您有一些依赖于常规(全局)CSS的第三方库,您无法轻松更改使用CSS的代码。您可以定义以下规则:

{
  // 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']
}

这可以是从更改一个选项到使用完全不同的加载器集,即使它可能与文件类型相同。