Skip to content

refactor(installer): split install scripts into build sources#108

Open
plusls wants to merge 1 commit into
0Chencc:mainfrom
plusls:main
Open

refactor(installer): split install scripts into build sources#108
plusls wants to merge 1 commit into
0Chencc:mainfrom
plusls:main

Conversation

@plusls

@plusls plusls commented Jun 12, 2026

Copy link
Copy Markdown

refactor(installer): 将安装脚本拆分为构建源文件

概述

将单体式的 install.sh / install.ps1 拆分为 src/ 下的模块化构建源文件,并新增 build.js 负责把它们渲染成最终的安装脚本。

产物零变化build.js 生成的 install.sh / install.ps1 与仓库中已提交的版本逐字节一致(git diff 为空),不改变任何安装行为。

动机

当前的安装脚本存在明显的维护痛点:

  • install.sh(约 1500 行)和 install.ps1(约 1550 行)各自是一个大文件,其中通过 heredoc 内嵌了大量 JS(extractor、patcher、wrapper、repatcher、post-processor 等)。
  • 这些内嵌 JS 混在 shell 主体里,难以单独阅读、编辑和 code review。
  • Unix 与 Windows 两份脚本里的同名逻辑(如 patcher)长期各写一份,容易产生漂移;上游一旦改了一处,另一处常常漏改。

把内嵌逻辑抽成独立源文件后,可以按文件定位、按平台对照,降低同步成本。

改动内容

纯新增,不修改任何已提交文件(14 个新文件,2794 行):

build.js                      构建脚本:读取 src/,渲染模板,输出 install.sh / install.ps1
src/
├── generic/                  两平台共享的源文件
│   ├── extractor.js          (对应 extract-natives.mjs)
│   ├── features.json
├── unix/                     install.sh 专用
│   ├── patcher.js
│   ├── wrapper.js
│   ├── repatcher.js
│   └── post-processor.js
├── windows/                  install.ps1 专用
│   ├── patcher.js
│   ├── wrapper.js
│   ├── repatcher.js
│   ├── post-processor.js
│   └── npm-fetch.js
└── template/                 安装脚本模板(把内嵌段替换为占位符)
    ├── install.sh
    └── install.ps1

构建流程

  1. src/template/install.shinstall.ps1 把原本的 heredoc 正文替换成 {{CONTENT:<name>}} 占位符。
  2. build.jsPLACEHOLDER_MAP 把每个占位符映射到对应源文件,查找顺序为 <platform>/ -> generic/(平台目录覆盖通用目录的同名文件)。
  3. 渲染时用函数形式的 replaceAll 替换,规避 $$ / $& / $1 等特殊模式导致的替换串损坏。
  4. 若模板里残留未解析的占位符,build.js 直接报错退出,避免生成残缺脚本。

运行方式:

node build.js

验证

  • node build.js 生成后,git diffinstall.sh / install.ps1 为空 —— 产物与现状逐字节一致。

兼容性

  • 安装行为、用户接口、最终产物均不变;现有用户无感知。
  • 之后维护时,优先编辑 src/ 下的源文件并重新 node build.js,而不是直接改 install.sh / install.ps1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant