Ecmascript 6 在服务人员中使用browser.js

Ecmascript 6 在服务人员中使用browser.js,ecmascript-6,web-worker,babeljs,service-worker,Ecmascript 6,Web Worker,Babeljs,Service Worker,为了开发目的,我们希望使用来执行客户端源代码转换。我们希望使用将ES6+/ES2015文件传输到ES5模块 但是,在使用importScripts的服务人员中包含babel,会导致以下错误: GET http://localhost:8080/babel-core/browser.js net::ERR_FAILED Uncaught NetworkError: Failed to execute 'importScripts' on 'WorkerGlobalScope': The scri

为了开发目的,我们希望使用来执行客户端源代码转换。我们希望使用将ES6+/ES2015文件传输到ES5模块

但是,在使用
importScripts
的服务人员中包含babel,会导致以下错误:

GET http://localhost:8080/babel-core/browser.js net::ERR_FAILED

Uncaught NetworkError: Failed to execute 'importScripts' on 'WorkerGlobalScope': The script at 'http://localhost:8080/babel-core/browser.js' failed to load.
所以,问题是,如何正确地将babel导入服务人员

编辑:这不是明显的网络错误,因为我们可以将文件的内容更改为简单的内容,从而使我们能够实际加载和执行文件。此外,可以使用普通的
标记加载文件


edit2:要获取此消息,请签出此存储库,在端口8080启动本地服务器,最后加载。我们目前正在使用Chrome44。

一般来说,不建议使用服务人员来完成对站点功能至关重要的任务。服务人员旨在逐步增强功能,如果相关的服务人员不可用,您的站点应设计为仍能正常运行

即使在支持服务人员的浏览器中,如果用户shift重新加载或这是服务人员有机会控制之前的第一次导航,也可能没有一个浏览器控制您的页面


为了回答您的特定问题,service worker代码在其下执行时公开了与普通页面的全局范围不同的功能,并且您尝试导入的
browser.js
脚本中的某些内容似乎假定只有在普通页面中才可用的功能。不幸的是,即使启用了调试器,Chrome的DevTools也无法显示导致错误的特定语句,因此我无法确定哪些语句是无效的。

我的实验如何-您可以在上看到演示

我使用特性测试来检测支持的特性,并有选择地传输截获的代码。当然,这只是一个开始,只是将默认参数映射到babel插件,但可以映射更多特性


此外,功能测试背后的人正在讨论选择性传输文件

这是一个网络错误。您确定文件
http://localhost:8080/babel-core/browser.js在那里,你能从工人外部加载吗?是的,文件在那里,正如我能加载importScripts('babel-core/browser polyfill.js')位于同一文件夹中,因此没有实际的网络问题。将文件内容更改为更简单的内容可以加载文件。此外,还可以通过普通的
标记加载文件。