Windows10下Angular-CLI执行npm run packagr不打包assets/styles文件夹问题
解决Angular-CLI + packagr打包时src/assets/styles未复制到dist的问题
我之前也碰到过一模一样的困扰——Angular CLI的assets配置经常不会直接作用于packagr的库打包流程,毕竟packagr是专门处理Angular库的工具,有自己的配置逻辑。给你几个亲测有效的解决方案:
1. 配置ng-package.json的assets字段(推荐方案)
packagr的核心配置文件是ng-package.json,它不会自动继承angular-cli.json(或angular.json)的assets设置,所以需要在这里单独指定要打包的资源。打开项目根目录下的ng-package.json,在lib节点里添加assets数组:
{ "$schema": "./node_modules/ng-packagr/ng-package.schema.json", "lib": { "entryFile": "src/public-api.ts", "assets": [ "./src/assets/styles/**/*" ] } }
- 路径是相对于
ng-package.json的位置,如果你项目的目录结构是根目录下有src文件夹,这个路径就没问题; **/*表示复制styles文件夹下的所有文件和子目录;- 执行
npm run packagr后,styles文件夹会被打包到dist/[你的库名称]/assets/styles目录下(packagr默认会把库内容放在dist下的单独文件夹里)。
2. 调整Angular CLI的配置(辅助验证)
如果你的Angular版本是6+,配置文件已经从angular-cli.json改成了angular.json,可以在对应的build配置里补充assets规则,确保本地开发和打包的一致性:
"projects": { "your-library-name": { "architect": { "build": { "options": { "assets": [ "src/favicon.ico", "src/assets", { "glob": "**/*", "input": "src/assets/styles", "output": "/assets/styles/" } ] } } } } }
不过要注意:packagr打包时主要还是依赖ng-package.json的配置,这个步骤更多是为了让本地build也能正确复制styles文件。
3. 手动复制脚本(应急方案)
如果上面的配置都没生效,可以用Windows的xcopy命令写一个post打包脚本,在packagr执行完成后自动复制文件。修改package.json的scripts:
"scripts": { "packagr": "ng-packagr -p ng-package.json", "postpackagr": "xcopy /E /I /Y src\\assets\\styles dist\\your-library-name\\assets\\styles" }
/E:复制所有子目录(包括空目录);/I:如果目标目录不存在,自动创建;/Y:覆盖现有文件时不弹出提示;- 记得把
your-library-name替换成你实际的库名称(就是dist下生成的文件夹名)。
额外注意点
- 执行打包后,不要只看dist根目录,要进入dist下的库文件夹里检查assets/styles是否存在;
- 如果路径还是有问题,可以打印一下当前路径,或者调整
ng-package.json里assets的相对路径,比如改成../src/assets/styles/**/*(根据ng-package.json的位置灵活调整)。
内容的提问来源于stack exchange,提问作者Mark Hill
相关产品推荐
相关产品推荐

