ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Insomnia 插件沙箱中 require 报 Module not permitted by manifest 怎么办

Insomnia 插件沙箱中 require 报 Module not permitted by manifest 怎么办 Insomnia 插件沙箱中 require 报 Module not permitted by manifest 怎么办【免费下载链接】insomniaThe open-source, cross-platform API client for GraphQL, REST, WebSockets, SSE and gRPC. With Cloud, Local and Git storage.项目地址: https://gitcode.com/GitHub_Trending/in/insomnia开发 Insomnia 的 template tag 插件时如果你在 Preferences → Scripting 中打开了Run template tags in sandbox (experimental)插件的run()就会在隔离的 QuickJS 沙箱内执行。此时对未授权的模块调用require(X)例如require(fs)、require(events)或任意 npm 包沙箱会抛出Module X not permitted by manifest。解决办法是在插件自己的package.json中声明insomnia.permissions.modules把该模块名加进授权清单然后重新加载插件。先确认错误属于哪一种沙箱对require()采用默认拒绝default-deny模型解析分两阶段见 module-registry.ts模块名不在插件的授权集合内 → 抛Module X not permitted by manifest模块名已授权、但 Insomnia 的沙箱注册表里没有提供它 → 抛Module X not available in sandbox。这两种错误的处理方式完全不同先分清再动手not permitted by manifest说明模块在沙箱注册表里存在只是你的插件没声明。按本文方法在package.json加权限即可解决。not available in sandbox说明你声明了一个 Insomnia 尚未打包进注册表的模块。这个错误不能靠改 manifest 解决文档给出的路径是向 Insomnia 申请把它加入注册表PERMISSIONS.md。哪些模块可以声明沙箱注册表当前提供的模块见 module-registry.ts 中的SANDBOX_MODULES模块类型是否必须声明path别名node:path内置安全等价实现否基线模块无需 manifestcrypto别名node:crypto宿主同步函数支撑否基线模块无需 manifestevents别名node:events纯 JS 重新实现是需声明modules: [events]uuidInsomnia 打包 锁版本的认证 npm 库是ajvInsomnia 打包 锁版本的认证 npm 库是注意两点边界uuid、ajv这类认证 npm 库由 Insomnia 独立打包插件自带的node_modules永远不会被查询。沙箱里require(uuid)只会解析到 Insomnia 的注册表副本插件无法用自己的同名实现替代它。每个沙箱模块都是 Insomnia 提供的“认证安全等价实现”纯 JS 重写或宿主 shim不是原始 Node 内置模块。在 package.json 中声明 permissions报错的直接原因是 manifest 里没有该模块。修改插件的package.json在insomnia字段下加入permissions.modules数组{ name: your-plugin, version: 1.0.0, main: index.js, insomnia: { name: your-plugin, permissions: { modules: [events], // require(events) 将被允许 capabilities: [] // 仅 context.* 宿主能力需要require 问题与它无关 } } }上表中的模块名就是可写入modules数组的值node:前缀别名在解析时会被规范化为规范名例如node:events→events。如果你完全没有permissions块即无 manifest 的插件沙箱在拒绝非基线模块时会弹出一个一次性迁移通知明确指出要补哪条授权。通知内容为文档示例来自 templating-worker-database.ts 中的 toast 文案Plugin needs a permissions manifest插件名 tried to require 模块名 but has no valid permissions manifest. Add insomnia.permissions.modules: [模块名] to its package.json to run it under the template-tag sandbox.同一会话内同一插件同一模块只提示一次一个插件缺两个不同授权会分别提示。按提示把对应模块名加进insomnia.permissions.modules然后重新加载插件即可。另外注意 manifest 写法modules必须是数组。形如modules: events非数组的畸形声明不会生效插件会降级到基线授权只有path、crypto并在 Preferences → Plugins 的插件卡片上显示警告——插件本身仍然加载。验证修复是否生效仓库自带一个手动测试插件 examples/insomnia-plugin-sandbox-demo它的 package.json 声明了modules: [events, uuid]和capabilities: [storage]可直接用来对照验证。验证步骤来自 README.md在仓库根目录运行应用npm run dev开发模式。Preferences → Plugins →Reveal Plugins Folder把insomnia-plugin-sandbox-demo文件夹复制进去。点击Reload Plugins修改自己插件的 manifest 后同样要重新加载才生效。Preferences → Scripting → 打开Run template tags in sandbox (experimental)。在任意请求的 URL 或 header 中插入模板标签例如{% eventsprobe %}观察预览。判断标准均为文档给出的示例输出不是固定预期声明了events授权的插件{% eventsprobe %}渲染events-ok未声明的插件执行同样代码渲染Module events not permitted by manifest基线模块无需声明{% requireprobe path %}渲染a/b越界模块仍然被拒绝{% requireprobe fs %}渲染Module fs not permitted by manifest。这些预期在冒烟测试 sandbox-template-tags.test.ts 中也被逐条断言可作为行为核对依据。最后到 Preferences → Plugins 展开你的插件详情应能看到它声明的权限列表如modules: events畸形 manifest 的插件会在卡片上带警告标记。两个容易踩坑的写法问题在run()里 require 认证库而不是顶层。Insomnia 发现插件标签时是在宿主进程加载入口文件而uuid/ajv只存在于沙箱注册表中。因此顶层require(uuid)在宿主侧就解析失败必须放到标签的run()内标签在沙箱执行时才能解析。相对路径的require(./util)不受此限制顶层可用多文件插件的相对 require 从插件目录内解析只加载.js/.json文件node_modules和点目录被跳过。别指望关闭沙箱来“绕过”。这个错误只出现在沙箱路径下关闭沙箱开关后标签走旧的宿主进程路径。但权限 manifest 是沙箱路径的正式解决方式文档未提供“禁用沙箱模块门控”的开关不要依赖降级到非沙箱路径来规避。边界说明该错误只涉及 template tag 插件。Bundle第一方插件受信任直接获得全部模块与能力不会遇到此报错。credentials能力保留给第一方 bundle 插件社区 template tag 插件即使声明也拿不到——它与require报错无关但声明 manifest 时不要指望能加上它。如果模块名已正确声明却报的是not available in sandbox而非not permitted说明该模块尚不在注册表manifest 无法解决只能等 Insomnia 将其纳入注册表。【免费下载链接】insomniaThe open-source, cross-platform API client for GraphQL, REST, WebSockets, SSE and gRPC. With Cloud, Local and Git storage.项目地址: https://gitcode.com/GitHub_Trending/in/insomnia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表