-
-
Notifications
You must be signed in to change notification settings - Fork 611
Description
Pre-flight checklist
- I have read the contribution documentation for this project.
- I agree to follow the code of conduct that this project uses.
- I have searched the issue tracker for a bug that matches the one I want to file, without success.
Electron Forge version
7.4.0
Electron version
v31.3.1
Operating system
Windows 11
Last known working Electron Forge version
No response
Expected behavior
To not get an error when using a Typescript ESM forge.config.ts.
Actual behavior
Error are listed under the steps to reproduce section.
Steps to reproduce
Run npm init electron-app@7.4.0 my-new-app -- --template=vite-typescript
Add "type": "module", to package.json
Note
To make other parts of the template work with "type": "module"
In vite.main.config change formats: ['cjs'], to formats: ['es'],
In vite.preload.config change format: 'cjs', to format: 'es',
In src/main.ts change
if (require('electron-squirrel-startup')) {
app.quit();
}
↓↓↓
import electronSquirrelStartup from 'electron-squirrel-startup';
if(electronSquirrelStartup) app.quit();
and replace __dirname with import.meta.dirname
You can also npm install --save-dev @types/electron-squirrel-startup and in tsconfig.json change "module": "commonjs", → "module": "ESNext", to make typescript happy.
Run npm run start
This result in this error...
› Must use import to load ES Module: C:\path\my-new-app\forge.config.ts
require() of ES modules is not supported.
require() of C:\path\my-new-app\forge.config.ts from C:\path\my-new-app\node_modules\@electron-forge\core\dist\util\forge-config.js is an ES
module file as it is a .ts file whose nearest parent package.json contains "type": "module" which defines all .ts
files in that package scope as ES modules.
Instead change the requiring code to use import(), or remove "type": "module" from
C:\path\my-new-app\package.json.
An unhandled rejection has occurred inside Forge:
Error: Must use import to load ES Module: C:\path\my-new-app\forge.config.ts
require() of ES modules is not supported.
require() of C:\path\my-new-app\forge.config.ts from C:\path\my-new-app\node_modules\@electron-forge\core\dist\util\forge-config.js is an ES module file as it is a .ts file whose nearest parent package.json contains "type": "module" which defines all .ts files in that package scope as ES modules.
Instead change the requiring code to use import(), or remove "type": "module" from C:\path\my-new-app\package.json.
However changing forge.config.ts to forge.config.js (and removing the type definitions) makes the error go away. So seemingly JS ES modules work but TS ES modules do not work.
Another option is changing the forge.config.ts to a forge.config.cts but it does not work with "module": "ESNext" (or other ES module options) in the tsconfig.json which gives the error...
› Cannot use import statement outside a module
Failed to load: C:\path\my-new-app\forge.config.cts
An unhandled rejection has occurred inside Forge:
SyntaxError: Cannot use import statement outside a module
Additional information
No response