electron / forge

:electron: A complete tool for building and publishing Electron applications
https://electronforge.io
MIT License
6.33k stars 493 forks source link

[PnP] Cannot find the package "electron" #3611

Open rtritto opened 1 month ago

rtritto commented 1 month ago

Pre-flight checklist

Electron Forge version

7.4.0

Electron version

30.1.0

Vite version

5.0.12

Operating system

Windows 11

Last known working Electron Forge version

No response

Expected behavior

No error

Actual behavior

✔ Checking your system
✔ Locating application
✔ Loading configuration
✔ Preparing native dependencies [0.4s]
✔ Running generateAssets hook

The CJS build of Vite's Node API is deprecated. See https://vitejs.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.
✔ [plugin-vite] Launching dev servers for renderer process code [1s]
✔ [plugin-vite] Compiling main process code [2s]

➜  Local:   http://localhost:5173/
  ➜  Network: use --host to expose
vite v5.2.12 building for development...

watching for file changes...
vite v5.2.12 building for development...

watching for file changes...

build started...

build started...
transforming (1) src\preload.ts
transforming (1) src\main.ts
✓ 1 modules transformed.
Generated an empty chunk: "preload".
✓ 1 modules transformed.
rendering chunks (1)...
rendering chunks (1)...
computing gzip size (0)...
computing gzip size (1)...
.vite/build/preload.mjs  0.05 kB │ gzip: 0.07 kB │ map: 0.09 kB
built in 85ms.
computing gzip size (0)...
computing gzip size (1)...
.vite/build/main.js  0.90 kB │ gzip: 0.47 kB │ map: 2.53 kB
built in 88ms.

An unhandled rejection has occurred inside Forge:
Error: Cannot find the package "electron". Perhaps you need to run "yarn install" in "C:\<PROJECT_PATH>"?
at getElectronPackageJSONPath (C:\Users\<USER>\AppData\Local\Yarn\Berry\cache\@electron-forge-core-utils-npm-7.4.0-881d5c9e73-10c0.zip\node_modules\@electron-forge\core-utils\src\electron-version.ts:69:11)
    at async getElectronModulePath (C:\Users\<USER>\AppData\Local\Yarn\Berry\cache\@electron-forge-core-utils-npm-7.4.0-881d5c9e73-10c0.zip\node_modules\@electron-forge\core-utils\src\electron-version.ts:82:27)
    at async locateElectronExecutable (C:\Users\<USER>\AppData\Local\Yarn\Berry\cache\@electron-forge-core-npm-7.4.0-4c33fc0cff-10c0.zip\node_modules\@electron-forge\core\src\util\electron-executable.ts:9:50)
    at async forgeSpawn (C:\Users\<USER>\AppData\Local\Yarn\Berry\cache\@electron-forge-core-npm-7.4.0-4c33fc0cff-10c0.zip\node_modules\@electron-forge\core\src\api\start.ts:157:28)
    at async forgeSpawnWrapper (C:\Users\<USER>\AppData\Local\Yarn\Berry\cache\@electron-forge-core-npm-7.4.0-4c33fc0cff-10c0.zip\node_modules\@electron-forge\core\src\api\start.ts:200:23)
    at async C:\Users\<USER>\AppData\Local\Yarn\Berry\cache\@electron-forge-core-npm-7.4.0-4c33fc0cff-10c0.zip\node_modules\@electron-forge\core\src\api\start.ts:235:21       
    at async C:\Users\<USER>\AppData\Local\Yarn\Berry\cache\@electron-forge-tracer-npm-7.4.0-9f71f99d40-10c0.zip\node_modules\@electron-forge\tracer\src\index.ts:51:14        
    at async C:\Users\<USER>\AppData\Local\Yarn\Berry\cache\@electron-forge-cli-npm-7.4.0-bdb0634abf-10c0.zip\node_modules\@electron-forge\cli\src\electron-forge-start.ts:61:1

Steps to reproduce

Additional information

With nodeLinker: node-modules (instead of nodeLinker: pnp) it works.

The error "Cannot find the package "electron"" imply that forge.config.cts file isn't found or is empty.

Related #3209 #3502 #3572 #3582 https://github.com/yarnpkg/berry/issues/1020

rtritto commented 1 month ago

FYI @caoxiemeihao @merceyz

rtritto commented 1 month ago

Some open points:

  1. maybe this issue will be fixed with #3582 because forge.config.ts should work instead of forge.config.cts
  2. should the PnP loader be added to ts-node (example: yarn node --loader ts-node/esm --loader ./.pnp.loader.mjs ./src/main.ts)?
  3. can the ts-node use be replaced with tsx or tslib?
rtritto commented 1 month ago

FYI @Mike-Dax @alecmev @SpacingBat3

rtritto commented 3 weeks ago

@merceyz what is the correct resolution for yarn berry / PnP? https://github.com/electron/forge/blob/38f64e4c9e2c79a3b9ff8447b1a23199415ede97/packages/utils/core-utils/src/electron-version.ts#L37-L43

I opened discussions: #6323 #8185

merceyz commented 3 weeks ago

Use require.resolve to locate dependencies regardless of whether PnP is used or not.

require.resolve(`${packageName}/package.json`, { paths: [dir] });