Skip to content

Commit d07cfec

Browse files
fix: pnpm collection of optional dependencies
node-module-collector should not expect optional dependencies to be present on disk. If `require('dep/package.json')` throws for optional dependency - it is completley safe to continue as if it was never installed.
1 parent 7ba4fea commit d07cfec

File tree

3 files changed

+33
-5
lines changed

3 files changed

+33
-5
lines changed

.changeset/witty-queens-trade.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"app-builder-lib": major
3+
---
4+
5+
fix: pnpm collection of optional dependencies

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
# [](https://github.com/electron-userland/electron-builder/compare/v26.0.11...v) (2025-03-13)
2+
3+
4+
### Bug Fixes
5+
6+
* pnpm collection of optional dependencies ([96abe76](https://github.com/electron-userland/electron-builder/commit/96abe76d8c4a033276f96ad92db7b2a0e28530aa))
7+
* support `mas` packages for flipping fuses ([#8947](https://github.com/electron-userland/electron-builder/issues/8947)) ([7ba4fea](https://github.com/electron-userland/electron-builder/commit/7ba4fea95825650f02749949632b351c75d3019a))
8+
9+
10+
111
# [](https://github.com/electron-userland/electron-builder/compare/v26.0.10...v) (2025-03-09)
212

313

packages/app-builder-lib/src/node-module-collector/pnpmNodeModulesCollector.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,30 @@ export class PnpmNodeModulesCollector extends NodeModulesCollector<PnpmDependenc
3939
extractProductionDependencyTree(tree: PnpmDependency): DependencyTree {
4040
const p = path.normalize(this.resolvePath(tree.path))
4141
const packageJson: Dependency<string, string> = require(path.join(p, "package.json"))
42-
const prodDependencies = { ...(packageJson.dependencies || {}), ...(packageJson.optionalDependencies || {}) }
4342

4443
const deps = { ...(tree.dependencies || {}), ...(tree.optionalDependencies || {}) }
4544
const dependencies = Object.entries(deps).reduce<DependencyTree["dependencies"]>((acc, curr) => {
4645
const [packageName, dependency] = curr
47-
if (!prodDependencies[packageName]) {
46+
47+
let isOptional: boolean
48+
if (packageJson.dependencies?.[packageName]) {
49+
isOptional = false
50+
} else if (packageJson.optionalDependencies?.[packageName]) {
51+
isOptional = true
52+
} else {
4853
return acc
4954
}
50-
return {
51-
...acc,
52-
[packageName]: this.extractProductionDependencyTree(dependency),
55+
56+
try {
57+
return {
58+
...acc,
59+
[packageName]: this.extractProductionDependencyTree(dependency),
60+
}
61+
} catch (error) {
62+
if (isOptional) {
63+
return acc
64+
}
65+
throw error
5366
}
5467
}, {})
5568

0 commit comments

Comments
 (0)