问题
I have angular 8 app. Inside this app I have three projects.
I want to add @angular/pwa with this command
ng add @angular/pwa && ng build --prod
But when PWA is installed I get error
ERROR in ./node_modules/@angular/service-worker/fesm2015/service-worker.js Module build failed: Error: ENOENT: no such file or directory, open 'C:\Development\Repositories\app\node_modules@angular\service-worker\fesm2015\service-worker.js'
and in CHROME CONSOLE i get
Uncaught TypeError: Cannot read property 'id' of undefined
at registerNgModuleType (core.js:34469)
at core.js:34487
at Array.forEach (<anonymous>)
at registerNgModuleType (core.js:34483)
at core.js:34487
at Array.forEach (<anonymous>)
at registerNgModuleType (core.js:34483)
at core.js:34487
at Array.forEach (<anonymous>)
at registerNgModuleType (core.js:34483)
Before PWA everything working ok
EDIT: I also try to remove PWA and add it directly to project
ng add @angular/pwa --project app1
And now in my project src, I get new file manifest.webmanifest, in the root of project I get ngsw-config.json, and in project module I get ServiceWorkerModule.register('/ngsw-worker.js', { enabled: environment.production })
But still, get the same error
EDIT:
Here is my folder structure. This is all how angular CLI is added. Do I need to add another file?
I don't have gsw-worker.js in any of my folders.
Also, when I open ngsw-config.json for "$schema": "../../node_modules/@angular/service-worker/config/schema.json" i get
Unable to load schema from c:\Development\Repositories\app\app-frontend\node_modules\@angular\service-worker\config\schema.json': ENOENT: no such file or directory, open 'c:\Development\Repositories\app\app-frontend\node_modules\@angular\service-worker\config\schema.json'
But if i look in node_modules shema.json is there
(root -angular.json, package.json... there is no any manifest.webmanifest and ngsw-config.json)
|
|
|----projects
|
|----app1
|------src
| |------app
| | |-app.module.ts (here is in imports ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production }))
| |
| |-manifest.webmanifest
|
|
ngsw-config.json
tsconfig.json
tsconfig.app.json
tsconfig.spec.json
Mabey in ma app.module.ts (in my project) is the problem because I need to register 'ngsw-worker.js' but I can not find anywhere this in my app, mabey angular CLI not added this or I don't need this file?
回答1:
Please be aware that adding PWA is adding this features to one of the existing projects with the command below:
ng add @angular/pwa --project *project-name*
Check the official documentation from angular for more information: https://angular.io/guide/service-worker-getting-started
回答2:
There might be multiple errors in your application try to add pwa again properly with
ng add @angular/pwa --project *project-name*
and then build it with
ng build --prod
here is the link for your reference - https://angular.io/guide/service-worker-getting-started
Chrome console error
you are getting that error cause u are tying to access id from an object which is not defined for that you need to handle your object properly
for ex- let id = obj.id ? obj.id : '';
Try to fix that error first and then build it. If it doesn't work then remove your node_modules and then install it again and build it.
Hope this helps :)
回答3:
Few thing before you install pwa to angular project. First you need to update your @angular/cli to make sure you have lastest version
npm i -g @angular/cli
Then run
ng new projectname
Then add pwa to your project
ng add @angular/pwa --project *project-name*
And run
ng build --prod
回答4:
Steps to make it working...
npm uninstall @angular/pwanpm cache clean
Random errors§ Some strange issues can be resolved by simply running npm cache clean and trying again. If you are having trouble with npm install, use the -verbose option to see more details.
- after all of this
ng update
This will fix this error. This error happens because some of dependency in package.json is not up-to-date and they make mess with pwa.
来源:https://stackoverflow.com/questions/58933350/adding-pwa-to-angular-8-module-build-failed