如何使用 Angular appShell 构建添加子资源完整性

Dou*_*dou 3 build server-side-rendering app-shell angular-cli-v9

我使用 Angular CLI 9 构建了一个应用程序。我package.json使用以下命令修补了该文件:

{
  "scripts": {
    "build:prod": "ng build --prod --subresource-integrity",
    "prebuild:prod": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' ts-node ./sitemap_generator.ts"
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,当我调用 时npm run build:prod,我的 2 个命令将被执行,并且编译器生成的输出文件包含 SRI。

现在,我添加了 appShell :

npm run ng generate appShell -- --client-project my-project

要使用appShell运行构建,我必须使用以下命令:

npm run ng run my-project:app-shell:production

主要问题

但是这个命令调用文件my-project:build:production的配置angular.json,并且不接受参数--subresource-integrity:/

如何修补它以使用SRI 进行 appShell 生产构建?

勇敢者的第二个问题

此 appShell 构建server/在 中创建一个文件夹dist/。它只包含一个main.js文件。我想它在 Node 内部使用来构建 appShell ;有人可以证实吗?那么,我也可以使用 Unversal 与这个架构来为搜索引擎做一些 SSR 吗?

谢谢 !

Dou*_*dou 6

好吧,我通过编辑 angular.json 找到了一种方法:

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "version": 1,
  "newProjectRoot": "my-project",
  "projects": {
    "oce-training": {
      "architect": {
        "build": {
          "configurations": {
            "production": {
              "subresourceIntegrity": true,
            }
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,我们无法覆盖package.jsonCLI 命令或通过 CLI 命令进行覆盖,但这对于我的情况来说已经足够了。

现在我有package.json

{
  "scripts": {
    "build:prod": "ng run oce-training:app-shell:production",
    "prebuild:prod": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' ts-node ./sitemap_generator.ts"
  },
}
Run Code Online (Sandbox Code Playgroud)

我关于 SSR 的问题仍然存在,但这可能是另一个 Stackoverflow 帖子;)