From e370117ff3fe963c9ec1cc538414961b306c00bd Mon Sep 17 00:00:00 2001 From: Sam Verschueren Date: Fri, 9 Jun 2017 16:41:54 +0200 Subject: [PATCH] Extend environment by default - fixes #87 (#88) --- fixtures/environment | 4 ++++ index.js | 4 ++++ readme.md | 9 ++++++++- test.js | 19 +++++++++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100755 fixtures/environment diff --git a/fixtures/environment b/fixtures/environment new file mode 100755 index 000000000..280faea9c --- /dev/null +++ b/fixtures/environment @@ -0,0 +1,4 @@ +#!/usr/bin/env node +'use strict'; +console.log(process.env.FOO); +console.log(process.env.BAR); diff --git a/index.js b/index.js index bab0bd910..1169b398d 100644 --- a/index.js +++ b/index.js @@ -16,6 +16,10 @@ const TEN_MEGABYTES = 1000 * 1000 * 10; function handleArgs(cmd, args, opts) { let parsed; + if (opts && opts.env && opts.extendEnv !== false) { + opts.env = Object.assign({}, process.env, opts.env); + } + if (opts && opts.__winShell === true) { delete opts.__winShell; parsed = { diff --git a/readme.md b/readme.md index 59bffeb3a..8a4a39df0 100644 --- a/readme.md +++ b/readme.md @@ -114,7 +114,14 @@ Current working directory of the child process. Type: `Object`
Default: `process.env` -Environment key-value pairs. +Environment key-value pairs. Extends automatically from `process.env`. Set `extendEnv` to `false` if you don't want this. + +#### extendEnv + +Type: `boolean`
+Default: `true` + +Set to `false` if you don't want to extend the environment variables when providing the `env` property. #### argv0 diff --git a/test.js b/test.js index 04eacddbc..5f67d6cd7 100644 --- a/test.js +++ b/test.js @@ -10,6 +10,7 @@ import tempfile from 'tempfile'; import m from './'; process.env.PATH = path.join(__dirname, 'fixtures') + path.delimiter + process.env.PATH; +process.env.FOO = 'foo'; test('execa()', async t => { const {stdout} = await m('noop', ['foo']); @@ -418,3 +419,21 @@ if (process.platform !== 'win32') { } }); } + +test('extend environment variables by default', async t => { + const result = await m.stdout('environment', [], {env: {BAR: 'bar'}}); + + t.deepEqual(result.split('\n'), [ + 'foo', + 'bar' + ]); +}); + +test('do not extend environment with `envExtend` option', async t => { + const result = await m.stdout('environment', [], {env: {BAR: 'bar', PATH: process.env.PATH}, extendEnv: false}); + + t.deepEqual(result.split('\n'), [ + 'undefined', + 'bar' + ]); +});