fix(service-worker): deprecate `versionedFiles` in asset-group resources (#23584)

Since `versionedFiles` behaves in the exact same way as `files`, there
is no reaason to have both. Users should use `files` instead.

This commit deprecates the property and prints a warning when coming
across an asset-group that uses it. It should be completely removed in
a future version.

Note, it has also been removed from the default `ngsw-config.json`
template in angular/devkit#754.

PR Close #23584
This commit is contained in:
George Kalpakas 2018-04-28 02:01:28 +03:00 committed by Alex Rickabaugh
parent 017d67cdf8
commit 1d378e2987
5 changed files with 21 additions and 10 deletions

View File

@ -7,12 +7,9 @@
"resources": { "resources": {
"files": [ "files": [
"/favicon.ico", "/favicon.ico",
"/index.html" "/index.html",
], "/*.css",
"versionedFiles": [ "/*.js"
"/*.bundle.css",
"/*.bundle.js",
"/*.chunk.js"
] ]
} }
}, { }, {
@ -25,4 +22,4 @@
] ]
} }
}] }]
} }

View File

@ -70,6 +70,7 @@ interface AssetGroup {
updateMode?: 'prefetch' | 'lazy'; updateMode?: 'prefetch' | 'lazy';
resources: { resources: {
files?: string[]; files?: string[];
/** @deprecated As of v6 `versionedFiles` and `files` options have the same behavior. Use `files` instead. */
versionedFiles?: string[]; versionedFiles?: string[];
urls?: string[]; urls?: string[];
}; };
@ -102,7 +103,7 @@ This section describes the resources to cache, broken up into three groups.
* `files` lists patterns that match files in the distribution directory. These can be single files or glob-like patterns that match a number of files. * `files` lists patterns that match files in the distribution directory. These can be single files or glob-like patterns that match a number of files.
* `versionedFiles` is like `files` but should be used for build artifacts that already include a hash in the filename, which is used for cache busting. The Angular service worker can optimize some aspects of its operation if it can assume file contents are immutable. * `versionedFiles` has been deprecated. As of v6 `versionedFiles` and `files` options have the same behavior. Use `files` instead.
* `urls` includes both URLs and URL patterns that will be matched at runtime. These resources are not fetched directly and do not have content hashes, but they will be cached according to their HTTP headers. This is most useful for CDNs such as the Google Fonts service.<br> * `urls` includes both URLs and URL patterns that will be matched at runtime. These resources are not fetched directly and do not have content hashes, but they will be cached according to their HTTP headers. This is most useful for CDNs such as the Google Fonts service.<br>
_(Negative glob patterns are not supported.)_ _(Negative glob patterns are not supported.)_

View File

@ -44,6 +44,13 @@ export class Generator {
Promise<Object[]> { Promise<Object[]> {
const seenMap = new Set<string>(); const seenMap = new Set<string>();
return Promise.all((config.assetGroups || []).map(async(group) => { return Promise.all((config.assetGroups || []).map(async(group) => {
if (group.resources.versionedFiles) {
console.warn(
`Asset-group '${group.name}' in 'ngsw-config.json' uses the 'versionedFiles' option.\n` +
'As of v6 \'versionedFiles\' and \'files\' options have the same behavior. ' +
'Use \'files\' instead.');
}
const fileMatcher = globListToMatcher(group.resources.files || []); const fileMatcher = globListToMatcher(group.resources.files || []);
const versionedMatcher = globListToMatcher(group.resources.versionedFiles || []); const versionedMatcher = globListToMatcher(group.resources.versionedFiles || []);

View File

@ -38,7 +38,13 @@ export interface AssetGroup {
name: string; name: string;
installMode?: 'prefetch'|'lazy'; installMode?: 'prefetch'|'lazy';
updateMode?: 'prefetch'|'lazy'; updateMode?: 'prefetch'|'lazy';
resources: {files?: Glob[]; versionedFiles?: Glob[]; urls?: Glob[];}; resources: {
files?: Glob[];
/** @deprecated As of v6 `versionedFiles` and `files` options have the same behavior. Use
`files` instead. */
versionedFiles?: Glob[];
urls?: Glob[];
};
} }
/** /**

View File

@ -4,7 +4,7 @@ export interface AssetGroup {
name: string; name: string;
resources: { resources: {
files?: Glob[]; files?: Glob[];
versionedFiles?: Glob[]; /** @deprecated */ versionedFiles?: Glob[];
urls?: Glob[]; urls?: Glob[];
}; };
updateMode?: 'prefetch' | 'lazy'; updateMode?: 'prefetch' | 'lazy';