如果您在Webpack中有一个入口点,那是不是意味着Webpack只会捆绑并转换该入口点或require
d之前的那个入口点的文件?然后,这将自动否定或排除那个入口点文件不是require
d的文件,对吗?为什么在node_modules
中的文件的加载程序配置中仍需要排除选项?在你的入口点不是require
d所以我认为webpack会完全忽略这些文件,或者是否有一些我不知道的魔法?如果您没有排除选项,加载程序会自动尝试转换项目中所有的文件吗?
答案 0 :(得分:1)
规则不包含任何文件,但它们将加载程序应用于满足条件的任何导入模块。规则上的exclude
选项仅决定加载程序是否应处理已导入的文件。
node_modules
通常从.js
规则中排除,因为通常没有理由对其进行转换,因为大多数软件包在发布之前已经被转换。必须处理你正在使用的整个node_modules
,即使它只是一个加载器,也会增加构建时间,至少它必须解析模块和返回一个有效的模块,这已经需要一些时间。
exclude
和include
选项还有其他用途。例如,您可以决定对项目使用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']
}
这可以是从更改一个选项到使用完全不同的加载器集,即使它可能与文件类型相同。