Skip to content

Commit 977f624

Browse files
committed
feat: Support Yarn PnP
1 parent 5fa7ff5 commit 977f624

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

packages/api/core/src/api/start.ts

+9
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ export default autoTrace(
165165
} as NodeJS.ProcessEnv,
166166
};
167167

168+
spawnOpts.env.NODE_OPTIONS = removePnpLoaderArguments(spawnOpts.env.NODE_OPTIONS);
168169
if (runAsNode) {
169170
spawnOpts.env.ELECTRON_RUN_AS_NODE = 'true';
170171
} else {
@@ -231,3 +232,11 @@ export default autoTrace(
231232
return spawned;
232233
}
233234
);
235+
236+
export function removePnpLoaderArguments(input: string | undefined): string | undefined {
237+
if (!input) return input;
238+
return input.replace(
239+
/(--require\s+[^"].+\.pnp\.cjs)|(--experimental-loader\s+[^"].+\.pnp\.loader\.mjs)|(--require\s+".+\.pnp\.cjs")|(--experimental-loader\s+".+\.pnp\.loader\.mjs")/g,
240+
''
241+
);
242+
}

packages/utils/core-utils/src/electron-version.ts

+7
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,13 @@ function getElectronModuleName(packageJSON: PackageJSONWithDeps): string {
6666
async function getElectronPackageJSONPath(dir: string, packageName: string): Promise<string | undefined> {
6767
const nodeModulesPath = await determineNodeModulesPath(dir, packageName);
6868
if (!nodeModulesPath) {
69+
try {
70+
// Yarn PnP
71+
// eslint-disable-next-line node/no-missing-require
72+
return require.resolve('electron/package.json');
73+
} catch (e) {
74+
// Ignore
75+
}
6976
throw new PackageNotFoundError(packageName, dir);
7077
}
7178

0 commit comments

Comments
 (0)