Skip to content

Commit 60de7c4

Browse files
committed
fix: fix custom mode NODE_ENV regression
close #1528
1 parent eb709ea commit 60de7c4

File tree

2 files changed

+39
-11
lines changed

2 files changed

+39
-11
lines changed

packages/@vue/cli-service/__tests__/Service.spec.js

+26-2
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ const mockPkg = json => {
1010
fs.writeFileSync('/package.json', JSON.stringify(json, null, 2))
1111
}
1212

13-
const createMockService = (plugins = [], init = true) => {
13+
const createMockService = (plugins = [], init = true, mode) => {
1414
const service = new Service('/', {
1515
plugins,
1616
useBuiltIn: false
1717
})
1818
if (init) {
19-
service.init()
19+
service.init(mode)
2020
}
2121
return service
2222
}
@@ -30,9 +30,33 @@ test('env loading', () => {
3030
fs.writeFileSync('/.env.local', `FOO=1\nBAR=2`)
3131
fs.writeFileSync('/.env', `BAR=3\nBAZ=4`)
3232
createMockService()
33+
3334
expect(process.env.FOO).toBe('0')
3435
expect(process.env.BAR).toBe('2')
3536
expect(process.env.BAZ).toBe('4')
37+
38+
delete process.env.FOO
39+
delete process.env.BAR
40+
delete process.env.BAZ
41+
fs.unlinkSync('/.env.local')
42+
fs.unlinkSync('/.env')
43+
})
44+
45+
test('env loading for custom mode', () => {
46+
const prevNodeEnv = process.env.NODE_ENV
47+
delete process.env.NODE_ENV
48+
49+
fs.writeFileSync('/.env', 'FOO=1')
50+
fs.writeFileSync('/.env.staging', 'FOO=2\nNODE_ENV=production')
51+
createMockService([], true, 'staging')
52+
53+
expect(process.env.FOO).toBe('2')
54+
expect(process.env.NODE_ENV).toBe('production')
55+
56+
delete process.env.FOO
57+
process.env.NODE_ENV = prevNodeEnv
58+
fs.unlinkSync('/.env')
59+
fs.unlinkSync('/.env.staging')
3660
})
3761

3862
test('loading plugins from package.json', () => {

packages/@vue/cli-service/lib/Service.js

+13-9
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,6 @@ module.exports = class Service {
8181
}
8282

8383
loadEnv (mode) {
84-
if (mode) {
85-
// by default, NODE_ENV and BABEL_ENV are set to "development" unless mode
86-
// is production or test. However this can be overwritten in .env files.
87-
process.env.NODE_ENV = process.env.BABEL_ENV =
88-
(mode === 'production' || mode === 'test')
89-
? mode
90-
: 'development'
91-
}
92-
9384
const logger = debug('vue:env')
9485
const basePath = path.resolve(this.context, `.env${mode ? `.${mode}` : ``}`)
9586
const localPath = `${basePath}.local`
@@ -108,6 +99,19 @@ module.exports = class Service {
10899

109100
load(localPath)
110101
load(basePath)
102+
103+
// by default, NODE_ENV and BABEL_ENV are set to "development" unless mode
104+
// is production or test. However the value in .env files will take higher
105+
// priority.
106+
const defaultNodeEnv = (mode === 'production' || mode === 'test')
107+
? mode
108+
: 'development'
109+
if (process.env.NODE_ENV == null) {
110+
process.env.NODE_ENV = defaultNodeEnv
111+
}
112+
if (process.env.BABEL_ENV == null) {
113+
process.env.BABEL_ENV = defaultNodeEnv
114+
}
111115
}
112116

113117
resolvePlugins (inlinePlugins, useBuiltIn) {

0 commit comments

Comments
 (0)