diff --git a/.changeset/green-cheetahs-scream.md b/.changeset/green-cheetahs-scream.md new file mode 100644 index 0000000000..1836f4a44a --- /dev/null +++ b/.changeset/green-cheetahs-scream.md @@ -0,0 +1,5 @@ +--- +"@trigger.dev/core": patch +--- + +Add --experimental-global-webcrypto node option fix "crypto is not defined error" on Node.js 18 in dev diff --git a/packages/core/src/v3/build/runtime.ts b/packages/core/src/v3/build/runtime.ts index d473f0f7f8..5b667f6e12 100644 --- a/packages/core/src/v3/build/runtime.ts +++ b/packages/core/src/v3/build/runtime.ts @@ -48,7 +48,12 @@ export function execOptionsForRuntime(runtime: BuildRuntime, options: ExecOption const conditions = options.customConditions?.map((condition) => `--conditions=${condition}`); - return [importEntryPoint, conditions, process.env.NODE_OPTIONS] + return [ + importEntryPoint, + conditions, + process.env.NODE_OPTIONS, + nodeRuntimeNeedsGlobalWebCryptoFlag() ? "--experimental-global-webcrypto" : undefined, + ] .filter(Boolean) .flat() .join(" "); @@ -58,3 +63,12 @@ export function execOptionsForRuntime(runtime: BuildRuntime, options: ExecOption } } } + +// Detect if we are using node v18, since we don't support lower than 18, and we only need to enable the flag for v18 +function nodeRuntimeNeedsGlobalWebCryptoFlag(): boolean { + try { + return process.versions.node.startsWith("18."); + } catch { + return false; + } +}