首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Chrome扩展服务工作者中导入js文件?

如何在Chrome扩展服务工作者中导入js文件?
EN

Stack Overflow用户
提问于 2022-11-12 14:14:59
回答 1查看 105关注 0票数 0

我试图在y Chrome扩展的服务工作人员中使用socket.io库,但是当我试图在Chrome中加载它时,我会得到错误: Uncaught:“不能使用模块外的导入语句”。

我从这里获得了库,然后将它保存在扩展文件夹中,在socketIo.js中:

然后在我的service_worker.js中,我尝试导入它:

代码语言:javascript
运行
复制
import io from './socketIo.js';
const socket = io("http://localhost:3002");

由于它是服务工作者,所以我没有将它附加到我的扩展名html文件中,因此我不能简单地将它设置为如下模块:

代码语言:javascript
运行
复制
<script type="module" src="./service_worker.js"></script>. 

而且,由于扩展不是Node.js应用程序,所以它们没有package.json,我可以在其中设置属性"type":“模块”。

如您所见,我使用了导入的文件的相对路径和扩展名,如下所示:Chrome扩展服务工作人员不支持导入其他JS文件或NPM包

现在,我添加了socket.io的ES模块版本及其"map“文件。并将manifest.json中的服务工作人员更新为ES模块:

但是,当我再次尝试加载扩展时,我会收到这样的警告:“服务工作人员注册失败。状态代码: 3",以及泛型错误:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-12 16:11:36

因为它是服务工作者,所以我没有将它附加到我的扩展名html文件中,因此我不能简单地将它设置为如下所示的模块: 而且,由于扩展不是Node.js应用程序,所以它们没有package.json,我可以在其中设置属性"type":“模块”。

登记服务人员

您可以选择指定一个额外的字段"type":" Module“,以将服务工作人员作为ES模块包括进来,这允许您导入进一步的代码。

manifest.json

代码语言:javascript
运行
复制
{
    "manifest_version": 3,
    "name": "socket.io",
    "version": "1.0",
    "background": {
        "service_worker": "background.js",
        "type": "module"
    }
}

但是您使用的socket.io版本不是ES模块:

代码语言:javascript
运行
复制
Uncaught SyntaxError: The requested module '/socket.io.js' does not provide an export named 'default'

所以我从socket.io.esm.min.js下载了https://cdn.socket.io/4.5.3socket.io.esm.min.js.map

我不知道他们是否有socket.io 1.7.3的ES模块版本

在扩展名中包含.map文件可以防止服务工作者控制台中出现此错误:

chrome-extension://cfdinlnmiepoligakoinbffeaphkfmmp/socket.io.esm.min.js.map:系统错误: DevTools无法加载内容: net::ERR_FILE_NOT_FOUND

background.js

代码语言:javascript
运行
复制
import io from "/socket.io.esm.min.js";
const socket = io("http://localhost:3002");

服务工作者控制台仍然会被以下错误淹没:

必须在员工脚本的初始评估中添加“卸载前”事件的事件处理程序。

但我认为在Stackoverflow上有一个解决办法。

或否:

另外,将库socket.io.esm.min.jssocket.io.esm.min.js.map放在服务工作人员的同一个文件夹中(而不是在子文件夹中)。

在进行了这些更改之后,只需在chrome:// extension /中刷新扩展即可。但是,如果这不起作用,删除您的扩展并重新加载它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74413670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档