diff --git a/packages/@vue/cli-service/__tests__/Service.spec.js b/packages/@vue/cli-service/__tests__/Service.spec.js index 2a30c9369..c3d0689f0 100644 --- a/packages/@vue/cli-service/__tests__/Service.spec.js +++ b/packages/@vue/cli-service/__tests__/Service.spec.js @@ -23,6 +23,11 @@ const createMockService = (plugins = [], init = true, mode) => { beforeEach(() => { mockPkg({}) + delete process.env.NODE_ENV + delete process.env.BABEL_ENV + delete process.env.FOO + delete process.env.BAR + delete process.env.BAZ }) test('env loading', () => { @@ -35,17 +40,12 @@ test('env loading', () => { expect(process.env.BAR).toBe('2') expect(process.env.BAZ).toBe('4') - delete process.env.FOO - delete process.env.BAR - delete process.env.BAZ fs.unlinkSync('/.env.local') fs.unlinkSync('/.env') }) test('env loading for custom mode', () => { - const prevNodeEnv = process.env.NODE_ENV - delete process.env.NODE_ENV - + process.env.VUE_CLI_TEST_TESTING_ENV = true fs.writeFileSync('/.env', 'FOO=1') fs.writeFileSync('/.env.staging', 'FOO=2\nNODE_ENV=production') createMockService([], true, 'staging') @@ -53,8 +53,7 @@ test('env loading for custom mode', () => { expect(process.env.FOO).toBe('2') expect(process.env.NODE_ENV).toBe('production') - delete process.env.FOO - process.env.NODE_ENV = prevNodeEnv + process.env.VUE_CLI_TEST_TESTING_ENV = false fs.unlinkSync('/.env') fs.unlinkSync('/.env.staging') }) diff --git a/packages/@vue/cli-service/lib/Service.js b/packages/@vue/cli-service/lib/Service.js index 0f29950ab..bd3082248 100644 --- a/packages/@vue/cli-service/lib/Service.js +++ b/packages/@vue/cli-service/lib/Service.js @@ -103,14 +103,22 @@ module.exports = class Service { // by default, NODE_ENV and BABEL_ENV are set to "development" unless mode // is production or test. However the value in .env files will take higher // priority. - const defaultNodeEnv = (mode === 'production' || mode === 'test') - ? mode - : 'development' - if (process.env.NODE_ENV == null) { - process.env.NODE_ENV = defaultNodeEnv - } - if (process.env.BABEL_ENV == null) { - process.env.BABEL_ENV = defaultNodeEnv + if (mode) { + // always set NODE_ENV during tests + // as that is necessary for tests to not be affected by each other + const shouldForceDefaultEnv = ( + process.env.VUE_CLI_TEST && + !process.env.VUE_CLI_TEST_TESTING_ENV + ) + const defaultNodeEnv = (mode === 'production' || mode === 'test') + ? mode + : 'development' + if (shouldForceDefaultEnv || process.env.NODE_ENV == null) { + process.env.NODE_ENV = defaultNodeEnv + } + if (shouldForceDefaultEnv || process.env.BABEL_ENV == null) { + process.env.BABEL_ENV = defaultNodeEnv + } } }