 从 JS 文件部署 Worker 并通过覆盖源文件完成更新?)
如何用 puter.workers.create() 从 JS 文件部署 Worker 并通过覆盖源文件完成更新【免费下载链接】puter The Internet Computer! Free, Open-Source, and Self-Hostable.项目地址: https://gitcode.com/GitHub_Trending/pu/puter你需要把一个包含 router 代码的 JavaScript 文件部署为 Puter 的 Serverless Worker并且后续修改代码时保持同一个 Worker 名称和 URL 不变。这个任务分两步先用puter.workers.create(workerName, filePath)从 Puter 账号里的 JS 文件创建并部署 Worker之后每次更新都通过覆盖该 Worker 的源文件来完成而不是重新创建一个新 Worker。前提条件来自 create 文档需要一个已验证邮箱的 Puter 账号运行环境加载了 Puter.js文档示例使用https://js.puter.com/v2/脚本标签Worker 源码文件不能超过 10MBworkerName只能包含字母、数字、连字符-和下划线_。第一步准备 Worker 源文件Worker 代码必须是一个包含 router 代码的 JS 文件且该文件要先存在于你的 Puter 账号的文件系统中。文档示例用puter.fs.write()直接把代码写入my-worker.jsconst workerCode // A router for /api/hello router.get(/api/hello, async (event) { return Hello from worker!; }); ; // 保存 worker 代码到 Puter 账号中的 my-worker.js await puter.fs.write(my-worker.js, workerCode);puter.fs.write()的overwrite选项默认为true见 write 文档因此对已存在的文件调用它会直接覆盖内容这正是后面更新 Worker 依赖的行为。第二步调用 create() 部署 Workerputer.workers.create()有三种调用形式puter.workers.create(workerName, filePath) puter.workers.create(workerName, filePath, appName) puter.workers.create(workerName, filePath, options)参数说明workerName必填Worker 的名称决定其 URL。filePath必填Puter 账号中包含 router 代码的 JS 文件路径。appName可选绑定到你账号中一个已存在的 appWorker 就以该 app 身份运行不会创建沙箱 app。注意如果你的代码本身就是作为 Puter app 运行的只能命名你创建的 app否则会被403拒绝从 GUI 或使用 user token 部署时可以命名账号内任意 app。options可选{ sandbox: boolean }控制是否给 Worker 一个独立的沙箱 app。默认值取决于认证方式——以 app 身份部署时默认falseWorker 作为你的 app 运行以 user tokenGUI、root access token部署时默认true此时会自动创建或复用sandbox-workerNameapp。返回值是一个Promise成功时解析为 WorkerDeployment 对象包含success是否成功、url部署后的 URL和errors部署过程中的错误数组失败时抛出带原因的Error// 从 Puter 账号中的文件创建并部署 worker const deployment await puter.workers.create(my-api, my-worker.js); console.log(Worker deployed at: ${deployment.url});第三步验证部署结果文档明确说明Worker 创建或更新后完全生效传播到所有边缘服务器可能需要 5 到 30 秒。文档示例的做法是等待 5 秒后请求 Worker 的端点setTimeout(async () { const response await fetch(${deployment.url}/api/hello); puter.print(→ Test response: , await response.text()); }, 5000);上面的示例中请求/api/hello后打印响应文本对应文档里 router 代码返回的字符串是Hello from worker!文档示例输出。如果你请求后长时间拿不到响应先考虑文档给出的 530 秒传播窗口而不是立刻判定部署失败。第四步通过覆盖源文件更新 Worker这是本文的关键约束Worker 一旦创建名称和 URL 在整个生命周期内保持不变。部署变更时不要再用新名字调用一次create()——那样旧 Worker 仍在其旧 URL 上运行而你的调用方会指向一个被孤立的新实例。正确的更新路径是覆盖它的源文件用puter.workers.get(workerName)查询 Worker 信息。它返回 WorkerInfo 对象字段包括name、url、file_pathWorker 源码文件路径、file_uid、app_uid、created_at如果 Worker 不存在则返回undefined。用puter.fs.write()把新代码写回file_path。Worker 会从该文件重新部署名称和 URL 不变已经在调用它的代码无需任何修改。// 查询已部署 worker 的源文件路径 const info await puter.workers.get(my-api); // 用新代码覆盖它 —— Worker 会在同一名称和同一 URL 上重新部署 await puter.fs.write(info.file_path, updatedWorkerCode);文档中的说明是覆盖后https://my-api.puter.work会继续对外提供服务但运行的已是你的更新代码现有调用方保持工作。更新后的传播时间同样受 530 秒的窗口影响。限制与注意事项不要重名重建重新以不同名字create()不会更新原 Worker只会产生一个孤立的新部署。绑定变更不迁移数据Worker 以某个 app 身份运行这个身份决定了它能访问的puter.kv命名空间和AppData目录。如果重新部署时改了sandbox设置或appNameWorker 会指向另一个命名空间旧身份下写入的数据留在原地。无沙箱的 Worker 共享状态一个 app 部署多个 Worker 且不带sandbox: true时它们都以该 app 身份运行共享同一 KV 命名空间和 AppData 目录一个 Worker 写入的 key 其他 Worker 可读可覆盖。需要相互隔离时用sandbox: true或为每个 Worker 绑定独立的appName。体积限制Worker 不能大于 10MB。延伸阅读puter.workers.create() 完整文档puter.workers.get() 文档router 对象文档WorkerInfo 对象字段Serverless Workers 概览【免费下载链接】puter The Internet Computer! Free, Open-Source, and Self-Hostable.项目地址: https://gitcode.com/GitHub_Trending/pu/puter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考