javascript - 如何在 Cloudflare 工作脚本中使用 ES6 导出?
问题描述
我正在尝试熟悉 CloudFlare 工作人员。
我通过以下方式从https://developers.cloudflare.com/workers/get-started/quickstarts复制了一个快速启动项目:
wrangler generate my-app https://github.com/cloudflare/worker-template
这给了我一个 JS 文件,它监听“fetch”并返回一个Response
via handleRequest
:
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
return new Response('Hello worker!', {
headers: { 'content-type': 'text/plain' },
})
}
好的,这是有道理的。
现在我想包含Cloudflare 的一个示例
export default {
fetch() {
const html = `<!DOCTYPE html>
<body>
<h1>Hello World</h1>
<p>This markup was generated by a Cloudflare Worker.</p>
</body>
`;
return new Response(html, {
headers: {
"content-type": "text/html;charset=UTF-8",
},
});
},
};
这意义不大。我应该用它替换所有原始代码吗?如果我这样做,我会收到以下错误wrangler publish
:
错误:对 Cloudflare 的请求出现问题...未注册事件处理程序。这个脚本什么都不做。
我应该以某种方式将它们捣碎在一起吗?如何?是否有我缺少的步骤或配置?
解决方案
您问题中的两个代码片段使用了 Workers 支持的两种不同语法:Service Workers 语法和 ES Modules 语法。addEventListener
与 Service Workers 语法一起使用,这是 Workers 支持的原始语法。最近,Workers 增加了对新的基于 ES 模块的语法的支持,用于export default
导出处理程序。这种新语法避免了一些样板文件(并不奇怪event.respondWith()
)并具有其他一些优点。
您需要在您wrangler.toml
使用的语法中指定。要使用模块语法,您需要添加:
[build.upload]
format = "modules"
main = "./worker.mjs"
推荐阅读
- flutter - 在 Flutter 中弹出另一个页面后,Android 后退按钮未调用 onWillPop
- database - Magento 和 Vue Storefront 自定义数据库表
- javascript - 使用 Webpack 5 的正确设置是什么(webpack 新手)
- css - 在样式化组件中使用 Material-ui 主题
- python - TypeError:initial_value 必须是 str 或 None,而不是 _io.TextIOWrapper
- python - 无法在 anaconda 环境中导入 scikit-learn
- angular - 绑定动态更改的控件/在屏幕上呈现
- nlp - NLP 技术在语料库中查找相似关键字
- flutter - 如何在颤动中做一个“屏幕中的屏幕”?
- python - 如何在少量图形中不断改变我的背景?