首页 > 解决方案 > 指定“resolveJsonModule”:运行 ng-packagr 时为 true

问题描述

我被要求将我的 Angular 9 应用程序的版本作为 HTML 元数据的一部分。版本号来自

import { version } from '../../../package.json';

对于本地和 Azure DevOps 管道构建,我们使用 ng-packagr。
对于我的本地构建,我可以将 resolveJsonModule 添加到:node_modules\ng-packagr\lib\ts\conf\tsconfig.ngc.json:

"compilerOptions": {
    ...    
    "resolveJsonModule": true,
},

管道构建确实 npm install fresh 清除了 Azure 云构建服务器上 node_modules 中的所有条目。因此,我无法像在本地构建中那样修改云构建服务器上的 tsconfig.ngc.json。

Azure 管道构建步骤:

"packagr": "ng-packagr -p ng-package.json"

ng-package.json 内容:

{
  "$schema": "./node_modules/ng-packagr/ng-package.schema.json",
  "lib": {
    "entryFile": "public-api.ts"
  },
  "dest": "...",
  "whitelistedNonPeerDependencies": ["angular", "bootstrap", "font-awesome", "gojs", "wait-on", "jquery", "rxjs", "tslib", "uuid", "zone.js", "ngx-toastr", "watch", "onchange", "lodash", "hammerjs"]
}

我的一些不成功的尝试强制 ng-packagr 使用指定的 tsconfig.json 或 compilerOptions:

1)“您需要做的就是修改库文件夹下的tsconfig.lib.json。”
https://github.com/ng-packagr/ng-packagr/blob/HEAD/docs/override-tsconfig.md

我尝试在我自己的目录结构下添加 tsconfig.lib.json,然后将 tsconfig.lib.json 添加到我的 angular.json;但没有收到更改。不确定 github 文档是否意味着在 node_modules\ng-packagr... 下添加/修改 tsconfig.lib.json ;如果是这样:
a)我找不到 tsconfig.lib.json
b)即使我可以找到 tsconfig.lib.json,这个建议仍然会涉及修改 node_modules\ 目录下的内容,这会随着每个管道构建而消失。

2)https://github.com/ng-packagr/ng-packagr/blob/HEAD/docs/configuration-locations.md
我查看了ng-package.json的架构,但它不允许修改编译器选项:
https ://github.com/ng-packagr/ng-packagr/blob/master/src/ng-package.schema.json

3) “您需要通过命令行使用 -c 提供一个 tsconfig。”
https://github.com/ng-packagr/ng-packagr/issues/1131

我预计会出现错误:
错误 TS2732:找不到模块 '../../../package.json'。考虑使用“--resolveJsonModule”导入扩展名为“.json”的模块

不显示 -c tsconfig.app.json

ng-packagr -p ng-package.json -c tsconfig.app.json

并在没有 -c tsconfig.app.json 时显示。如果不更改 tsconfig.ngc.json,我什至无法在本地重现错误。

4)我还阅读了:
在 ng-packagr 中嵌入 json
https://github.com/ng-packagr/ng-packagr/issues/1050
如何将我的 tsconfig 文件与 ng-packagr 一起使用?
在 ng-packagr 构建中包含 json 文件

但我找不到足够的相关信息来解决我的特定问题。

谢谢你的帮助。

标签: angularazure-devopspackage.jsonng-packagr

解决方案


您需要将配置文件传递给构建步骤:

"packagr": "ng-packagr -p ng-package.json --config tsconfig.lib.json"

tsconfig.lib.json 扩展了默认配置并添加了编译器选项:

{
   "extends": "./node_modules/ng-packagr/lib/ts/conf/tsconfig.ngc.json",
   "compilerOptions": {
      "resolveJsonModule": true,
      "esModuleInterop": true,
   }
}

推荐阅读