浏览器端NPM包已打包所有依赖,是否需将依赖移至devDependencies?
关于依赖归属的结论
你完全可以把已经完整打包进.min.js产物的所有依赖移动到devDependencies下,这一操作符合npm的依赖管理规范,也能避免用户安装你的包时拉取冗余依赖。
核心判断依据
dependencies字段的定位是存储你的包运行时必须依赖、且没有内置到发布产物中的第三方库,npm安装包时自动拉取该字段下的依赖就是为了满足这部分外部依赖的加载需求。devDependencies字段用于存储你开发、打包、测试该包过程中需要用到的工具和依赖,用户安装你的包时默认不会拉取该字段下的内容,刚好匹配你的使用场景。
特殊场景注意事项
如果你的包存在以下任意一种情况,不要直接全量移动依赖:
- 你在package.json中同时配置了未打包的ESM/CJS源码作为入口(比如main/module字段指向的是未打包的源文件,而非最终的.min.js产物),全量移动依赖会导致用户从源码入口引入时出现依赖缺失报错。
- 你打包时对部分依赖做了external处理(即没有将这部分依赖打包进.min.js,要求使用方自行在项目中引入),这部分被external的依赖必须保留在
dependencies中。 - 移动依赖后建议先删除本地node_modules和lock文件,重新执行依赖安装、打包流程,再将生成的产物放到测试项目中安装验证,确认没有运行问题后再发布新版本。
内容的提问来源于stack exchange,提问作者j22
相关产品推荐
相关产品推荐

