工作箱版本未生成服务工作者

时间:2018-12-04 10:36:40

标签: javascript gruntjs service-worker workbox

我正在尝试将workbox-build集成到我的grunt构建系统中,以预缓存文件。 我正在关注这篇文章-generateSW Mode

在遵循上述google文档之后,我将函数定义为

var workBox = require('workbox-build');

function swCache(){
    workBox.generateSW({
        swPath : path.join('target/app', 'sw_cache.js')
    })
    .then(function(details){
        console.log(details);
    })
}

上面的swPath是我的grunt文件的相对路径。 下面我附上了实现上述功能的grunt任务的代码

grunt.task.registerTask('generateSWCache', function(){
        swCache();
    });

    if (env === 'production') {
        build = preBuild.concat(productionBuild).concat('generateSWCache');
    } else {
        build = preBuild.concat(developmentBuild).concat('generateSWCache');
    }

任务generateSWCache正在运行,但未生成任何sw_cache.js用于文件的预缓存。 以下是屏幕截图 enter image description here

1 个答案:

答案 0 :(得分:0)

generateSWCache是​​一个异步任务,因此您应该使用Grunt的this.async函数。

var workBox = require('workbox-build');

function swCache(done) {
    workBox.generateSW({
        swPath : path.join('target/app', 'sw_cache.js')
    })
    .then(function(details){
        console.log(details);
        done(true);
    })
    .catch(function (err) {
        console.log(err);
        done(false);
    });
}

grunt.task.registerTask('generateSWCache', function(){
    swCache(this.async());
});

if (env === 'production') {
    build = preBuild.concat(productionBuild).concat('generateSWCache');
} else {
    build = preBuild.concat(developmentBuild).concat('generateSWCache');
}