diff --git a/.npmrc b/.npmrc index 05172ed50e3..47d199129a0 100644 --- a/.npmrc +++ b/.npmrc @@ -3,3 +3,6 @@ save-exact=true # This applies to all npm scripts in this repository. node-options=--max-old-space-size=8192 +# Required for compatibility with electron-builder in monorepo +shamefully-hoist=true + diff --git a/apps/desktop/electron-builder.beta.json b/apps/desktop/electron-builder.beta.json index 630a956560d..bb0ffb42b35 100644 --- a/apps/desktop/electron-builder.beta.json +++ b/apps/desktop/electron-builder.beta.json @@ -11,14 +11,17 @@ "output": "dist", "app": "build" }, + "npmRebuild": false, "afterSign": "scripts/after-sign.js", "afterPack": "scripts/after-pack.js", "asarUnpack": ["**/*.node"], - "files": [ - "**/*", - "!**/node_modules/@bitwarden/desktop-napi/**/*", - "**/node_modules/@bitwarden/desktop-napi/index.js", - "**/node_modules/@bitwarden/desktop-napi/desktop_napi.${platform}-${arch}*.node" + "files": ["**/*", "!**/node_modules/!(@bitwarden)/**"], + "extraResources": [ + { + "from": "desktop_native/napi", + "to": "node_modules/@bitwarden/desktop-napi", + "filter": ["package.json", "index.js", "index.d.ts", "*.node"] + } ], "electronVersion": "36.8.1", "generateUpdatesFilesForAllChannels": true, diff --git a/apps/desktop/electron-builder.json b/apps/desktop/electron-builder.json index 4353a27db32..16cc48a5950 100644 --- a/apps/desktop/electron-builder.json +++ b/apps/desktop/electron-builder.json @@ -11,16 +11,17 @@ "output": "dist", "app": "build" }, + "npmRebuild": false, "afterSign": "scripts/after-sign.js", "afterPack": "scripts/after-pack.js", - "asarUnpack": ["**/*.node"], - "files": [ - "**/*", - "!**/node_modules/.pnpm/**/*", - "!**/node_modules/@bitwarden/desktop-napi/**/*", - "**/node_modules/@bitwarden/desktop-napi/index.js", - "**/node_modules/@bitwarden/desktop-napi/desktop_napi.${platform}-${arch}*.node", - "!**/node_modules/@nx/**/*" + "asarUnpack": ["node_modules/@bitwarden/desktop-napi/*.node"], + "files": ["**/*", "!**/node_modules/!(@bitwarden)/**"], + "extraResources": [ + { + "from": "desktop_native/napi", + "to": "node_modules/@bitwarden/desktop-napi", + "filter": ["package.json", "index.js", "index.d.ts", "*.node"] + } ], "electronVersion": "37.7.0", "generateUpdatesFilesForAllChannels": true, diff --git a/apps/desktop/package.json b/apps/desktop/package.json index bf66ad443fd..74c0850fc80 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -16,6 +16,13 @@ "url": "git+https://github.com/bitwarden/clients.git" }, "license": "GPL-3.0", + "devDependencies": { + "@electron/notarize": "3.0.1", + "concurrently": "9.2.0", + "dotenv": "16.6.1", + "fs-extra": "11.3.0", + "rimraf": "6.1.2" + }, "scripts": { "postinstall": "node ../../node_modules/@electron/rebuild/lib/cli.js", "start": "cross-env ELECTRON_IS_DEV=0 ELECTRON_NO_UPDATER=1 electron ./build", diff --git a/apps/desktop/src/package.json b/apps/desktop/src/package.json index 2ac5d339a95..882e8d4ec30 100644 --- a/apps/desktop/src/package.json +++ b/apps/desktop/src/package.json @@ -12,6 +12,6 @@ "url": "git+https://github.com/bitwarden/clients.git" }, "dependencies": { - "@bitwarden/desktop-napi": "file:../desktop_native/napi" + "@bitwarden/desktop-napi": "*" } } diff --git a/apps/desktop/webpack.base.js b/apps/desktop/webpack.base.js index c9da84cd2e1..b0d76413513 100644 --- a/apps/desktop/webpack.base.js +++ b/apps/desktop/webpack.base.js @@ -112,6 +112,25 @@ module.exports.buildConfig = function buildConfig(params) { path.resolve(__dirname, "src/package.json"), { from: path.resolve(__dirname, "src/images"), to: "images" }, { from: path.resolve(__dirname, "src/locales"), to: "locales" }, + // Copy desktop-napi package to build/node_modules/ so electron-builder + // doesn't need to scan parent node_modules + { + from: path.resolve(__dirname, "desktop_native/napi/package.json"), + to: "node_modules/@bitwarden/desktop-napi/package.json", + }, + { + from: path.resolve(__dirname, "desktop_native/napi/index.js"), + to: "node_modules/@bitwarden/desktop-napi/index.js", + }, + { + from: path.resolve(__dirname, "desktop_native/napi/index.d.ts"), + to: "node_modules/@bitwarden/desktop-napi/index.d.ts", + }, + { + from: path.resolve(__dirname, "desktop_native/napi/*.node"), + to: "node_modules/@bitwarden/desktop-napi/[name][ext]", + noErrorOnMissing: true, + }, ], }), new DefinePlugin({ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5407f72df58..945727254c4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -609,7 +609,23 @@ importers: specifier: 4.4.2 version: 4.4.2 - apps/desktop: {} + apps/desktop: + devDependencies: + '@electron/notarize': + specifier: 3.0.1 + version: 3.0.1 + concurrently: + specifier: 9.2.0 + version: 9.2.0 + dotenv: + specifier: 16.6.1 + version: 16.6.1 + fs-extra: + specifier: 11.3.0 + version: 11.3.0 + rimraf: + specifier: 6.1.2 + version: 6.1.2 apps/desktop/desktop_native/napi: devDependencies: @@ -6983,6 +6999,10 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + fs-extra@11.3.2: resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} engines: {node: '>=14.14'} @@ -14397,7 +14417,7 @@ snapshots: '@aduh95/viz.js': 3.4.0 '@compodoc/ngd-core': 2.1.1 dot: 2.0.0-beta.1 - fs-extra: 11.3.2 + fs-extra: 11.3.0 '@cspotcode/source-map-support@0.8.1': dependencies: @@ -14511,7 +14531,7 @@ snapshots: '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3 dir-compare: 4.2.0 - fs-extra: 11.3.2 + fs-extra: 11.3.0 minimatch: 9.0.5 plist: 3.1.0 transitivePeerDependencies: @@ -14521,7 +14541,7 @@ snapshots: dependencies: cross-dirname: 0.1.0 debug: 4.4.3 - fs-extra: 11.3.2 + fs-extra: 11.3.0 minimist: 1.2.8 postject: 1.0.0-alpha.6 transitivePeerDependencies: @@ -20388,6 +20408,12 @@ snapshots: jsonfile: 6.2.0 universalify: 2.0.1 + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + fs-extra@11.3.2: dependencies: graceful-fs: 4.2.11 @@ -25698,7 +25724,7 @@ snapshots: dependencies: bluebird: 3.7.2 duplexer2: 0.1.4 - fs-extra: 11.3.2 + fs-extra: 11.3.0 graceful-fs: 4.2.11 node-int64: 0.4.0