fix: fix custom mode NODE_ENV regression

close #1528
This commit is contained in:
Evan You
2018-06-09 15:05:16 -04:00
parent eb709ea887
commit 60de7c460c
2 changed files with 39 additions and 11 deletions

View File

@@ -10,13 +10,13 @@ const mockPkg = json => {
fs.writeFileSync('/package.json', JSON.stringify(json, null, 2))
}
const createMockService = (plugins = [], init = true) => {
const createMockService = (plugins = [], init = true, mode) => {
const service = new Service('/', {
plugins,
useBuiltIn: false
})
if (init) {
service.init()
service.init(mode)
}
return service
}
@@ -30,9 +30,33 @@ test('env loading', () => {
fs.writeFileSync('/.env.local', `FOO=1\nBAR=2`)
fs.writeFileSync('/.env', `BAR=3\nBAZ=4`)
createMockService()
expect(process.env.FOO).toBe('0')
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
fs.writeFileSync('/.env', 'FOO=1')
fs.writeFileSync('/.env.staging', 'FOO=2\nNODE_ENV=production')
createMockService([], true, 'staging')
expect(process.env.FOO).toBe('2')
expect(process.env.NODE_ENV).toBe('production')
delete process.env.FOO
process.env.NODE_ENV = prevNodeEnv
fs.unlinkSync('/.env')
fs.unlinkSync('/.env.staging')
})
test('loading plugins from package.json', () => {

View File

@@ -81,15 +81,6 @@ module.exports = class Service {
}
loadEnv (mode) {
if (mode) {
// by default, NODE_ENV and BABEL_ENV are set to "development" unless mode
// is production or test. However this can be overwritten in .env files.
process.env.NODE_ENV = process.env.BABEL_ENV =
(mode === 'production' || mode === 'test')
? mode
: 'development'
}
const logger = debug('vue:env')
const basePath = path.resolve(this.context, `.env${mode ? `.${mode}` : ``}`)
const localPath = `${basePath}.local`
@@ -108,6 +99,19 @@ module.exports = class Service {
load(localPath)
load(basePath)
// 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
}
}
resolvePlugins (inlinePlugins, useBuiltIn) {