Webpack 有一个resolve.mainFields
配置:https ://webpack.js.org/configuration/resolve/#resolvemainfields
这允许控制应将哪个 package.json 字段用作入口点。
我有一个应用程序可以引入几十个不同的 3rd 方包。用例是我想根据包的名称指定要使用的字段。例子:
- 对于包,请
foo
使用中的main
字段node_modules/foo/package.json
- 对于包,请
bar
使用中的module
字段node_modules/bar/package.json
我依赖的某些包没有以正确的方式捆绑,该module
字段指向的代码不遵循这些规则:https ://github.com/dherman/defense-of-dot-js/blob/master /proposal.md如果我将 webpack 配置更改为:
resolve: {
mainFields: ['module']
}
mainFields
必须设置为当前main
使应用程序正常工作。这导致它总是拉入每个依赖项的 CommonJS 版本并错过 treeshaking。希望做这样的事情:
resolve: {
foo: {
mainFields: ['main']
},
bar: {
mainFields: ['module'],
}
包通过其字段foo
捆绑到我的应用程序中,main
并且包通过其字段捆绑到我的应用程序bar
中module
。我意识到使用包进行 treeshaking 的好处bar
,并且我不会使用foo
包破坏应用程序(具有不正确的模块语法的模块字段)。