OneScript

技术细节

为了你更好的使用 OneScript,我们提供了一些技术细节的说明。

运行时

脚本由 iOS 系统自带的 WebView 执行,并提供面向 Node.js 的兼容层。Node.js API 的支持范围、限制与各模块说明见 Node.js 兼容性。

每次运行都会创建独立的 WebView 虚拟机。项目先由 esbuild 打包,再交给运行时执行:

组件职责
WebView执行用户脚本
esbuild将项目打包为 JavaScript
pnpm依赖管理

编译

由嵌入的 esbuild 将项目打包为 ESM JavaScript(输出到 dist/index.js),再交给 WebView 执行。打包时会把 Node.js 内置模块映射到兼容层,并支持 TypeScript、JSX,以及图片、字体、Wasm 等静态资源。

运行期动态计算的 import() 无法打包,构建会失败。

pnpm

安装、添加或移除依赖时,内部通过嵌入的 pnpm 执行,并固定以下选项:

选项说明原因
--config.ignore-scripts=true不执行依赖包的 lifecycle scripts(如 preinstall / postinstall)iOS 禁止创建子进程;pnpm 执行 lifecycle scripts 依赖 child_process,无法运行
--config.ignore-pnpmfile=true不执行 .pnpmfile.cjs同样可能执行任意脚本或拉起子进程
--config.node-linker=isolated使用 pnpm 隔离的 node_modules 布局避免扁平化安装带来的幽灵依赖
--config.package-import-method=hardlink以硬链接方式导入包内容适配 App 沙盒文件系统

此外:git 依赖不可用;原生模块(.node / binding.gyp)不可用;依赖 lifecycle scripts、原生可执行文件或包内 CLI(bin)的包,在 App 内无法运行。

How is this guide?

最后更新于

本页目录