Angular CLI 6:库依赖应放置在何处
如何在Angular CLI库项目中管理第三方依赖
好问题!我刚帮几个项目完成过类似的Angular CLI库迁移,这个依赖管理的点确实容易搞混,咱们分情况说清楚:
1. 运行时依赖(你的库代码实际需要调用的第三方包)
这类依赖是库功能的一部分,用户安装你的库时可能需要它们,必须放在**projects/ng-app-state/package.json**里,但还要细分两种情况:
- Peer Dependencies:如果依赖是用户的Angular项目必然会包含的(比如
@angular/core、rxjs、@angular/common),把它们放在库的package.json的peerDependencies字段中。这样可以避免重复打包相同的核心依赖,同时要求用户的项目满足版本兼容要求。 - 常规 Dependencies:如果是你的库独有的、用户项目不一定会用到的第三方包(比如某个特定的状态管理工具、日期处理库),放在库的
package.json的dependencies字段中。用户安装你的库时,这些包会自动被安装。
小技巧:安装这类依赖时,用
npm install <package-name> --project=ng-app-state,Angular CLI会自动把依赖加到对应库的package.json里,不用手动修改。
2. 开发/构建依赖(仅用于库开发阶段的工具)
这类依赖只在你开发、测试、打包库的时候用到,不需要随库发布给用户,应该放在**根目录的package.json**的devDependencies字段中,比如:
- 测试工具:
jasmine、karma - 代码规范工具:
eslint、prettier - 构建辅助工具:
@angular-devkit/build-angular
安装这类依赖时,直接用npm install <package-name> --save-dev就可以,它们会自动加到根目录的devDependencies,整个工作区的项目都能共享这些工具。
关键验证步骤
做完依赖配置后,你可以运行ng build ng-app-state打包库,然后检查dist/ng-app-state目录下的package.json:
- Peer Dependencies会被保留,提示用户需要自行安装兼容版本
- 常规 Dependencies会被包含在发布包的依赖列表里
- 根目录的devDependencies不会出现在发布包中
内容的提问来源于stack exchange,提问作者Eric Simonton
相关产品推荐
相关产品推荐

