How to add subresources integrity with Angular appShell build

1.5k Views Asked by At

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 !

1

There are 1 best solutions below

0
On BEST ANSWER

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 ;)