能否将含测试应用的Angular库发布到npm/GitLab,安装时仅取dist目录内容?
没问题,完全可以在同一个仓库里搞定这个需求,不用拆成两个仓库!下面给你一步步说怎么实现:
1. 先理清楚仓库结构
用Angular CLI创建库的话,默认的工作区结构刚好能满足你的需求:
- 根目录是Angular工作区,src/ 就是你的测试应用,用来调试和测试你的库
- projects/your-lib/ 存放库的核心源码
- 运行
ng build your-lib后,构建好的库文件会输出到dist/your-lib/ 目录
2. 配置npm发布只包含dist内容
要让npm只发布库的构建产物,关键是配置库的package.json(注意是projects/your-lib/package.json,不是根目录的那个):
- 首先确保
main、module、typings字段指向dist里的正确文件,比如:"main": "./bundles/your-lib.umd.js", "module": "./fesm2020/your-lib.mjs", "typings": "./your-lib.d.ts", - 然后添加
files字段,明确指定要发布的文件列表,这样npm会自动忽略其他内容:
这样一来,测试应用的代码、库的源码(除了dist里的构建产物)都不会被发布到npm。"files": [ "dist/**/*", "README.md", "LICENSE" ]
3. 发布到GitLab和npm的流程
- GitLab:直接把整个仓库推上去就行!GitLab是用来存源码的,你的测试应用和库源码都在里面,方便你自己开发、调试和版本管理。记得在根目录的
.gitignore里加上dist/和node_modules/,避免提交构建产物和依赖包。 - npm:先构建库,再发布dist里的内容。你可以手动执行:
也可以在根目录的ng build your-lib --prod cd dist/your-lib npm publishpackage.json里加个快捷脚本,一键完成:
以后直接运行"scripts": { "publish:lib": "ng build your-lib --prod && cd dist/your-lib && npm publish" }npm run publish:lib就能发布了,非常方便。
4. 额外小提示
- 如果你担心用户克隆仓库后看到测试应用的代码,可以在根目录的
README.md里说明:这个仓库包含库的源码和自用测试应用,使用库请直接通过npm安装,不用克隆整个仓库。 - 要是测试应用里有一些敏感配置,记得用
.gitignore忽略掉对应的文件,比如环境配置文件等。
这样就完美实现了一个仓库搞定开发、测试和发布,不用拆分仓库,npm用户拿到的只有干净的库文件,你自己也能在同一个环境里高效开发~
内容的提问来源于stack exchange,提问作者Bloodcast69
相关产品推荐
相关产品推荐

