diff --git a/src/node_dotenv.cc b/src/node_dotenv.cc index ae18a6576dd232..249a5c991bd091 100644 --- a/src/node_dotenv.cc +++ b/src/node_dotenv.cc @@ -51,7 +51,7 @@ void Dotenv::SetEnvironment(node::Environment* env) { auto existing = env->env_vars()->Get(key.data()); - if (existing.IsNothing()) { + if (existing.IsNothing() || strcmp(key.data(), "NODE_OPTIONS") == 0) { env->env_vars()->Set( isolate, v8::String::NewFromUtf8( diff --git a/test/parallel/test-dotenv-edge-cases.js b/test/parallel/test-dotenv-edge-cases.js index 9b603f8e79eb6c..908cbb3bab362a 100644 --- a/test/parallel/test-dotenv-edge-cases.js +++ b/test/parallel/test-dotenv-edge-cases.js @@ -47,4 +47,17 @@ describe('.env supports edge cases', () => { assert.strictEqual(child.stderr, ''); assert.strictEqual(child.code, 0); }); + + it('should override NODE_OPTIONS', async () => { + const code = ` + require('assert').strictEqual(process.env.NODE_OPTIONS, '--experimental-permission --allow-fs-read=*'); + `.trim(); + const child = await common.spawnPromisified( + process.execPath, + [ `--env-file=${relativePath}`, '--eval', code ], + { cwd: __dirname, env: { NODE_OPTIONS: '--experimental-permission --allow-worker' } }, + ); + assert.strictEqual(child.stderr, ''); + assert.strictEqual(child.code, 0); + }); });