Webpack 如何输出具有允许选择性导入的对等依赖关系的NPM包?
我发布的模块使用了一些对等依赖项:Webpack 如何输出具有允许选择性导入的对等依赖关系的NPM包?,webpack,babeljs,peer-dependencies,Webpack,Babeljs,Peer Dependencies,我发布的模块使用了一些对等依赖项: ... "peerDependencies": { "react": ">=16", "react-dom": ">=16", "@material-ui/core": ">=4", "@material-ui/icons": ">=4" },
...
"peerDependencies": {
"react": ">=16",
"react-dom": ">=16",
"@material-ui/core": ">=4",
"@material-ui/icons": ">=4"
},
...
在我的package.json文件中,我声明peerDependencies:
...
"peerDependencies": {
"react": ">=16",
"react-dom": ">=16",
"@material-ui/core": ">=4",
"@material-ui/icons": ">=4"
},
...
在我的webpack配置中,我声明了externals和输出格式commonjs2
(我根本不知道为什么我会使用commonjs2
,而不是commonjs
):
这似乎是工作,因为我可以看到外部不包括在输出文件中。然而,在我的项目中包含这个包的输出会导致更大的包大小
我认为这是因为捆绑包的输出将我的import
语句转换为require
语句,因此在我使用此包的项目中,无法优化定义为require
语句的对等依赖项
换句话说,包的输出不是将@material ui/core
库作为构建的一部分,而是将其引用为require(“@material ui/core”)
对吗
打包对等依赖项的正确方法是什么,以便:
// In my project where I consume the package
import { Thing } from '@org/package-name'
// And in @org/package-name` source code, I have
import { Card } from '@material-ui/core'
// Which gets transpiled to (more or less)
require('@material-ui/core').Card
// Which means that when I use "Thing", that I'm loading the whole of @material-ui/core
我还尝试过使用
babel插件转换导入配置babel。但是我发现,接下来我必须为每次导入配置对等依赖项/外部(@material ui/core/Card
,@material ui/core/List
,等等)我发现,工作解决方案是在预设环境的babel配置中将targets.esmodules设置为true
我认为这对我有效的原因是我在一个条目中重新导出模块。commonjs格式的命名导出在导入时不能很容易地隔离
但这只是一个猜测。我发现,有效的解决方案是在预设环境的babel配置中将targets.esmodules设置为true
我认为这对我有效的原因是我在一个条目中重新导出模块。commonjs格式的命名导出在导入时不能很容易地隔离
但这只是一个猜测。目前最简单的解决方案似乎没有指定对等依赖项,因为我的工作流应该会导致重复数据消除导入…目前最简单的解决方案似乎没有指定对等依赖项,因为我的工作流应该会导致重复数据消除导入。。。