diff --git a/resources/darwin/bin/code.sh b/resources/darwin/bin/code.sh index 1d66515c2c7..de5c3bfcab0 100755 --- a/resources/darwin/bin/code.sh +++ b/resources/darwin/bin/code.sh @@ -31,5 +31,9 @@ fi CONTENTS="$APP_PATH/Contents" ELECTRON="$CONTENTS/MacOS/Electron" CLI="$CONTENTS/Resources/app/out/cli.js" +export VSCODE_NODE_OPTIONS=$NODE_OPTIONS +export VSCODE_NODE_REPL_EXTERNAL_MODULE=$NODE_REPL_EXTERNAL_MODULE +unset NODE_OPTIONS +unset NODE_REPL_EXTERNAL_MODULE ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" "$@" exit $? diff --git a/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts b/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts index 22aedd0758c..27ccb9cb61f 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts @@ -13,7 +13,7 @@ import { IWorkspaceContextService, IWorkspaceFolder } from 'vs/platform/workspac import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver'; import { sanitizeProcessEnvironment } from 'vs/base/common/processes'; import { IShellLaunchConfig, ITerminalBackend, ITerminalEnvironment, TerminalShellType, WindowsShellType } from 'vs/platform/terminal/common/terminal'; -import { IProcessEnvironment, isWindows, language, OperatingSystem } from 'vs/base/common/platform'; +import { IProcessEnvironment, isWindows, isMacintosh, language, OperatingSystem } from 'vs/base/common/platform'; import { escapeNonWindowsPath, sanitizeCwd } from 'vs/platform/terminal/common/terminalEnvironment'; import { isString } from 'vs/base/common/types'; import { IHistoryService } from 'vs/workbench/services/history/common/history'; @@ -269,6 +269,26 @@ export async function createTerminalEnvironment( } } + // Workaround for https://github.com/microsoft/vscode/issues/204005 + // We should restore the following environment variables when a user + // launches the application using the CLI so that integrated terminal + // can still inherit these variables. + // We are not bypassing the restrictions implied in https://github.com/electron/electron/pull/40770 + // since this only affects integrated terminal and not the application itself. + if (isMacintosh) { + // Restore NODE_OPTIONS if it was set + if (env['VSCODE_NODE_OPTIONS']) { + env['NODE_OPTIONS'] = env['VSCODE_NODE_OPTIONS']; + delete env['VSCODE_NODE_OPTIONS']; + } + + // Restore NODE_REPL_EXTERNAL_MODULE if it was set + if (env['VSCODE_NODE_REPL_EXTERNAL_MODULE']) { + env['NODE_REPL_EXTERNAL_MODULE'] = env['VSCODE_NODE_REPL_EXTERNAL_MODULE']; + delete env['VSCODE_NODE_REPL_EXTERNAL_MODULE']; + } + } + // Sanitize the environment, removing any undesirable VS Code and Electron environment // variables sanitizeProcessEnvironment(env, 'VSCODE_IPC_HOOK_CLI');