Open codec-xyz opened 3 months ago
@codec-xyz I have found the same inconsistent behavior and to be honest I just tried every which combination until something was working for us (but feels very fragile and certainly not ideal long term). For us we went with using forge.config.cts
and had to set module: commonjs
which is not what we want overall but works for us right now. As you can see by my comments in the screenshot below, we also could not get ESNext
to work which is what led us to settling on commonjs
.
I believe it is related to:
@codec-xyz I am just glad I am not crazy and that you came to the same conclusion as me! I spent way too many hours (days) trying to figure this out and the imposter syndrome was starting to become real strong for me! haha
I also encountered this problem. When I wanted to migrate to ESM according to the latest version of electron-store, I found that forge.config.ts did not support ESM.
Using the template shared in the issue below worked for me initially, But later I needed to change the preload script output to cjs and moduleResolution to Node because some issues started showing up, Not sure if it was a problem on my end but with those changes everything seem to work fine.
https://github.com/electron/forge/issues/3502#issuecomment-2211449451
Having the same issue.
This issue should be related to rechoir
dependency that currently doesn't support ESM (https://github.com/gulpjs/rechoir/issues/43).
Electron forge v7.5.0 add support with ESM but, for this issue, nothing is changed.
yarn init -y
yarn set version berry
yarn add -D @electron-forge/cli @electron-forge/plugin-vite electron ts-node typescript vite
(note ts-node
dependency related to #3609)forge.config.ts
fileyarn electron-forge start
Output:
✔ Checking your system
✔ Locating application
✖ Loading configuration
›
1. Must use import to load ES Module: C:\<PROJECT_PATH>\forge.config.ts
require() of ES modules is not supported.
require() of C:\<PROJECT_PATH>\forge.config.ts from
C:\Users\<USER>\AppData\Local\Yarn\Berry\cache\@electron-forge-core-patch-50fd2dab5c-10c0.zip\node_modules\@electron-forge\core\helper\dynamic-import.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:\<PROJECT_PATH>\package.json.
2. Unknown file extension ".ts" for C:\<PROJECT_PATH>\forge.config.ts
◼ Preparing native dependencies
◼ Running generateAssets hook
Failed to load: C:\<PROJECT_PATH>\forge.config.ts
An unhandled rejection has occurred inside Forge:
Error:
1. Must use import to load ES Module: C:\<PROJECT_PATH>\forge.config.ts
require() of ES modules is not supported.
require() of C:\<PROJECT_PATH>\forge.config.ts from C:\Users\<USER>\AppData\Local\Yarn\Berry\cache\@electron-forge-core-patch-50fd2dab5c-10c0.zip\node_modules\@electron-forge\core\helper\dynamic-import.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:\<PROJECT_PATH>\package.json.
2. Unknown file extension ".ts" for C:\<PROJECT_PATH>\forge.config.ts
Maybe rechoir
dependency can be replaced with another dependency (e.g. tsx
https://github.com/electron/forge/issues/3676#issuecomment-2365217539) that support ESM or we can contribute to https://github.com/gulpjs/rechoir/issues/43.
FYI @erickzhao @MarshallOfSound
Related/duplicated/same issues: #3230 #3502 #3608
I found that rechoir
supports esbuild
. You can remove ts-node
from your devDependencies and replace it with esbuild-register
and then forge.config.ts can be loaded successfully.
With Yarn:
yarn remove ts-node
yarn add --dev esbuild-register
I found that
rechoir
supportsesbuild
. You can removets-node
from your devDependencies and replace it withesbuild-register
and then forge.config.ts can be loaded successfully.With Yarn:
yarn remove ts-node yarn add --dev esbuild-register
Thanks it works (youn need to install also esbuild
because it's a peer dependencies of esbuild-register
).
I updated title of #3609 and added a comment (https://github.com/electron/forge/issues/3609#issuecomment-2448470724).
Pre-flight checklist
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",
topackage.json
Run
npm run start
This result in this error...
However changing
forge.config.ts
toforge.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 aforge.config.cts
but it does not work with"module": "ESNext"
(or other ES module options) in thetsconfig.json
which gives the error...Additional information
No response