You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 6构建库时如何自动将资产复制到dist目录?

Angular 6库构建时资产自动复制的问题解决

我最近在构建Angular 6库的时候碰到了个棘手的问题——没法通过Angular CLI的内置配置,让库的资产文件在每次构建时自动复制到dist目录对应的位置。先给大家看看我的项目结构:

- dist
- e2e
- node_modules
- projects
  - lib1
    - src
      - lib
      - assets
        - icons
- src

遇到的具体问题

  • 执行ng build lib1或者ng build lib1 --prod时,projects/lib1/src/assets/icons文件夹完全不会被复制到dist/lib1/assets/icons路径下
  • 执行根项目的ng build命令时,根目录的src/assets能正常复制到dist,但库的projects/lib1/assets依然没动静
  • 尝试在angular.json里给库项目单独添加"assets"配置项,直接触发Schema校验错误:

Schema validation failed with the following errors: Data path "" should NOT have additional properties(assets).

  • 想通过根项目的assets配置添加自定义复制规则,把库的资产复制到dist/lib1,写了如下配置:
"assets": [
    "src/favicon.ico",
    "src/assets",
    {
      "glob": "**/*",
      "input": "src/assets/icons",
      "output": "../lib1/assets/icons"
    }
  ],

结果又报错:

An asset cannot be written to a location outside of the output path.

目前的进展

我已经向Angular CLI提交了相关Issue,但暂时还没收到回复。

可行的替代解决方案

既然CLI内置方式行不通,我们可以用npm脚本配合文件复制工具来实现自动复制:

  1. 安装依赖工具
    先安装copyfiles作为开发依赖,用来复制文件:
npm install copyfiles --save-dev

如果需要每次构建前清理旧的dist目录,可以再安装rimraf:

npm install rimraf --save-dev
  1. 添加npm构建脚本
    在项目根目录的package.json中,修改scripts部分,添加针对库的构建命令:
"scripts": {
  // 普通构建
  "build:lib1": "rimraf dist/lib1 && ng build lib1 && copyfiles -u 3 projects/lib1/src/assets/**/* dist/lib1/assets/",
  // 生产构建
  "build:lib1:prod": "rimraf dist/lib1 && ng build lib1 --prod && copyfiles -u 3 projects/lib1/src/assets/**/* dist/lib1/assets/"
}

这里的-u 3参数是用来移除文件路径的前三级(也就是projects/lib1/src/这部分),确保资产文件能被放到dist/lib1/assets的正确路径下。

之后每次构建库的时候,只要执行npm run build:lib1或者npm run build:lib1:prod,就能自动完成构建+资产复制的流程了。

内容的提问来源于stack exchange,提问作者dev7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:07:49