1j01 / tracky-mouse

Mouse control via head tracking, as a cross platform desktop app and JS library. eViacam alternative.
https://trackymouse.js.org/
MIT License
25 stars 4 forks source link

Can't build electron app due to dependency on parent folder #53

Closed 1j01 closed 2 months ago

1j01 commented 2 months ago

npm run make gives this error on Windows:

✖ Making for target: squirrel - On platform: win32 - For arch: x64

An unhandled error has occurred inside Forge:
An error occured while making for target: squirrel
Failed with exit code: 1
Output:
Attempting to build package from 'tracky_mouse_electron.nuspec'.
The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.

Error: Failed with exit code: 1
Output:
Attempting to build package from 'tracky_mouse_electron.nuspec'.
The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.

    at ChildProcess.<anonymous> (C:\Users\Isaiah\Projects\tracky-mouse\tracky-mouse-electron\node_modules\electron-winstaller\lib\spawn-promise.js:49:24)
    at ChildProcess.emit (node:events:519:28)
    at ChildProcess.emit (node:domain:488:12)
    at maybeClose (node:internal/child_process:1105:16)
    at ChildProcess._handle.onexit (node:internal/child_process:305:5)

on macOS, the error is clearer, because it shows the path it created contains a cycle of the two directories, repeating over and over.

The electron app depends on "tracky-mouse": "file:..". It's not a cyclic dependency; the tracky-mouse package doesn't depend on the tracky-mouse-electron package, but the tracky-mouse folder does contain the tracky-mouse-electron folder, so it gets into a loop of trying to include it.

I might need to separate the products into sibling folders, at which point there wouldn't be a package.json at the root of the repo... It might be time that I need to learn about monorepos, since this project contains two products (core library and desktop app), with a third planned (a browser extension).

There may be simple workaround, though.

1j01 commented 2 months ago

Here is the output on macOS:


> tracky-mouse-electron@1.0.0 make
> electron-forge make

✔ Checking your system
✔ Resolving Forge Config
We need to package your application before we can make it
⠋ Preparing to Package Application for arch: x64
An unhandled rejection has occurred inside Forge:
Error: ENAMETOOLONG: name too long, scandir '/var/folders/5c/blzb_wsx2cvdglh72tkyn8800000gn/T/electron-packager/darwin-x64/Tracky Mouse-darwin-x64/Electron.app/Contents/Resources/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/tracky-mouse/app/node_modules/serenade-driver/build/Release/obj.target/serenade-driver'

Electron Forge was terminated. Location:
{}

It's actually not quite what I remembered. But I still suspect the same underlying cause.

1j01 commented 2 months ago

I tried adding as a workaround in forge.config.js:

        ignore: [
            // This project, which is a subfolder of the main project,
            // the main project (core library) being a dependency of this project
            "tracky-mouse-electron",

but that didn't help. Trying restructuring the repo next.

1j01 commented 2 months ago

I restructured the project as a monorepo, and this does help, but using npm workspaces creates its own problems.

I'm now running up against:

With npm workspaces, dependencies are now hoisted by npm, and Electron Forge doesn't find the dependencies.

I tried adding an .npmrc with:

# install-strategy is needed for the electron app to be packaged correctly.
# If the dependencies are hoisted, electron-forge will fail to find them.
install-strategy=linked

But this is buggy, as noted in the output:


 2024-04-18 02:08:24 ⌚  in ~/Projects/tracky-mouse
± |main ↑3 {3} ?:1 ✗| → npm i
npm WARN reify The "linked" install strategy is EXPERIMENTAL and may contain bugs.
npm WARN deprecated gar@1.0.4: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
npm WARN deprecated @npmcli/move-file@2.0.1: This functionality has been moved to @npmcli/fs
npm WARN deprecated opn@6.0.0: The package has been renamed to `open`
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated @electron-forge/installer-rpm@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated @electron-forge/installer-base@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated @electron-forge/installer-exe@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated @electron-forge/installer-deb@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated @electron-forge/installer-zip@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated chokidar@2.1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated @electron-forge/installer-linux@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated @electron-forge/installer-darwin@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated asar@3.2.0: Please use @electron/asar moving forward.  There is no API change, just a package name change
npm WARN deprecated @electron-forge/installer-dmg@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated electron-osx-sign@0.5.0: Please use @electron/osx-sign moving forward. Be aware the API is slightly different
npm WARN deprecated electron-notarize@1.2.2: Please use @electron/notarize moving forward.  There is no API change, just a package name change
npm WARN deprecated electron-packager@15.5.2: Please use @electron/packager moving forward. There is no API change, just a package name change
npm WARN deprecated electron-rebuild@3.2.9: Please use @electron/rebuild moving forward.  There is no API change, just a package name change
npm ERR! code 1
npm ERR! path C:\Users\Isaiah\Projects\tracky-mouse\node_modules\.store\serenade-driver@1.1.13-O_NKL07TXUFDJP_AO9lS3A\node_modules\serenade-driver
npm ERR! command failed
npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node-gyp rebuild
npm ERR! driver.cpp
npm ERR! C:\Users\Isaiah\Projects\tracky-mouse\node_modules\.store\serenade-driver@1.1.13-O_NKL07TXUFDJP_AO9lS3A\node_modules\serenade-driver\src\driver.cpp(1,1): error C1083: Cannot open compiler generated file: 'C:\Users\Isaiah\Projects\tracky-mouse\node_modules\.store\serenade-driver@1.1.13-O_NKL07TXUFDJP_AO9lS3A\node_modules\serenade-driver\build\Release\obj\serenade-driver\src\driver.obj': Permission denied [C:\Users\Isaiah\Projects\tracky-mouse\node_modules\.store\serenade-driver@1.1.13-O_NKL07TXUFDJP_AO9lS3A\node_modules\serenade-driver\build\serenade-driver.vcxproj]
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp info using node-gyp@10.0.1
npm ERR! gyp info using node@21.5.0 | win32 | x64
npm ERR! gyp info find Python using Python version 3.12.1 found at "C:\Users\Isaiah\AppData\Local\Programs\Python\Python312\python.exe"
npm ERR! gyp info find VS using VS2022 (17.9.34701.34) found at:
npm ERR! gyp info find VS "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools"
npm ERR! gyp info find VS run with --verbose for detailed information
npm ERR! gyp info spawn C:\Users\Isaiah\AppData\Local\Programs\Python\Python312\python.exe
npm ERR! gyp info spawn args [
npm ERR! gyp info spawn args 'C:\\Users\\Isaiah\\AppData\\Roaming\\nvm\\v21.5.0\\node_modules\\npm\\node_modules\\node-gyp\\gyp\\gyp_main.py',
npm ERR! gyp info spawn args 'binding.gyp',
npm ERR! gyp info spawn args '-f',
npm ERR! gyp info spawn args 'msvs',
npm ERR! gyp info spawn args '-I',
npm ERR! gyp info spawn args 'C:\\Users\\Isaiah\\Projects\\tracky-mouse\\node_modules\\.store\\serenade-driver@1.1.13-O_NKL07TXUFDJP_AO9lS3A\\node_modules\\serenade-driver\\build\\config.gypi',
npm ERR! gyp info spawn args '-I',
npm ERR! gyp info spawn args 'C:\\Users\\Isaiah\\AppData\\Roaming\\nvm\\v21.5.0\\node_modules\\npm\\node_modules\\node-gyp\\addon.gypi',
npm ERR! gyp info spawn args '-I',
npm ERR! gyp info spawn args 'C:\\Users\\Isaiah\\AppData\\Local\\node-gyp\\Cache\\21.5.0\\include\\node\\common.gypi',
npm ERR! gyp info spawn args '-Dlibrary=shared_library',
npm ERR! gyp info spawn args '-Dvisibility=default',
npm ERR! gyp info spawn args '-Dnode_root_dir=C:\\Users\\Isaiah\\AppData\\Local\\node-gyp\\Cache\\21.5.0',
npm ERR! gyp info spawn args '-Dnode_gyp_dir=C:\\Users\\Isaiah\\AppData\\Roaming\\nvm\\v21.5.0\\node_modules\\npm\\node_modules\\node-gyp',
npm ERR! gyp info spawn args '-Dnode_lib_file=C:\\\\Users\\\\Isaiah\\\\AppData\\\\Local\\\\node-gyp\\\\Cache\\\\21.5.0\\\\<(target_arch)\\\\node.lib',
npm ERR! gyp info spawn args '-Dmodule_root_dir=C:\\Users\\Isaiah\\Projects\\tracky-mouse\\node_modules\\.store\\serenade-driver@1.1.13-O_NKL07TXUFDJP_AO9lS3A\\node_modules\\serenade-driver',
npm ERR! gyp info spawn args '-Dnode_engine=v8',
npm ERR! gyp info spawn args '--depth=.',
npm ERR! gyp info spawn args '--no-parallel',
npm ERR! gyp info spawn args '--generator-output',
npm ERR! gyp info spawn args 'C:\\Users\\Isaiah\\Projects\\tracky-mouse\\node_modules\\.store\\serenade-driver@1.1.13-O_NKL07TXUFDJP_AO9lS3A\\node_modules\\serenade-driver\\build',
npm ERR! gyp info spawn args '-Goutput_dir=.'
npm ERR! gyp info spawn args ]
npm ERR! gyp info spawn C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\MSBuild.exe
npm ERR! gyp info spawn args [
npm ERR! gyp info spawn args 'build\\binding.sln',
npm ERR! gyp info spawn args '/clp:Verbosity=minimal',
npm ERR! gyp info spawn args '/nologo',
npm ERR! gyp info spawn args '/p:Configuration=Release;Platform=x64'
npm ERR! gyp info spawn args ]
npm ERR! gyp ERR! build error
npm ERR! gyp ERR! stack Error: `C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\MSBuild.exe` failed with exit code: 1
npm ERR! gyp ERR! stack at ChildProcess.<anonymous> (C:\Users\Isaiah\AppData\Roaming\nvm\v21.5.0\node_modules\npm\node_modules\node-gyp\lib\build.js:209:23)       
npm ERR! gyp ERR! stack at ChildProcess.emit (node:events:519:28)
npm ERR! gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:294:12)
npm ERR! gyp ERR! System Windows_NT 10.0.22631
npm ERR! gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\Isaiah\\AppData\\Roaming\\nvm\\v21.5.0\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
npm ERR! gyp ERR! cwd C:\Users\Isaiah\Projects\tracky-mouse\node_modules\.store\serenade-driver@1.1.13-O_NKL07TXUFDJP_AO9lS3A\node_modules\serenade-driver
npm ERR! gyp ERR! node -v v21.5.0
npm ERR! gyp ERR! node-gyp -v v10.0.1
npm ERR! gyp ERR! not ok

npm ERR! A complete log of this run can be found in: C:\Users\Isaiah\AppData\Local\npm-cache\_logs\2024-04-18T06_10_19_850Z-debug-0.log

 2024-04-18 02:10:29 ⌚  in ~/Projects/tracky-mouse
± |main ↑3 {3} ?:1 ✗| → cd website/

 2024-04-18 02:11:47 ⌚  in ~/Projects/tracky-mouse/website
± |main ↑3 {3} ?:1 ✗| → npm i
npm WARN reify The "linked" install strategy is EXPERIMENTAL and may contain bugs.
npm ERR! this.idealTree.children.get is not a function

npm ERR! A complete log of this run can be found in: C:\Users\Isaiah\AppData\Local\npm-cache\_logs\2024-04-18T06_11_49_837Z-debug-0.log

 2024-04-18 02:11:50 ⌚  in ~/Projects/tracky-mouse/website
± |main ↑3 {3} ?:1 ✗| → cd ../desktop-app/

 2024-04-18 02:15:24 ⌚  in ~/Projects/tracky-mouse/desktop-app
± |main ↑3 {3} ?:1 ✗| → npm i
npm WARN reify The "linked" install strategy is EXPERIMENTAL and may contain bugs.
npm ERR! this.idealTree.children.get is not a function

npm ERR! A complete log of this run can be found in: C:\Users\Isaiah\AppData\Local\npm-cache\_logs\2024-04-18T06_15_26_005Z-debug-0.log

I may need to ditch npm workspaces, and just use separate packages that aren't "workspaces", in order to have separate node_modules.

Or I may be able to delete the package locks other than the root one, and build the app if Electron Forge actually supports looking at one package.json but not nested ones, and that's the only issue, but this will have the downside of requiring installing heavy dependencies including native modules just to hack on the website, which is inefficient and may be prohibitive to contributors.

I could also try the install-strategy=nested (formerly --legacy-bundling), which may be inefficient but perhaps not on the order of having to install electron plus a native node module when not needed.

1j01 commented 2 months ago

I tried adding install-strategy=nested to .npmrc and deleting all the package-lock.json files and reinstalling, but it was very broken, showing leftovers from install-strategy=linked (note the .store):

        "desktop-app/node_modules/serenade-driver": {
            "resolved": "node_modules/.store/serenade-driver@1.1.13-O_NKL07TXUFDJP_AO9lS3A/node_modules/serenade-driver",
            "link": true
        },
        "node_modules/.store/serenade-driver@1.1.13-O_NKL07TXUFDJP_AO9lS3A": {},
        "node_modules/.store/serenade-driver@1.1.13-O_NKL07TXUFDJP_AO9lS3A/node_modules/serenade-driver": {
            "version": "1.1.13",
            "hasInstallScript": true,
            "license": "MIT",
            "dependencies": {
                "bindings": "^1.5.0",
                "node-addon-api": "^3.1.0",
                "windows-shortcuts": "^0.1.6"
            }
        },
        "node_modules/.store/serenade-driver@1.1.13-O_NKL07TXUFDJP_AO9lS3A/node_modules/serenade-driver/node_modules/bindings": {
            "version": "1.5.0",
            "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
            "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
            "dependencies": {
                "file-uri-to-path": "1.0.0"
            }
        },
        "node_modules/.store/serenade-driver@1.1.13-O_NKL07TXUFDJP_AO9lS3A/node_modules/serenade-driver/node_modules/node-addon-api": {
            "version": "3.2.1",
            "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
            "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A=="
        },
        "node_modules/.store/serenade-driver@1.1.13-O_NKL07TXUFDJP_AO9lS3A/node_modules/serenade-driver/node_modules/windows-shortcuts": {
            "version": "0.1.6",
            "resolved": "https://registry.npmjs.org/windows-shortcuts/-/windows-shortcuts-0.1.6.tgz",
            "integrity": "sha512-kjkb3Hmmmg7jwnOb+29AOmoEEA1L/JeLsMOYovpLxYpuc+fN0R+pr8sMwep3JFhUZloxyw1XTzq8n3HugXkqBA=="
        },

and running npm i inside desktop-app/ didn't do anything.

Then I tried deleting all the package locks again along with the node_modules folders and trying again...

 2024-04-18 11:51:36 ⌚  in ~/Projects/tracky-mouse
± |main ↑4 {3} ✓| → npm i
npm WARN deprecated gar@1.0.4: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
npm WARN deprecated @npmcli/move-file@2.0.1: This functionality has been moved to @npmcli/fs
npm WARN deprecated @npmcli/move-file@2.0.1: This functionality has been moved to @npmcli/fs
npm WARN deprecated @npmcli/move-file@2.0.1: This functionality has been moved to @npmcli/fs
npm WARN deprecated @npmcli/move-file@2.0.1: This functionality has been moved to @npmcli/fs
npm WARN deprecated @npmcli/move-file@2.0.1: This functionality has been moved to @npmcli/fs
npm WARN deprecated @npmcli/move-file@2.0.1: This functionality has been moved to @npmcli/fs
npm WARN deprecated @npmcli/move-file@2.0.1: This functionality has been moved to @npmcli/fs
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated opn@6.0.0: The package has been renamed to `open`
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated @electron-forge/installer-rpm@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated @electron-forge/installer-deb@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated @electron-forge/installer-exe@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated @electron-forge/installer-zip@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated @electron-forge/installer-base@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated @electron-forge/installer-linux@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated @electron-forge/installer-darwin@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated @electron-forge/installer-darwin@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated @electron-forge/installer-linux@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated asar@3.2.0: Please use @electron/asar moving forward.  There is no API change, just a package name change
npm WARN deprecated asar@3.2.0: Please use @electron/asar moving forward.  There is no API change, just a package name change
npm WARN deprecated asar@3.2.0: Please use @electron/asar moving forward.  There is no API change, just a package name change
npm WARN deprecated asar@3.2.0: Please use @electron/asar moving forward.  There is no API change, just a package name change
npm WARN deprecated asar@3.2.0: Please use @electron/asar moving forward.  There is no API change, just a package name change
npm WARN deprecated asar@3.2.0: Please use @electron/asar moving forward.  There is no API change, just a package name change
npm WARN deprecated asar@3.2.0: Please use @electron/asar moving forward.  There is no API change, just a package name change
npm WARN deprecated asar@3.2.0: Please use @electron/asar moving forward.  There is no API change, just a package name change
npm WARN deprecated @electron-forge/installer-dmg@6.0.0-beta.65: The electron-forge install command was removed in the v6.0.0-beta.68 release.
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated electron-osx-sign@0.5.0: Please use @electron/osx-sign moving forward. Be aware the API is slightly different
npm WARN deprecated electron-osx-sign@0.5.0: Please use @electron/osx-sign moving forward. Be aware the API is slightly different
npm WARN deprecated electron-osx-sign@0.5.0: Please use @electron/osx-sign moving forward. Be aware the API is slightly different
npm WARN deprecated electron-osx-sign@0.5.0: Please use @electron/osx-sign moving forward. Be aware the API is slightly different
npm WARN deprecated electron-osx-sign@0.5.0: Please use @electron/osx-sign moving forward. Be aware the API is slightly different
npm WARN deprecated electron-osx-sign@0.5.0: Please use @electron/osx-sign moving forward. Be aware the API is slightly different
npm WARN deprecated electron-notarize@1.2.2: Please use @electron/notarize moving forward.  There is no API change, just a package name change
npm WARN deprecated electron-notarize@1.2.2: Please use @electron/notarize moving forward.  There is no API change, just a package name change
npm WARN deprecated electron-notarize@1.2.2: Please use @electron/notarize moving forward.  There is no API change, just a package name change
npm WARN deprecated electron-notarize@1.2.2: Please use @electron/notarize moving forward.  There is no API change, just a package name change
npm WARN deprecated electron-notarize@1.2.2: Please use @electron/notarize moving forward.  There is no API change, just a package name change
npm WARN deprecated electron-notarize@1.2.2: Please use @electron/notarize moving forward.  There is no API change, just a package name change
npm WARN deprecated electron-packager@15.5.2: Please use @electron/packager moving forward. There is no API change, just a package name change
npm WARN deprecated electron-packager@15.5.2: Please use @electron/packager moving forward. There is no API change, just a package name change
npm WARN deprecated electron-packager@15.5.2: Please use @electron/packager moving forward. There is no API change, just a package name change
npm WARN deprecated electron-packager@15.5.2: Please use @electron/packager moving forward. There is no API change, just a package name change
npm WARN deprecated electron-packager@15.5.2: Please use @electron/packager moving forward. There is no API change, just a package name change
npm WARN deprecated electron-packager@15.5.2: Please use @electron/packager moving forward. There is no API change, just a package name change
npm WARN deprecated electron-rebuild@3.2.9: Please use @electron/rebuild moving forward.  There is no API change, just a package name change
npm WARN deprecated electron-rebuild@3.2.9: Please use @electron/rebuild moving forward.  There is no API change, just a package name change
npm WARN deprecated electron-rebuild@3.2.9: Please use @electron/rebuild moving forward.  There is no API change, just a package name change
npm WARN deprecated electron-rebuild@3.2.9: Please use @electron/rebuild moving forward.  There is no API change, just a package name change
npm WARN deprecated electron-rebuild@3.2.9: Please use @electron/rebuild moving forward.  There is no API change, just a package name change
npm WARN deprecated electron-rebuild@3.2.9: Please use @electron/rebuild moving forward.  There is no API change, just a package name change
npm WARN cleanup Failed to remove some directories [
npm WARN cleanup   [
npm WARN cleanup     'C:\\Users\\Isaiah\\Projects\\tracky-mouse\\desktop-app\\node_modules\\@electron-forge\\maker-deb\\node_modules\\electron-installer-debian\\node_modules\\electron-installer-common',
npm WARN cleanup     [Error: EPERM: operation not permitted, rmdir 'C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\maker-deb\node_modules\electron-installer-debian\node_modules\electron-installer-common\node_modules\asar\node_modules\@types\glob\node_modules'] {
npm WARN cleanup       errno: -4048,
npm WARN cleanup       code: 'EPERM',
npm WARN cleanup       syscall: 'rmdir',
npm WARN cleanup       path: 'C:\\Users\\Isaiah\\Projects\\tracky-mouse\\desktop-app\\node_modules\\@electron-forge\\maker-deb\\node_modules\\electron-installer-debian\\node_modules\\electron-installer-common\\node_modules\\asar\\node_modules\\@types\\glob\\node_modules'
npm WARN cleanup     }
npm WARN cleanup   ]
npm WARN cleanup ]

added 4469 packages, and audited 4473 packages in 53s

110 packages are looking for funding
  run `npm fund` for details

23 vulnerabilities (16 moderate, 7 high)

To address issues that do not require attention, run:
  npm audit fix

To address all issues possible (including breaking changes), run:
  npm audit fix --force

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.

Weird that's trying to remove a directory during a clean install, but I've been having these sort of permission errors come and go for a while now. Trying to run the app...

 2024-04-18 11:53:26 ⌚  in ~/Projects/tracky-mouse
± |main ↑4 {3} U:1 ✗| → npm start -w desktop-app/

> tracky-mouse-electron@1.0.0 start
> electron-forge start

An unhandled exception has occurred inside Forge:
Cannot find module 'ini'
Require stack:
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\node_modules\@electron-forge\core\node_modules\resolve-package\node_modules\get-installed-path\node_modules\global-modules\node_modules\global-prefix\index.js
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\node_modules\@electron-forge\core\node_modules\resolve-package\node_modules\get-installed-path\node_modules\global-modules\index.js
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\node_modules\@electron-forge\core\node_modules\resolve-package\node_modules\get-installed-path\index.js
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\node_modules\@electron-forge\core\node_modules\resolve-package\index.js       
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\node_modules\@electron-forge\core\dist\api\init-scripts\find-template.js      
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\node_modules\@electron-forge\core\dist\api\init.js
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\node_modules\@electron-forge\core\dist\api\index.js
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\dist\util\check-system.js
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\dist\electron-forge.js
Error: Cannot find module 'ini'
Require stack:
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\node_modules\@electron-forge\core\node_modules\resolve-package\node_modules\get-installed-path\node_modules\global-modules\node_modules\global-prefix\index.js
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\node_modules\@electron-forge\core\node_modules\resolve-package\node_modules\get-installed-path\node_modules\global-modules\index.js
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\node_modules\@electron-forge\core\node_modules\resolve-package\node_modules\get-installed-path\index.js
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\node_modules\@electron-forge\core\node_modules\resolve-package\index.js       
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\node_modules\@electron-forge\core\dist\api\init-scripts\find-template.js      
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\node_modules\@electron-forge\core\dist\api\init.js
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\node_modules\@electron-forge\core\dist\api\index.js
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\dist\util\check-system.js
- C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\dist\electron-forge.js
    at Module._resolveFilename (node:internal/modules/cjs/loader:1143:15)
    at Module._load (node:internal/modules/cjs/loader:984:27)
    at Module.require (node:internal/modules/cjs/loader:1234:19)
    at require (node:internal/modules/helpers:176:18)
    at Object.<anonymous> (C:\Users\Isaiah\Projects\tracky-mouse\desktop-app\node_modules\@electron-forge\cli\node_modules\@electron-forge\core\node_modules\resolve-package\node_modules\get-installed-path\node_modules\global-modules\node_modules\global-prefix\index.js:14:11)
    at Module._compile (node:internal/modules/cjs/loader:1375:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1434:10)
    at Module.load (node:internal/modules/cjs/loader:1206:32)
    at Module._load (node:internal/modules/cjs/loader:1022:12)
    at Module.require (node:internal/modules/cjs/loader:1234:19)
npm ERR! Lifecycle script `start` failed with error: 
npm ERR! Error: command failed
npm ERR!   in workspace: tracky-mouse-electron@1.0.0
npm ERR!   at location: C:\Users\Isaiah\Projects\tracky-mouse\desktop-app

I then tried using the default hoisted install strategy, but deleting the package-lock.json files other than the root one, following this advice, but:

  1. this requires reaching outside of the app directory to reference library code, and since I'm not using a bundler, this is not dynamic and is very unlikely to ever work when packaging the app:
    <script src="../../node_modules/tracky-mouse/tracky-mouse.js"></script>
  2. it fails to even load modules in electron-main.js with require, so Electron Forge is not bundling them.
  3. (this would have the downside of requiring installing heavy dependencies including native modules just to hack on the website, which would be inefficient and possibly prohibitive to contributors)

So I'm going to have to ditch npm workspaces, and maybe switch package managers in the future to get a nicer monorepo workflow... that actually works.

1j01 commented 2 months ago

Ditched npm workspaces and got the app building. In the end I needed:

I replaced the--workspace arguments with some npm scripts to maintain the ergonomics of running everything from one folder, which I would have missed.

I could explore other options in the future for improving the developer experience around the monorepo setup, like: