问题描述
我有一个 package 就叫它 - MyPKG 引用了 lodash.debounce, MyPKG 的运行环境为: [浏览器, nodejs, es-module]
MyPKG 使用 rollup 打包进行了 tree shaking, 只将 lodash.debounce 打包进去了, 输出一个 umd 模块, 所有环境均使用这个打包结果 (言下之意就是 package.json 中, main,browser,module,unpkg 均指向同一个文件)
但是我认为这样做仍然存在问题:
1.如果用户的项目也使用了 lodash, 那么用户的构建产物, 可能包含两份 lodash.debounce
2.如果用户的项目也使用了 lodash, 当用户的 lodash 和 MyPKG 的 lodash 版本不一致的时候, 用户将会安装两个版本的 lodash.
基于如上的问题, MyPKG 将会是一个不受欢迎的 package.
我的期望结果
大致了解了一下 peerDependence 字段
1.浏览器环境: 输出一份 amd 模块, 包含 lodash.debounce
2.nodejs 环境输出一份 commonjs 模块, 包含 lodash.debounce
3.jsnext:main 输出一份 es6 模块, 是否包含 lodash.debounce 要根据用户本地环境决定
我的初步方案
针对不同运行环境进行差异化构建, 可能要使用三份 rollup 配置吧?
我希望了解的答案
1.针对我的问题, 应该不是个例, 有相关文章是讲解这个问题的吗?
2.很多包都有这样的需求, 有没有最佳实践可以推荐一下, 或者说科普一下?