electron-forge-maker-innosetup 0.3.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,26 +13,17 @@ npm install --save-dev electron-forge-maker-innosetup
13
13
  ### 导入方式
14
14
 
15
15
  ```typescript
16
- // 命名导入(推荐)
16
+ // 命名导入
17
17
  import { MakerInnosetup } from "electron-forge-maker-innosetup";
18
18
 
19
19
  // 默认导入
20
20
  import MakerInnosetup from "electron-forge-maker-innosetup";
21
21
 
22
22
  // 导入解析器
23
- import {
24
- MakerInnosetup,
25
- InnoScriptParser,
26
- } from "electron-forge-maker-innosetup";
23
+ import { MakerInnosetup, InnoScriptParser } from "electron-forge-maker-innosetup";
27
24
  ```
28
25
 
29
- ### 🎉 方式一:使用相对路径
30
-
31
- **为什么推荐?**
32
-
33
- - **可移植** - 配置可在不同机器间共享
34
- - **团队协作** - 每个开发者的路径可以不同
35
- - **CI/CD 友好** - 自动化构建无需修改配置
26
+ ### 方式一:使用相对路径
36
27
 
37
28
  在 `forge.config.ts` 中:
38
29
 
@@ -105,9 +96,11 @@ export default config;
105
96
 
106
97
  #### 支持的路径占位符
107
98
 
108
- - `{project}` - 项目根目录
109
- - `{build}` - Electron Forge 打包输出目录
110
- - `{assets}` - 资源文件目录(默认为 `assets`)
99
+ | 占位符 | 说明 | 示例 |
100
+ | ----------- | --------------------------- | ------------------------------ |
101
+ | `{project}` | 项目根目录 | `{project}/resources/icon.ico` |
102
+ | `{build}` | Electron Forge 打包输出目录 | `{build}\\*` |
103
+ | `{assets}` | 资源目录(默认为 `assets`) | `{assets}/icons/icon.ico` |
111
104
 
112
105
  示例:
113
106
 
@@ -134,11 +127,11 @@ new MakerInnosetup({
134
127
  });
135
128
  ```
136
129
 
137
- > 📖 **详细文档:**[docs/path-resolution.md](docs/path-resolution.md) - 查看完整的路径解析指南,包括更多示例和最佳实践
130
+ 详细文档:[docs/path-resolution.md](docs/path-resolution.md)
138
131
 
139
132
  ### 方式二:使用绝对路径
140
133
 
141
- 如果您坚持使用绝对路径,可以禁用自动解析:
134
+ 如果需要使用绝对路径,可以禁用自动解析:
142
135
 
143
136
  ```typescript
144
137
  import type { ForgeConfig } from "@electron-forge/shared-types";
@@ -285,7 +278,7 @@ const config: MakerInnosetupConfig = {
285
278
 
286
279
  ### 使用自定义 Innosetup 脚本
287
280
 
288
- 如果您已有现成的 `.iss` 脚本文件:
281
+ 如果已有现成的 `.iss` 脚本文件:
289
282
 
290
283
  #### 方法 1: 直接使用 ISS 文件
291
284
 
@@ -296,7 +289,6 @@ const config: MakerInnosetupConfig = {
296
289
  scriptPath: './installer.iss'
297
290
  }
298
291
  }
299
-
300
292
  ```
301
293
 
302
294
  #### 方法 2: 解析 ISS 文件为配置
@@ -323,30 +315,30 @@ const forgeConfig: ForgeConfig = {
323
315
  };
324
316
  ```
325
317
 
326
- > 📝 **详细文档**: 查看 [iss-parser.md](./docs/iss-parser.md) 了解 ISS 解析器的完整使用方法
318
+ 详细文档:[iss-parser.md](./docs/iss-parser.md)
327
319
 
328
- > ⚠️ **重要**: 如果你的 ISS 脚本中定义了 `OutputDir`,Maker 会自动解析并在正确的目录中查找安装包。详见 [custom-script-output.md](./docs/custom-script-output.md)
320
+ 注意:如果 ISS 脚本中定义了 `OutputDir`,Maker 会自动解析并在正确的目录中查找安装包。详见 [custom-script-output.md](./docs/custom-script-output.md)
329
321
 
330
322
  ## 配置选项
331
323
 
332
324
  ### MakerInnosetupConfig
333
325
 
334
- | 选项 | 类型 | 默认值 | 说明 |
335
- | ----------------------- | ----------------- | ------------------------- | --------------------------------------- |
336
- | `config` | `InnoSetupConfig` | - | 完整的 Innosetup 配置对象 |
337
- | `scriptPath` | `string` | - | 自定义脚本路径(如果提供则忽略 config) |
338
- | `innosetupPath` | `string` | 自动查找 | Innosetup 编译器路径 |
339
- | `outputDir` | `string` | `./out/innosetup.windows` | 输出目录 |
340
- | `appName` | `string` | - | 应用程序名称 |
341
- | `appVersion` | `string` | - | 应用程序版本 |
342
- | `appPublisher` | `string` | - | 应用程序发布者 |
343
- | `appId` | `string` | - | 应用程序唯一 ID |
344
- | `licenseFile` | `string` | - | 许可证文件路径 |
345
- | `setupIconFile` | `string` | - | 安装图标文件路径 |
346
- | `createDesktopIcon` | `boolean` | `false` | 是否创建桌面图标 |
347
- | `createQuickLaunchIcon` | `boolean` | `false` | 是否创建快速启动图标 |
348
- | `gui` | `boolean` | `false` | 是否使用 GUI 模式编译 |
349
- | `isccOptions` | `string[]` | - | 额外的 ISCC 命令行参数 |
326
+ | 选项 | 类型 | 默认值 | 说明 |
327
+ | ----------------------- | ----------------- | ------------------------------------ | --------------------------------------- |
328
+ | `config` | `InnoSetupConfig` | - | 完整的 Innosetup 配置对象 |
329
+ | `scriptPath` | `string` | - | 自定义脚本路径(如果提供则忽略 config) |
330
+ | `innosetupPath` | `string` | 自动查找 | Innosetup 编译器路径 |
331
+ | `outputDir` | `string` | `{makeDir}/innosetup.windows/{arch}` | 输出目录(可选) |
332
+ | `appName` | `string` | - | 应用程序名称 |
333
+ | `appVersion` | `string` | - | 应用程序版本 |
334
+ | `appPublisher` | `string` | - | 应用程序发布者 |
335
+ | `appId` | `string` | - | 应用程序唯一 ID |
336
+ | `licenseFile` | `string` | - | 许可证文件路径 |
337
+ | `setupIconFile` | `string` | - | 安装图标文件路径 |
338
+ | `createDesktopIcon` | `boolean` | `false` | 是否创建桌面图标 |
339
+ | `createQuickLaunchIcon` | `boolean` | `false` | 是否创建快速启动图标 |
340
+ | `gui` | `boolean` | `false` | 是否使用 GUI 模式编译 |
341
+ | `isccOptions` | `string[]` | - | 额外的 ISCC 命令行参数 |
350
342
 
351
343
  ### InnoSetupConfig
352
344
 
@@ -434,12 +426,6 @@ AppVersion={#MyAppVersion}
434
426
  AppPublisher={#MyAppPublisher}
435
427
  ```
436
428
 
437
- **优势:**
438
-
439
- - 🔄 更易维护:集中管理常量,修改一处即可
440
- - 📖 更清晰:生成的 ISS 脚本更具可读性
441
- - 🔧 更灵活:支持 Inno Setup 原生的预处理器功能
442
-
443
429
  ### 添加自定义 Pascal 代码
444
430
 
445
431
  ```typescript
@@ -1,95 +1,164 @@
1
- import MakerBase, { MakerOptions } from "@electron-forge/maker-base";
2
- import { ForgePlatform } from "@electron-forge/shared-types";
3
- import { MakerInnosetupConfig } from "./types";
1
+ import MakerBase, { type MakerOptions } from "@electron-forge/maker-base";
2
+ import type { ForgePlatform } from "@electron-forge/shared-types";
3
+ import type { MakerInnosetupConfig } from "./types";
4
4
  /**
5
- * Electron Forge Maker for Innosetup
5
+ * Electron Forge Inno Setup Maker
6
+ *
7
+ * 使用 Inno Setup 编译器(ISCC.exe)创建 Windows 安装程序
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { MakerInnosetup } from 'electron-forge-maker-innosetup';
12
+ *
13
+ * // 在 forge.config.ts 中
14
+ * const config: ForgeConfig = {
15
+ * makers: [
16
+ * new MakerInnosetup({
17
+ * appName: 'My App',
18
+ * appVersion: '1.0.0',
19
+ * setupIconFile: './assets/icon.ico',
20
+ * config: {
21
+ * Setup: {
22
+ * AppName: 'My App',
23
+ * AppVersion: '1.0.0',
24
+ * DefaultDirName: '{autopf}\\MyApp',
25
+ * OutputDir: './out/installer',
26
+ * },
27
+ * },
28
+ * }),
29
+ * ],
30
+ * };
31
+ * ```
6
32
  */
7
33
  export default class MakerInnosetup extends MakerBase<MakerInnosetupConfig> {
8
- name: string;
9
- defaultPlatforms: ForgePlatform[];
34
+ readonly name = "innosetup";
35
+ readonly defaultPlatforms: ForgePlatform[];
10
36
  private scriptGenerator;
11
37
  /**
12
- * 获取项目根目录
38
+ * 从配置获取项目目录,若未配置则使用当前工作目录
13
39
  */
14
40
  private getProjectDir;
15
41
  /**
16
- * 获取构建目录
42
+ * 从配置获取构建目录
17
43
  */
18
44
  private getBuildDir;
19
45
  /**
20
- * 获取资源目录
46
+ * 从配置获取资源目录,若未配置则使用默认值 "assets"
21
47
  */
22
48
  private getAssetsDir;
23
49
  constructor(config?: MakerInnosetupConfig, platforms?: ForgePlatform[]);
24
50
  /**
25
- * 解析路径 - 支持相对路径转换为绝对路径
26
- * @param pathStr 输入路径
27
- * @param baseDir 基础目录(默认为 projectDir)
28
- * @returns 解析后的绝对路径
29
- */
30
- private resolvePath;
31
- /**
32
- * 解析配置中的路径占位符
33
- * 支持:{project}, {assets}, {build}, {app}
34
- * @param pathStr 包含占位符的路径字符串
35
- * @returns 解析后的路径
36
- */
37
- private resolvePathPlaceholders;
38
- /**
39
- * 处理配置对象中的所有路径
40
- * @param config Innosetup 配置对象
41
- * @param appDir 应用目录
42
- */
43
- private resolveConfigPaths;
44
- /**
45
- * 从 ISS 文件解析配置
46
- * @param issFilePath ISS 文件路径
47
- * @returns MakerInnosetupConfig 配置对象
51
+ * ISS 文件创建 MakerInnosetupConfig
52
+ *
53
+ * @param issFilePath - ISS 文件路径
54
+ * @returns 解析后的配置对象
48
55
  */
49
56
  static fromIssFile(issFilePath: string): MakerInnosetupConfig;
50
57
  /**
51
- * 从 ISS 脚本内容解析配置
52
- * @param issContent ISS 脚本内容
53
- * @returns MakerInnosetupConfig 配置对象
58
+ * 从 ISS 内容字符串创建 MakerInnosetupConfig
59
+ *
60
+ * @param issContent - ISS 文件内容
61
+ * @returns 解析后的配置对象
54
62
  */
55
63
  static fromIssContent(issContent: string): MakerInnosetupConfig;
56
64
  /**
57
- * 检查是否支持当前平台
65
+ * 检查当前平台是否支持
66
+ *
67
+ * @returns 当前平台是否为 Windows
58
68
  */
59
69
  isSupportedOnCurrentPlatform(): boolean;
60
70
  /**
61
- * 查找 Innosetup 编译器路径
71
+ * 创建安装程序
72
+ *
73
+ * @param options - Electron Forge Maker 选项
74
+ * @returns 生成的安装程序文件路径数组
75
+ */
76
+ make(options: MakerOptions): Promise<string[]>;
77
+ /**
78
+ * 查找 Inno Setup 编译器
79
+ *
80
+ * 按以下顺序查找:
81
+ * 1. 配置中指定的路径
82
+ * 2. 环境变量 INNOSETUP_PATH
83
+ * 3. 默认搜索路径
84
+ *
85
+ * @returns 编译器路径
86
+ * @throws CompilerNotFoundError 如果找不到编译器
62
87
  */
63
88
  private findInnosetupCompiler;
64
89
  /**
65
- * 根据架构获取架构标识符
90
+ * 解析相对于基础目录的路径
91
+ *
92
+ * @param input - 输入路径
93
+ * @param baseDir - 基础目录
94
+ * @returns 解析后的绝对路径
95
+ */
96
+ private resolvePath;
97
+ /**
98
+ * 解析字符串中的路径占位符
99
+ *
100
+ * 支持的占位符:
101
+ * - {project} - 项目根目录
102
+ * - {build} - 构建输出目录
103
+ * - {assets} - 资源文件目录
104
+ *
105
+ * @param input - 输入字符串
106
+ * @returns 替换占位符后的字符串
66
107
  */
67
- private getArchIdentifier;
108
+ private resolvePathPlaceholders;
68
109
  /**
69
- * 根据架构获取 ArchitecturesAllowed 配置
110
+ * 解析配置中的所有路径
111
+ *
112
+ * @param config - Inno Setup 配置
113
+ * @param appDir - 应用目录
70
114
  */
71
- private getArchitecturesAllowed;
115
+ private resolveConfigPaths;
72
116
  /**
73
- * 生成默认配置
117
+ * 生成默认的 Inno Setup 配置
118
+ *
119
+ * @param appDir - 应用目录
120
+ * @param appName - 应用名称
121
+ * @param appVersion - 应用版本
122
+ * @param arch - 目标架构
123
+ * @param outputDir - 输出目录
124
+ * @returns 默认配置对象
74
125
  */
75
126
  private generateDefaultConfig;
76
127
  /**
77
- * 合并用户配置和默认配置
128
+ * 合并用户配置与默认配置
129
+ *
130
+ * @param defaultConfig - 默认配置
131
+ * @param userConfig - 用户配置
132
+ * @returns 合并后的配置
78
133
  */
79
134
  private mergeConfig;
80
135
  /**
81
- * 添加任务(桌面图标、快速启动等)
136
+ * 添加桌面图标和快速启动任务
137
+ *
138
+ * @param config - Inno Setup 配置
139
+ * @param appName - 应用名称
82
140
  */
83
141
  private addTasks;
84
142
  /**
85
- * 执行 Innosetup 编译
143
+ * 编译 ISS 脚本
144
+ *
145
+ * @param scriptPath - 脚本文件路径
146
+ * @param compilerPath - 编译器路径
147
+ * @returns 编译输出
148
+ * @throws CompilationError 编译失败
149
+ * @throws CompilationTimeoutError 编译超时
86
150
  */
87
151
  private compileScript;
88
152
  /**
89
- * 制作安装包
153
+ * 查找生成的安装程序文件
154
+ *
155
+ * @param searchDir - 搜索目录
156
+ * @param appName - 应用名称
157
+ * @param appVersion - 应用版本
158
+ * @param archId - 架构标识
159
+ * @returns 安装程序文件路径数组
160
+ * @throws InstallerNotFoundError 如果找不到安装程序
90
161
  */
91
- make(options: MakerOptions): Promise<string[]>;
162
+ private findInstaller;
92
163
  }
93
- export * from "./types";
94
- export { InnoScriptGenerator } from "./generator";
95
- export { InnoScriptParser } from "./parser";
164
+ //# sourceMappingURL=MakerInnosetup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MakerInnosetup.d.ts","sourceRoot":"","sources":["../src/MakerInnosetup.ts"],"names":[],"mappings":"AAGA,OAAO,SAAS,EAAE,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EACV,oBAAoB,EAMrB,MAAM,SAAS,CAAC;AAgCjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,SAAS,CAAC,oBAAoB,CAAC;IACzE,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,aAAa,EAAE,CAAa;IAEvD,OAAO,CAAC,eAAe,CAAsB;IAE7C;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,YAAY;gBAIR,MAAM,GAAE,oBAAyB,EAAE,SAAS,CAAC,EAAE,aAAa,EAAE;IAU1E;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB;IAQ7D;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB;IAK/D;;;;OAIG;IACH,4BAA4B,IAAI,OAAO;IAIvC;;;;;OAKG;IACG,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmGpD;;;;;;;;;;OAUG;IACH,OAAO,CAAC,qBAAqB;IA6B7B;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IAmBnB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,uBAAuB;IAqB/B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAwE1B;;;;;;;;;OASG;IACH,OAAO,CAAC,qBAAqB;IA2D7B;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IA8BnB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAkDhB;;;;;;;;OAQG;YACW,aAAa;IA+E3B;;;;;;;;;OASG;IACH,OAAO,CAAC,aAAa;CAiDtB"}