我正在尝试通过尽可能地组合和缩小来最大限度地优化PWA。我的应用程序主要基于服务人员的google tutorial,因此我在服务人员中具有如下代码:
var filesToCache = [
'/',
'/index.html',
'/scripts/app.js',
'/styles/inline.css'
];
self.addEventListener('install', function(e) {
console.log('[ServiceWorker] Install');
e.waitUntil(
caches.open(cacheName).then(function(cache) {
console.log('[ServiceWorker] Caching app shell');
return cache.addAll(filesToCache);
})
);
});
我有一个
gulpfile.js
,除其他外,在构建过程中还使用gulp-smoosher
内联css:<!-- smoosh -->
<link rel="stylesheet" type="text/css" href="styles/inline.css">
<!-- endsmoosh -->
哪个效果很好-它直接将css内联到HTML中-但是显然我的serviceworker中的
filesToCache
现在具有一个条目,该条目将不存在于构建中var filesToCache = [
'/',
'/index.html',
'/scripts/app.js',
'/styles/inline.css' // <!--- this shouldn't be here in the build
];
有没有其他选择,可以使用gulp任务或其他方式(也许可以在构建时对其进行某种形式的配置更新)来解决此问题?
最佳答案
最后,通过进行以下更改来解决此问题。
将filesToCache
变量移至其自己的json文件-filesToCache.json
更新我的服务人员以在install
期间加载该文件
使用gulp-json-editor
操纵构建文件。
gulpfile中的代码
const jsonEditor = require('gulp-json-editor');
// snip
gulp.task("filesToCache", function(){
var out = folder.build;
return gulp.src(folder.src + "filesToCache.json")
.pipe(jsonEditor(function(json){
json.splice(json.indexOf("/styles/inline.css"),1);
return json;
}))
.pipe(gulp.dest(out));
});
服务人员中的代码
self.addEventListener('install', function(e) {
console.log('[ServiceWorker] Install');
e.waitUntil(
caches.open(cacheName).then(function(cache) {
return fetch("/filesToCache.json").then(function(response){
if(response && response.ok){
return response.json()
}
throw new Error("Failed to load files to cache for app shell")
})
.then(function(filesToCache){
console.log('[ServiceWorker] Caching app shell', filesToCache);
return cache.addAll(filesToCache);
})
.catch(function(error){
console.error(error)
})
})
);
});
希望这对以后的人有所帮助!
关于javascript - 使用gulp更新serviceworker配置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45978907/