Open basz opened 1 year ago
@basz I'm not following here. Does this reproduce with a specific version of electron-forge
? A specific version of ember-electron
? A specific project setup?
Hi, yes i bit of an unclear report.
It's basically a new test application ember new + ember install ember-electron
npx ember --version
ember-cli: 4.12.1
node: 18.16.0
os: darwin arm64
new project with ember-electron ^4.2.1", that has @electron/rebuild@3.2.13 and @electron-forge/core@6.1.1
the electron-app package.json contains
"@electron-forge/cli": "^6.1.1",
"@electron-forge/maker-deb": "^6.1.1",
"@electron-forge/maker-rpm": "^6.1.1",
"@electron-forge/maker-squirrel": "^6.1.1",
"@electron-forge/maker-zip": "^6.1.1",
"@electron-forge/plugin-webpack": "^6.1.1",
electron/rebuild has this requirement quite some time. https://github.com/electron/rebuild/blame/main/src/rebuild.ts#L136
I think @electron-forge/core at some point changed it requirements about the given buildPath argument
does that make sense? Would you accept a PR using cwd + 'electron-app'. If so should I change the utility that produces electronProjectPath or the make.js only.
@basz I'm having trouble understanding/reproducing this. When I follow your steps it seems to work just fine, and when I edit @electron/rebuild
in electron-app/node_modules
to make it log out this.buildPath
it's absolute.
Can you put together a sample repository that reproduces this problem?
yes. try this gem... https://hithub.com/basz/ember-electron-app.git
git clone git@github.com:basz/ember-electron-app.git
cd ember-electron-app
yarn install && yarn install --cwd electron-app
npx ember electron:make
That will result in
Checking dependencies in electron-app...
Environment: production
⠴ building... [Babel: @ember-data/adapter > applyPatches]"warn" is imported from external module "@ember/debug" but never used in "-private/utils/serialize-into-hash.js" and "-private/utils/determine-body-promise.js".
⠼ building... [Babel: @ember-data/store > applyPatches]"registerWaiter" and "unregisterWaiter" are imported from external module "@ember/test" but never used in "-private/store-service.js".
cleaning up...
Built project successfully. Stored in "electron-app/ember-dist".
Making Electron project.
Expected buildPath to be an absolute path
I see, it's related to the webpack plugin -- if you aren't using the webpack plugin it works fine. I think that's probably a bug in the webpack plugin because neither electron-forge
nor electron-packager
say the path must be absolute, but the webpack plugin passes it straight to @electron/rebuild
, which blows up on it. So it might be worth filing an issue and/or PRing a fix in @electron-forge
for the webpack plugin.
But given the bug exists, I'd be fine with a PR making it absolute. It looks like we already do that in the electron task so I think we'd just want to add the same path.resolve()
to the other tasks (package
, make
, and publish
).
That i do not understand. webpack changes paths how? shouldn't webpack be only packing stuff? are you saying that by using webpack electron-forge is bypassed or something?
I'll make a PR tomorrow to make.js and while i'm at it also package.js and publish.js
Thanks for having a look
The webpack plugin invokes @electron/rebuild
itself, presumably because it needs native dependencies to be built for the current platform when running webpack? And this.projectDir
is just the dir
argument to @electron-forge
, with no absolute-ifying or anything.
The core @electron-forge
package method invokes @electron/rebuild
as well by supplying a hook to electron-packager
that does the rebuilding. electron-packager
ends up doing everything off in a temp directory, and the buildPath
argument that gets passed to @electron/rebuild
is always an absolute path pointing into that temp directory.
So when running without the webpack plugin, the rebuild is only invoked from the package method and it is supplied an absolute path. But when running with the webpack plugin, it's invoked from both places (I think), and when invoked from the webpack plugin, blows up if dir
is relative.
Thank you for taking the time to explain that. Very useful insightful.
make fails with "Expected buildPath to be an absolute path".
Built project successfully. Stored in "electron-app/ember-dist". Making Electron project. Expected buildPath to be an absolute path
diggin it seem the buildPath is set as 'electron-app' in the make task while forge
a quick fix inside node_modules/ember-electron/lib/tasks/make.js to prove we can get past this.