web-dev-qa-db-ja.com

build --prodの実行時に、Service Workerファイルngsw.json / ngsw-worker.jsonは生成されません。 Angular 5

angular 5.1.2 Angular-cli 1.6.3を使用

すべてのファイルはかなりバニラです。 distフォルダーが作成されます

私のngsw-config.json

{
"index": "/index.html",
"assetGroups": [
    {
        "name": "app",
        "installMode": "prefetch",
        "resources": {
            "files": [
                "/favicon.ico",
                "/index.html"
            ],
            "versionedFiles": [
                "/*.bundle.css",
                "/*.bundle.js",
                "/*.chunk.js"
            ]
        }
    },
    {
        "name": "assets",
        "installMode": "lazy",
        "updateMode": "prefetch",
        "resources": {
            "files": [
                "/assets/**"
            ]
        }
    }]   

}

私のapp.module.tsは

  ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production })

バニラのenvironment.tsとenvironment.prod.tsを使用しています

main.ts

import './polyfills.ts';
import {enableProdMode} from '@angular/core';
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';

import {AppModule} from './app/app.module';
import {environment} from './environments/environment';

if (environment.production) {
enableProdMode();
}

platformBrowserDynamic().bootstrapModule(AppModule)
.then(() => {
if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('ngsw-worker.js');
}

})
.catch(err => console.log(err));

他に何をチェックすべきかわからない

8
user2182570

serviceWorkerプロパティを.angular-cli.jsonの最初のエントリappsに追加しますか?そうでない場合、angular-cliはそれを構築しませんでした。

"apps": [
  {
    ...
    "serviceWorker": true
  }
}

[〜#〜] edit [〜#〜] 2018年12月現在、。angular-cli。 jsonangular.jsonになり、serviceWorkerの形式は次のようになります。

{
    ...
    "projects": {
         "my-project-name": {
             "architect": {
                 "build": {
                     "configurations": {
                        "production": {
                           "serviceWorker": true
                        }
                     }
                 }
             }
         }
    }

Service Workerを必要とするすべての構成でserviceWorker:trueを指定する必要があります。

12
kklimczak

私も同じ問題を抱えていました。古いパッケージを使用していたことが判明

"@angular-devkit/build-angular": "~0.6.6"

これは

"@angular-devkit/build-angular": "~0.10.0",

この後、サービスワーカーがコピーされます

また、最新のAngular 7およびlateset Angular CLI

9
Johansrk

私のapp.module.tsにスペースがないようです

私が持っていました:environment.production? ServiceWorkerModule.register( '/ ngsw-worker.js'):[]

変更:environment.production? ServiceWorkerModule.register( '/ ngsw-worker.js'):[]

1
user2182570

長い検索の結果、ビルドに欠落している--prodフラグが問題を引き起こしていることがわかりました。正確にこれはサービスワーカーファイルを生成し、追加のビルドフラグはそれを実行できません(uglifyingと同じで、以前に--env = buildに対して--buildフラグを交換した理由はuglifyerでした)。ここにある--buildフラグで何が起こるかについての詳細情報: CLIを使用したAngular 2-本番用のビルド

0
Nadine