From 7eb89eb45a7a9b58815fa0207c124320b4bc76af Mon Sep 17 00:00:00 2001 From: Justin Baur <19896123+justindbaur@users.noreply.github.com> Date: Fri, 5 Sep 2025 19:12:21 -0400 Subject: [PATCH] chore(dev): Switch to using build constant for `isDev` check --- apps/desktop/package.json | 11 ++++++----- apps/desktop/src/global.d.ts | 8 ++++++++ .../platform/services/electron-log.service.spec.ts | 2 +- apps/desktop/src/utils.ts | 6 +----- apps/desktop/webpack.main.js | 5 ++++- apps/desktop/webpack.preload.js | 8 ++++++-- apps/desktop/webpack.renderer.js | 3 +++ 7 files changed, 29 insertions(+), 14 deletions(-) diff --git a/apps/desktop/package.json b/apps/desktop/package.json index eee422d88a3..858105e1486 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -20,9 +20,10 @@ "start": "cross-env ELECTRON_IS_DEV=0 ELECTRON_NO_UPDATER=1 electron ./build", "build-native": "cd desktop_native && node build.js", "build": "concurrently -n Main,Rend,Prel -c yellow,cyan \"npm run build:main\" \"npm run build:renderer\" \"npm run build:preload\"", - "build:dev": "concurrently -n Main,Rend -c yellow,cyan \"npm run build:main:dev\" \"npm run build:renderer:dev\"", + "build:dev": "concurrently -n Main,Rend,Prel -c yellow,cyan \"npm run build:main:dev\" \"npm run build:renderer:dev\" \"npm run build:preload:dev\"", "build:preload": "cross-env NODE_ENV=production webpack --config webpack.preload.js", - "build:preload:watch": "cross-env NODE_ENV=production webpack --config webpack.preload.js --watch", + "build:preload:dev": "cross-env NODE_ENV=development webpack --config webpack.preload.js", + "build:preload:watch": "cross-env NODE_ENV=development webpack --config webpack.preload.js --watch", "build:macos-extension:mac": "./desktop_native/macos_provider/build.sh && node scripts/build-macos-extension.js mac", "build:macos-extension:mas": "./desktop_native/macos_provider/build.sh && node scripts/build-macos-extension.js mas", "build:macos-extension:masdev": "./desktop_native/macos_provider/build.sh && node scripts/build-macos-extension.js mas-dev", @@ -55,15 +56,15 @@ "dist:mac:with-extension": "npm run build && npm run pack:mac:with-extension", "dist:mac:mas": "npm run build && npm run pack:mac:mas", "dist:mac:mas:with-extension": "npm run build && npm run pack:mac:mas:with-extension", - "dist:mac:masdev": "npm run build && npm run pack:mac:masdev", - "dist:mac:masdev:with-extension": "npm run build && npm run pack:mac:masdev:with-extension", + "dist:mac:masdev": "npm run build:dev && npm run pack:mac:masdev", + "dist:mac:masdev:with-extension": "npm run build:dev && npm run pack:mac:masdev:with-extension", "dist:win": "npm run build && npm run pack:win", "dist:win:ci": "npm run build && npm run pack:win:ci", "publish:lin": "npm run build && npm run clean:dist && electron-builder --linux --x64 -p always", "publish:mac": "npm run build && npm run clean:dist && electron-builder --mac -p always", "publish:mac:mas": "npm run dist:mac:mas && npm run upload:mas", "publish:win": "npm run build && npm run clean:dist && electron-builder --win --x64 --arm64 --ia32 -p always -c.win.signtoolOptions.certificateSubjectName=\"8bit Solutions LLC\"", - "publish:win:dev": "npm run build && npm run clean:dist && electron-builder --win --x64 --arm64 --ia32 -p always", + "publish:win:dev": "npm run build:dev && npm run clean:dist && electron-builder --win --x64 --arm64 --ia32 -p always", "upload:mas": "xcrun altool --upload-app --type osx --file \"$(find ./dist/mas-universal/Bitwarden*.pkg)\" --apiKey $APP_STORE_CONNECT_AUTH_KEY --apiIssuer $APP_STORE_CONNECT_TEAM_ISSUER", "test": "jest", "test:watch": "jest --watch", diff --git a/apps/desktop/src/global.d.ts b/apps/desktop/src/global.d.ts index 4d103b2cdef..77ee9d618c6 100644 --- a/apps/desktop/src/global.d.ts +++ b/apps/desktop/src/global.d.ts @@ -1,2 +1,10 @@ declare module "forcefocus"; declare const ipc: typeof import("./preload").ipc; + +/** + * Will be turned into a constant string in the main process only + * likely either `"development"` or `"production"`. + * + * This is done using the `DefinePlugin` in our webpack files. + */ +declare const BIT_ENVIRONMENT: string; diff --git a/apps/desktop/src/platform/services/electron-log.service.spec.ts b/apps/desktop/src/platform/services/electron-log.service.spec.ts index db3093e08e2..62af3b96596 100644 --- a/apps/desktop/src/platform/services/electron-log.service.spec.ts +++ b/apps/desktop/src/platform/services/electron-log.service.spec.ts @@ -15,7 +15,7 @@ jest.mock("@bitwarden/desktop-napi", () => { describe("ElectronLogMainService", () => { it("sets dev based on electron method", () => { - process.env.ELECTRON_IS_DEV = "1"; + globalThis.BIT_ENVIRONMENT = "development"; const logService = new ElectronLogMainService(); expect(logService).toEqual(expect.objectContaining({ isDev: true }) as any); }); diff --git a/apps/desktop/src/utils.ts b/apps/desktop/src/utils.ts index de5cd2daebc..ba8c1a2dba6 100644 --- a/apps/desktop/src/utils.ts +++ b/apps/desktop/src/utils.ts @@ -20,11 +20,7 @@ export function invokeMenu(menu: RendererMenuItem[]) { } export function isDev() { - // ref: https://github.com/sindresorhus/electron-is-dev - if ("ELECTRON_IS_DEV" in process.env) { - return parseInt(process.env.ELECTRON_IS_DEV, 10) === 1; - } - return process.defaultApp || /node_modules[\\/]electron[\\/]/.test(process.execPath); + return BIT_ENVIRONMENT === "development"; } export function isLinux() { diff --git a/apps/desktop/webpack.main.js b/apps/desktop/webpack.main.js index 166fba95d52..151b1d0cea2 100644 --- a/apps/desktop/webpack.main.js +++ b/apps/desktop/webpack.main.js @@ -3,7 +3,7 @@ const { merge } = require("webpack-merge"); const CopyWebpackPlugin = require("copy-webpack-plugin"); const TsconfigPathsPlugin = require("tsconfig-paths-webpack-plugin"); const configurator = require("./config/config"); -const { EnvironmentPlugin } = require("webpack"); +const { EnvironmentPlugin, DefinePlugin } = require("webpack"); const NODE_ENV = process.env.NODE_ENV == null ? "development" : process.env.NODE_ENV; @@ -76,6 +76,9 @@ const main = { { from: "./src/locales", to: "locales" }, ], }), + new DefinePlugin({ + BIT_ENVIRONMENT: JSON.stringify(NODE_ENV), + }), new EnvironmentPlugin({ FLAGS: envConfig.flags, DEV_FLAGS: NODE_ENV === "development" ? envConfig.devFlags : {}, diff --git a/apps/desktop/webpack.preload.js b/apps/desktop/webpack.preload.js index 0e285eaa5f6..db75e882644 100644 --- a/apps/desktop/webpack.preload.js +++ b/apps/desktop/webpack.preload.js @@ -3,7 +3,7 @@ const { merge } = require("webpack-merge"); const CopyWebpackPlugin = require("copy-webpack-plugin"); const TsconfigPathsPlugin = require("tsconfig-paths-webpack-plugin"); const configurator = require("./config/config"); -const { EnvironmentPlugin } = require("webpack"); +const { EnvironmentPlugin, DefinePlugin } = require("webpack"); const NODE_ENV = process.env.NODE_ENV == null ? "development" : process.env.NODE_ENV; @@ -21,7 +21,11 @@ const common = { }, ], }, - plugins: [], + plugins: [ + new DefinePlugin({ + BIT_ENVIRONMENT: JSON.stringify(NODE_ENV), + }), + ], resolve: { extensions: [".tsx", ".ts", ".js"], plugins: [new TsconfigPathsPlugin({ configFile: "./tsconfig.json" })], diff --git a/apps/desktop/webpack.renderer.js b/apps/desktop/webpack.renderer.js index 555e1ed38bd..9c5b0fd2584 100644 --- a/apps/desktop/webpack.renderer.js +++ b/apps/desktop/webpack.renderer.js @@ -177,6 +177,9 @@ const renderer = { filename: "[name].[contenthash].css", chunkFilename: "[id].[contenthash].css", }), + new webpack.DefinePlugin({ + BIT_ENVIRONMENT: JSON.stringify(NODE_ENV), + }), new webpack.EnvironmentPlugin({ ENV: ENV, FLAGS: envConfig.flags,