跳转到内容

标准开发流程

我们推荐使用 package.json 作为元数据的“单一事实来源”,并配合构建脚本来自动生成文件头。

Terminal window
mkdir my-script && cd my-script
pnpm init
pnpm add -D typescript @types/node esbuild playwright
pnpm tsc --init

6.2 步骤二: 编写脚本 (src/index.ts)

Section titled “6.2 步骤二: 编写脚本 (src/index.ts)”
import { BrowserContext, Page } from 'playwright';
// ... AnbaoContext 类型定义 ...
export interface RunOptions {
browser: BrowserContext;
page: Page;
context: AnbaoContext;
}
export async function run({ browser, page, context }: RunOptions) {
// ... 业务逻辑 ...
}

6.3 步骤三: 定义元数据 (package.json)

Section titled “6.3 步骤三: 定义元数据 (package.json)”

package.json 中定义所有脚本元数据。这是推荐的最佳实践。

{
"name": "com.bilibili.video-uploader",
"displayName": "Bilibili 视频发布助手",
"version": "1.0.1",
"author": "Anbao Team",
"description": "自动将本地视频发布到 Bilibili 平台。",
"tags": ["bilibili", "video", "uploader", "automation"],
"keywords": ["bilibili"]
}

6.4 步骤四: 创建构建脚本 (build.js)

Section titled “6.4 步骤四: 创建构建脚本 (build.js)”

创建一个 build.js 文件,它将读取 package.jsonschema.json (如果存在) 来动态生成元数据块。

const fs = require('fs').promises;
const { execSync } = require('child_process');
async function build() {
const pkg = JSON.parse(await fs.readFile('package.json', 'utf-8'));
const schema = await fs.readFile('schema.json', 'utf-8').catch(() => '');
const banner = `// ==AnbaoScript==
// @id ${pkg.name}
// @name ${pkg.displayName || pkg.name}
// @version ${pkg.version}
// @author ${pkg.author}
// @description ${pkg.description || ''}
// @tags ${(pkg.tags || []).join(', ')}
// @keywords ${(pkg.keywords || []).join(', ')}
// @engine playwright
// @schema
${schema.trim().replace(/^/gm, '// ')}
// ==/AnbaoScript==`;
execSync(
`esbuild src/index.ts --bundle --platform=node --outfile=dist/bundle.js --banner:js="${banner.replace(/\n/g, '\\n')}"`,
{ stdio: 'inherit' }
);
}
build().catch(console.error);

package.json 中添加 build 脚本:

"scripts": {
"build": "node build.js"
}

然后运行 pnpm build

将最终生成的 dist/bundle.js 文件交付给 Anbao Agent 平台或上传到脚本市场仓库。