BundleDependencies在不同包管理器里配置总出错怎么办?
我之前在npm项目里用bundleDependencies打包子模块没问题,但换成pnpm后打包出来的包里依赖全没了。试过在package.json加”bundleDependencies”:[“sub-module”],pnpm install时还加了–recursive参数,结果还是报模块找不到的错。用yarn的时候又提示这个字段无效,得用yarn add –offline?
{
"name": "my-project",
"bundleDependencies": ["@my/sub-module"],
"dependencies": {
"@my/sub-module": "1.0.0"
}
}
现在完全搞不懂各个包管理器对捆绑依赖的支持到底有什么区别,是需要额外配置什么脚手架命令吗?
bundleDependencies的支持确实有点差异。直接说解决方案吧:首先,
bundleDependencies是 npm 原生支持的一个字段,用来告诉 npm 在打包时把指定的依赖也一起打包进去。但 pnpm 和 yarn 对这个字段的处理方式不太一样。对于 pnpm,它默认不会理会
bundleDependencies,所以你需要手动把子模块也打包进去。常见的做法是用pnpm pack命令来测试打包结果,然后确保子模块被打包进去了。如果没进去,可以在打包前先运行pnpm install --offline,这样可以强制使用本地缓存的依赖。至于 yarn,确实不认
bundleDependencies这个字段了,官方建议用yarn pack来代替。如果你想让子模块也被打包,得在打包前用yarn add @my/sub-module显式安装一遍,或者直接修改.yarnrc.yml文件,添加类似packageExtensions:的配置来强制包含某些依赖。最后总结一下:如果是 pnpm,推荐用
pnpm pack配合--offline参数;如果是 yarn,就乖乖用yarn pack吧,别纠结bundleDependencies了。实在懒得折腾,可以用npm pack,毕竟它是唯一原生支持这个字段的工具。希望这些能帮你解决问题,反正这种兼容性问题真的够烦人的 😅