buildserver-side-renderingapp-shellangular-cli-v9

How to add subresources integrity with Angular appShell build


I built an application with Angular CLI 9. I patched the package.json file with :

{
  "scripts": {
    "build:prod": "ng build --prod --subresource-integrity",
    "prebuild:prod": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' ts-node ./sitemap_generator.ts"
  }
}

So, when I called npm run build:prod, my 2 commands are executed and output files generated by compiler contains SRI.

Now, I added the appShell :

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

To run the build with the appShell, I have to use the command :

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

MAIN QUESTION

But this command calls my-project:build:production configuration of angular.json file, and this does not accept the --subresource-integrity argument :/

How to patch this to have appShell production build with SRI ?

SECONDARY QUESTION for the braves

This appShell build create a server/ folder in dist/. It just contains a main.js file. I suppose it's internally used with Node to build the appShell ; can someone confirm that ? And so, can I use Unversal too with this architecture to do some SSR for search engines ?

Thanks !


Solution

  • Ok, I found a way by editing 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,
                }
              }
            }
          }
        }
      }
    }
    

    So, we cannot override on package.json or by CLI command, but it's sufficient for my case.

    Now I have in 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"
      },
    }
    

    My question about SSR is maintained, but it could be another Stackoverflow post ;)