From f752a58d350212207ab358aaa2c9cc5cccfa9d78 Mon Sep 17 00:00:00 2001 From: Erick Zhao Date: Wed, 17 Jul 2024 11:55:41 -0700 Subject: [PATCH] re-land --- SUMMARY.md | 1 + config/typescript-configuration.md | 87 ++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 config/typescript-configuration.md diff --git a/SUMMARY.md b/SUMMARY.md index e3d8eb3..d0fa39e 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -12,6 +12,7 @@ ## Configuration * [Overview](config/configuration.md) +* [TypeScript Configuration](config/typescript-configuration.md) * [Plugins](config/plugins/README.md) * [Webpack Plugin](config/plugins/webpack.md) * [Vite Plugin](config/plugins/vite.md) diff --git a/config/typescript-configuration.md b/config/typescript-configuration.md new file mode 100644 index 0000000..11f5fcc --- /dev/null +++ b/config/typescript-configuration.md @@ -0,0 +1,87 @@ +--- +description: Set up your Forge configuration to use TypeScript +--- + +# TypeScript Configuration + +By default, Electron Forge's [configuration](./configuration.md) only supports JavaScript and JSON files as inputs. + +Forge also supports configuration files in other languages that transpile down to JavaScript as long as a transpiler is installed locally in your project's `devDependencies`. These configuration files follow the same format as `forge.config.js`. + +## Installation + +For TypeScript, we recommend installing [`ts-node`](https://github.com/TypeStrong/ts-node). Upon installation, it will automatically be registered as a module loader for `.ts` files. + +```bash +npm install --save-dev ts-node +``` + +## Configuration file + +Once you have `ts-node` installed, Forge will be able to load a `forge.config.ts` file from your project's root directory. + +This config format is functionally identical to `forge.config.js`. + +{% code title="forge.config.ts" %} +```typescript +import type { ForgeConfig } from '@electron-forge/shared-types'; + +const config: ForgeConfig = { + packagerConfig: { + asar: true, + osxSign: {} + } + makers: [ + { + name: '@electron-forge/maker-squirrel', + platforms: ['win32'], + config: { + authors: "Electron contributors" + } + }, + { + name: '@electron-forge/maker-zip', + platforms: ['darwin'], + config: {} + }, + { + name: '@electron-forge/maker-deb', + platforms: ['linux'], + config: {} + }, + ] +}; + +export default config; +``` +{% endcode %} + +## Using module constructor syntax + +When using a TypeScript configuration file, you may want to have stronger type validation around the individual options for each Maker, Publisher, or Plugin. + +To achieve this, you can import each module's constructor, which accepts its config object as the first parameter and the list of target platforms as the second parameter. + +For example, the below configuration is equivalent to the `makers` array from the example above: + +{% code title="forge.config.ts" %} +```typescript +import type { ForgeConfig } from '@electron-forge/shared-types'; +import { MakerDeb } from '@electron-forge/maker-deb'; +import { MakerSquirrel } from '@electron-forge/maker-squirrel'; +import { MakerZIP } from '@electron-forge/maker-zip'; + +const config: ForgeConfig = { + makers: [ + new MakerSquirrel({ + authors: 'Electron contributors' + }, ['win32']), + new MakerZIP({}, ['darwin']), + new MakerDeb({}, ['linux']), + new MakerRpm({}, ['linux']), + ] +}; + +export default config; +``` +{% endcode %} \ No newline at end of file