Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webpack 错误的舱单预检位置_Webpack_Workbox - Fatal编程技术网

Webpack 错误的舱单预检位置

Webpack 错误的舱单预检位置,webpack,workbox,Webpack,Workbox,我正在尝试使用Workbox.injectManifest生成服务工作者,但我的服务工作者的预缓存清单路径有问题,无法正确生成 我的网页包output.path是“path.resolve('./scripts/app/dist')”和我的工作盒配置: new WorkboxPlugin.InjectManifest({ swSrc: path.resolve("./scripts/app/src/service-worker.js"), swDest: "../

我正在尝试使用Workbox.injectManifest生成服务工作者,但我的服务工作者的预缓存清单路径有问题,无法正确生成

我的网页包
output.path
是“path.resolve('./scripts/app/dist')”和我的工作盒配置:

new WorkboxPlugin.InjectManifest({
        swSrc: path.resolve("./scripts/app/src/service-worker.js"),
        swDest: "../../../sw.js",        
        globDirectory: path.resolve("./"),
        globPatterns: [
            "scripts/**/*.js",
            "fonts/**/*.{eot,ttf,woff,woff2,otf}",
            "images/**/*.{png,jpg,svg,gif,ico}",
            "styles/**/*.css"
        ]
    });
因为默认情况下,Workbox在output.path中创建sw.js,并且我希望它位于我的站点的根目录中,所以我有
。/../../sw.js
,但预缓存清单将保留在output.path中,这是
/scripts/app/dist
。问题是生成的sw.js中指向清单的路径是:

importScripts("precache-manifest.472387a6bbb5e3e8f5e8392d628202d5.js", "https://storage.googleapis.com/workbox-cdn/releases/3.1.0/workbox-sw.js");
这是指向sw.js所在的位置,它位于站点根目录上,无法找到。那是一只虫子还是我想要的东西;我没有正确配置?我尝试过使用“importsDirectory”,但这只是将清单移动到另一个位置,而sw.js上的路径仍然是错误的

更新

我的服务人员模板中包含以下内容:

workbox.skipWaiting();
workbox.clientsClaim();

workbox.precaching.precacheAndRoute([])

workbox.routing.registerRoute( .......
但当我构建时,不会填充数组并创建外部清单: 这就是插件创建的内容:

importScripts("precache-manifest.aa4b439ba2589f9d3cf0c56e1b06323d.js", "https://storage.googleapis.com/workbox-cdn/releases/3.1.0/workbox-sw.js");

workbox.skipWaiting();
workbox.clientsClaim();

workbox.precaching.precacheAndRoute([])

workbox.routing.registerRoute(
初始化InjectManifest时需要设置参数

例如,我希望我的预缓存清单位于公用文件夹中,因此我的配置如下所示:

new InjectManifest({
    swSrc: './resources/js/sw.js',
    swDest: '../sw.js',
    importsDirectory: '../'
})

根据您的swDest值,我怀疑您可能需要importsDirectory的值
。/../../../

您的injectManifest()创建一个新的清单,在workbox.precaching.precacheAndRoute([])插入数组,该清单存在于早期的sw.js中。那么,当“injectManifests”全局被设计为重新创建/插入新的清单时,为什么您需要导入预缓存清单。我已经输入了更多详细信息来回答您的问题。阅读以下内容可能会有所帮助:嗯,不确定这是否相关。我不想使用Workbox的本地副本。我只是希望在编译服务工作者时清单的路径是正确的。fwiw-我在协调和管理这些方面遇到了一些类似的问题。在我看来,它们不是设计的,旨在相互配合使用。。而是从另一个中选择一个。我不使用插件,所以在我的例子中,我总是在一个预先存在的sw.js中的正则表达式中内联preCache数组无时间戳缓存文件>我在应用程序中退出同步软件,并通过关注“watch”STMT和watch STMT输出的任何捆绑包(捆绑包位于预缓存列表/清单中)来解决此问题