electron / forge

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

[Windows] Strings with path parts replaced with undefined #2857

Open jamesplease opened 2 years ago

jamesplease commented 2 years ago

Pre-flight checklist

Electron Forge version

6.0.0-beta.63

Electron version

19.0.1

Operating system

Windows 11 21H2

Last known working Electron Forge version

Unknown

Expected behavior

Strings with paths in them would not be replaced with undefined. That way, files could be read from the disk and used in the app.

Actual behavior

If a string does contain a path part that points to a file, the entire path aside from the filename is replaced with undefined. This is normally accomplished through things like __dirname, but the following example shows the behavior with an explicitly-defined string:

var path = 'C:\\Users\\example-user\\web\\example-project\\src\\some-path\\some-file.txt';
console.log(path);
// => "undefinedsome-file.txt"

I narrowed it down to the webpack-asset-relocator-loader plugin. Commenting out this plugin resolves the issue. However, I'm not sure the ramifications of this. Running the app locally and making a build seems to work...but maybe I'll run into issues later.

Steps to reproduce

  1. Create a new project using the Webpack template:
npx create-electron-app my-new-app --template=webpack
  1. Create an empty file at ./src/example/index.html

  2. Add this snippet to main.js:

const PROJECT_ROOT = process.cwd();
const ASSETS_PATH = path.join(PROJECT_ROOT, 'src', 'example');
const appFilePath = path.join(ASSETS_PATH, 'index.html');
console.log('appFilePath', appFilePath);
  1. Observe that the logged path is appFilePath undefinedindex.html.

Note: the path must point to a file that actually exists for the bug to present itself.

Additional information

No response

quolpr commented 2 years ago

I have the same issue. I can't use sqlite3 in preload.ts due to this bug. The interesting thing — on first run (with yarn start) it works ok but only breaks on fast refresh. Upgrading webpack-asset-relocator-loader to 1.7.2 didn't fix an issue

quolpr commented 2 years ago

I also tried https://github.com/electron-userland/electron-forge/issues/575#issuecomment-422877001 (I added sqlite3 to external dep) and https://github.com/vercel/webpack-asset-relocator-loader/issues/161 seems to be related, but it didn't help

quolpr commented 2 years ago

Here is the error on HMR happens (I am on macOS btw):

image
jamesplease commented 2 years ago

I think that’s a different problem. Maybe try some of the ideas over in https://github.com/electron-userland/electron-forge/issues/2412

quolpr commented 2 years ago

@jamesplease oh you are right! Thanks