This ensures that the packages build successfully even when optional
deps are unavailable.
`--no-optional` currently has no effect on the backend, because
it has no optional packages.
`npm ci` is recommended instead of `npm install` for automated builds.
Its main advantage is the `package-lock.json` consistency check: The
command fails if the lock file doesn't match `package.json`.