4

我正在使用angular.jsonfileReplacements文件中的 angular cli 配置来替换文件夹内容,如下所示:

{
  "projects": {
    "myProject": {
      "architect": {
        "build": {
          "configurations": {
            "prod": {
              "fileReplacements": [
                {
                  "replace": "src/environments/environment.ts",
                  "with": "src/environments/environment.prod.ts"
                },
                {
                  "replace": "node_modules/moment/locale/",
                  "with": "src/moment-js-locale/"
                }
              ]
            }
          }
        }
      }
    }
  }
}

请注意,在replace值中,我使用的是文件夹路径而不是文件路径。这是 Angular 10 的工作代码。

我升级到 Angular 11,现在尝试使用以下命令构建 prod 版本时出现错误: ng build --prod

我得到的错误是:

Schema validation failed with the following errors:
  Data path ".fileReplacements[1]" should NOT have additional properties(replace).
  Data path ".fileReplacements[1].replace" should match pattern "\.(([cm]?j|t)sx?|json)$".
  Data path ".fileReplacements[1]" should match exactly one schema in oneOf.

ESLint 向我显示了这个警告:

String does not match the pattern of "\.(([cm]?j|t)sx?|json)$".

我能用这个做什么?这是 Angular 11 的错误吗?我应该使用不同的方法吗?

任何帮助将不胜感激。

4

2 回答 2

3

所以事实证明,这个功能实际上是一个错误 。在 Angular 10 之前,人们可以进行文件夹替换这一事实从一开始就不应该工作。

我在angular-cli repo中问了这个问题,这就是我得到的答案:

很抱歉您在更新后遇到此问题。但是,替换目录从来都不是文件替换功能支持的用例。

我想这需要由开发人员处理。在我的情况下,我只是添加了一个脚本来使用shell命令执行此操作,并且我正在将此脚本作为预构建脚本运行,使用npm run script.

于 2021-01-06T18:59:25.883 回答
0

我成功地为 web.config 和专用于生产的图像进行了以下配置(我将生产文件放入 src/deployment/prod 并将它们复制到 dist 目录中的“输出”变量目录中):

"fileReplacements": [
    {
        "replace": "src/environments/environment.ts",
        "with": "src/environments/environment.prod.ts"
    }
],
"assets": [
    "src/assets",
    "src/favicon.ico",
    {
        "input": "src/deployment/prod",
        "output": "/",
        "glob": "web.config"
    },
    {
        "input": "src/deployment/prod",
        "output": "assets/img",
        "glob": "*.png"
    }
]

所以在你的情况下,你可能可以使用:

{
    "input": "node_modules/moment/locale/", -- source folder in ClientApp/
    "output": "moment-js-locale", -- destination folder in dist/
    "glob": "*.js" -- all js files will be copied
}
于 2021-02-25T09:15:50.273 回答