如何在Angular CLI项目构建中添加自定义许可证适配xRay扫描
问题:Angular项目自定义许可证如何纳入构建产物?
我们的项目在package.json的license属性中定义了自定义许可证。执行ng build构建项目后,dist文件夹中会生成包含所有依赖许可证的3rdpartylicenses.txt,但自定义许可证并未包含其中。已知Xray会扫描构建包中的package.json,或对照许可证数据库检查license.txt文件。请问如何将自定义许可证纳入构建产物?
更新:关于npm publish打包方案的可行性
经过调研后发现一种方案:使用npm publish将dist文件夹打包为tar包,此时package.json、license.txt甚至README.md都会被包含在包内。但当前Docker部署使用的是根目录含生成内容的应用包,修改方案需调整部署脚本,请问该方案是否可行?
方案分析与可行性评估
方案一:构建后复制许可证文件到dist目录
这是无需修改部署逻辑的最简方案:
- 在
package.json的scripts中添加postbuild命令,自动将项目根目录的LICENSE文件复制到dist文件夹- Linux/macOS示例:
"postbuild": "cp LICENSE dist/" - Windows示例:
"postbuild": "copy LICENSE dist\\"
- Linux/macOS示例:
- 此方式完全保留原有Docker部署流程,Xray扫描
dist目录时可直接识别到LICENSE文件
方案二:npm打包方案的可行性
该方案完全可行,但需注意以下细节:
- 替代命令优化:无需真的发布到npm仓库,用
npm pack命令即可生成包含package.json、LICENSE、README.md和指定文件的tar包,更适配内部构建场景 - 部署脚本调整:需要修改Dockerfile或部署脚本,适配从tar包读取/解压内容的逻辑,调整成本取决于现有脚本复杂度
- 内容配置:确保
package.json的files字段包含dist目录下的所有必要构建产物,npm会自动包含根目录的LICENSE等标准文件 - Xray兼容性:生成的tar包完全符合Xray的扫描规则,可正确识别自定义许可证
推荐选择
- 若希望最小化改动,优先选方案一,通过
postbuild脚本复制许可证,零部署流程调整 - 若项目需要统一构建产物格式或有npm包管理需求,可选择方案二,用
npm pack生成标准tar包后适配部署脚本
内容的提问来源于stack exchange,提问作者Eric Reboisson
相关产品推荐
相关产品推荐

