tamperjs/
├── src/
│ ├── index.ts # 主导出文件
│ ├── converter.ts # 主转换器类
│ ├── metadata.ts # 元数据解析器
│ ├── gm-polyfill.ts # GM API polyfill 生成器
│ └── test.ts # 基础测试
├── examples/
│ ├── page-counter.user.js # 示例1: 简单脚本
│ ├── usage.ts # 使用示例
│ └── electron-integration.ts # Electron集成示例
├── dist/ # 编译输出(构建后)
├── package.json
├── tsconfig.json
├── README.md
└── LICENSE
npm installnpm run buildnpm run dev这会启用 TypeScript 编译器的 watch 模式。
npm test负责:
- 解析 userscript 元数据块(@name, @match 等)
- 验证必需字段
- 返回结构化的
UserscriptMetadata对象
关键方法:
parse(scriptContent: string): UserscriptMetadata- 从脚本内容解析元数据extractMetadataBlock(content: string): string- 提取元数据区块
负责:
- 为各种 GM API 生成 JavaScript polyfill 代码
- 处理数据持久化(使用 JSON 文件)
- 集成 node-fetch 用于 HTTP 请求
- 集成 Electron Notification 和 shell APIs
支持的 API:
GM_getValue/setValue/deleteValue/listValues- 本地存储GM_xmlhttpRequest- 网络请求GM_download- 文件下载GM_notification- 桌面通知GM_openInTab- 打开链接unsafeWindow- 全局作用域
负责:
- 整合其他模块
- 转换完整脚本
- 生成最终代码
- 支持多种输出格式
关键方法:
convert(scriptContent: string): ConvertResultconvertFile(filePath: string): ConvertResultsave(result: ConvertResult, outputPath: string): void
导出所有公共的类和接口。
- 在
gm-polyfill.ts中找到generatePolyfill()方法 - 添加新的 case:
case 'GM_newAPI':
polyfills.push(this.generateGM_newAPI());
break;- 实现生成函数:
private generateGM_newAPI(): string {
return `
function GM_newAPI(arg) {
// Implementation
}
`;
}- 在
converter.ts中的generateCommonJSCode()旁边添加新方法 - 在
convert()方法中检查format选项
项目包含基础的功能测试。要添加更多测试:
- 编辑
src/test.ts - 添加测试用例
- 运行
npm test
- 更新
package.json中的版本号 - 确保所有测试通过
- 更新 README 和文档
- 构建项目:
npm run build
# 首次登录
npm login
# 发布
npm publish
# 发布到特定标签
npm publish --tag betaconst converter = new UserscriptConverter();
const result = converter.convert(scriptContent);
console.log('Metadata:', result.metadata);
console.log('Generated code:', result.code);const polyfill = new GMPolyfill({ dataDir: '/tmp/test' });
const code = polyfill.generatePolyfill(['GM_getValue', 'GM_xmlhttpRequest']);
console.log(code);- 缓存元数据解析结果 - 如果频繁转换同一脚本
- 流式处理大文件 - 对于超大脚本,考虑流式处理
- 限制 polyfill 生成 - 只生成所需 API 的 polyfill
- 未验证的脚本可能包含恶意代码
- 建议在沙箱环境中执行
- 限制文件系统访问权限
- 以最小权限原则运行应用
- Fork 项目
- 创建功能分支 (
git checkout -b feature/NewFeature) - 提交更改 (
git commit -m 'Add NewFeature') - 推送到分支 (
git push origin feature/NewFeature) - 创建 Pull Request
MIT License - 详见 LICENSE 文件