Skip to Content
文档@utoo/webAPI 参考

API 参考

new UtooProject(options)

创建一个新的项目实例。

选项

选项类型描述
cwdstring必填。 作为项目根目录在真实文件系统中的绝对路径(例如 /my-app)。
workerUrlstring必填。 Project 实例核心逻辑实际运行的 Worker 线程 URL。主线程的 Project 对象是一个代理,将任务委托给该 Worker。
threadWorkerUrlstring必填。 用于处理打包和编译等 CPU 密集型任务的独立 Worker 线程 URL。
loaderWorkerUrlstring用于处理 webpack loader 的独立 Worker 线程 URL。
wasmUrlstringWASM 二进制文件的 URL。默认使用捆绑的二进制文件。
serviceWorkerobject用于预览功能的 Service Worker 配置。参见下方子选项。
logFilterstring追踪日志的过滤字符串。
loadersImportMapobject用于配置 Webpack loader 导入的映射表。键为 loader 名称,值为 UMD/CommonJS 模块 URL 或内容字符串。

serviceWorker 子选项:

选项类型描述
urlstring必填。 Service Worker 脚本的 URL。
scopestring必填。 Service Worker 拦截请求的 URL 范围。
targetDirToCwdstring从目标目录到项目根目录的路径。

文件系统方法

这些方法是异步的,模拟 Node.js fs API。

project.writeFile(path, content, encoding?)

将内容写入真实文件系统中的文件。如果文件不存在,将会创建。

参数类型描述
pathstring文件的绝对路径(例如 /src/index.js)。
contentstring | Uint8Array要写入的内容。
encodingstring编码格式(例如 'utf8')。可选。

project.readFile(path, encoding?)

读取文件的内容。

参数类型描述
pathstring文件的路径。
encodingstring文件的编码格式(例如 'utf8')。如果未提供,返回 Uint8Array

返回值: Promise<string>(带编码)或 Promise<Uint8Array>(不带编码)。

project.readdir(path, options?)

读取目录的内容。

参数类型描述
pathstring目录的路径。
options.recursiveboolean如果为 true,递归读取。

返回值: Promise<Dirent[]> — 一个 Dirent 对象数组,包含 nameisDirectory()isFile() 方法。

project.mkdir(path, options?)

创建新目录。

参数类型描述
pathstring要创建的目录路径。
options.recursiveboolean如果为 true,按需创建父目录。

project.rm(path, options?)

删除文件或目录。

参数类型描述
pathstring要删除的文件或目录路径。
options.recursiveboolean如果为 true,执行递归删除。

project.rmdir(path, options?)

删除目录。

参数类型描述
pathstring要删除的目录路径。
options.recursiveboolean如果为 true,递归删除。

project.copyFile(src, dst)

从源路径复制文件到目标路径。

参数类型描述
srcstring源文件路径。
dststring目标文件路径。

project.stat(path)

获取文件/目录的状态信息。

参数类型描述
pathstring文件或目录的路径。

返回值: Promise<Stats> — Stats 对象,包含 sizeisDirectory()isFile()、时间戳(atimemtimectimebirthtime)等。


依赖管理

project.deps(options?)

从项目的 package.json 解析依赖并生成 lock 文件字符串。这使得在浏览器中直接进行依赖解析成为可能,无需预先存在的 package-lock.json

选项类型描述
registrystringnpm registry URL。默认值:https://registry.npmmirror.com
concurrencynumber最大并发网络请求数。默认值:20

返回值: Promise<string> — 表示已解析的依赖 lock 文件的 JSON 字符串,兼容 package-lock.json 格式。

示例:

app.ts
// 使用默认 registry (npmmirror) const lockFile = await project.deps(); // 使用官方 npm registry const lockFile = await project.deps({ registry: "https://registry.npmjs.org" }); // 使用私有 registry 并自定义并发数 const lockFile = await project.deps({ registry: "https://npm.mycompany.com", concurrency: 10 });

project.install(packageLockJsonString, options?)

根据 lock 文件字符串填充 node_modules 目录。

参数类型描述
packageLockJsonStringstring依赖 lock 文件的 JSON 字符串(来自 deps()package-lock.json 文件)。
options.maxConcurrentDownloadsnumber最大并发包下载数。
options.omitstring[]要忽略的依赖类型。可选值:"dev""optional"

示例:

app.ts
// 基本安装 await project.install(lockFile); // 带并发限制的安装 await project.install(lockFile, { maxConcurrentDownloads: 10 }); // 不安装开发依赖(生产模式) await project.install(lockFile, { omit: ["dev"] });

构建与开发

project.build()

在线程 Worker 中触发构建过程。它从项目根目录的 utoopack.json 读取构建配置,并基于该配置运行打包器。

返回值: Promise<BuildOutput> — 包含 issues 数组的对象,其中包含任何构建警告或错误。

app.ts
const result = await project.build(); if (result.issues.length > 0) { console.warn("构建完成,但存在问题:", result.issues); }

project.dev(onUpdate?)

启动带文件监听的开发模式。当文件变更时自动触发增量重建。

参数类型描述
onUpdatefunction每次重建完成时调用的回调函数,接收 BuildOutput。可选。
app.ts
project.dev((result) => { console.log("重建完成,问题:", result.issues); });

project.hmrSubscribe(identifier, callback)

订阅特定标识符的 HMR(热模块替换)事件。

参数类型描述
identifierstring要订阅的模块标识符。
callbackfunction当模块发生变更时,接收更新指令调用。

project.updateInfoSubscribe(aggregationMs, callback)

订阅编译生命周期事件(开始/结束)。

参数类型描述
aggregationMsnumber聚合时间间隔,单位为毫秒。
callbackfunction在编译事件发生时接收 UpdateMessage 调用。

预览功能

project.installServiceWorker()

注册并激活构造函数中定义的 Service Worker。这对于预览功能至关重要。


类型定义

BuildOutput

interface BuildOutput { issues: Issue[]; }

InstallOptions

interface InstallOptions { maxConcurrentDownloads?: number; omit?: ("dev" | "optional")[]; }

DepsOptions

interface DepsOptions { registry?: string; concurrency?: number; }

Dirent

class Dirent { name: string; isDirectory(): boolean; isFile(): boolean; }

Stats

class Stats { size: number; isDirectory(): boolean; isFile(): boolean; atime: Date; mtime: Date; ctime: Date; birthtime: Date; }
Last updated on