Skip to content

Commit 3154491

Browse files
committed
Set NODE_ENV=production if 'dev' is on the omit list
Fix: #2021 PR-URL: #2331 Credit: @isaacs Close: #2331 Reviewed-by: @ruyadorno @darcyclarke
1 parent e340cf6 commit 3154491

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

lib/utils/flat-options.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@ const buildOmitList = obj => {
2727
omit.add('optional')
2828

2929
obj.omit = [...omit]
30+
31+
// it would perhaps make more sense to put this in @npmcli/config, but
32+
// since we can set dev to be omitted in multiple various legacy ways,
33+
// it's better to set it here once it's all resolved.
34+
if (obj.omit.includes('dev'))
35+
process.env.NODE_ENV = 'production'
36+
3037
return [...omit]
3138
}
3239

test/lib/utils/flat-options.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const t = require('tap')
22

33
process.env.NODE = '/path/to/some/node'
4+
process.env.NODE_ENV = 'development'
45

56
const logs = []
67
const log = require('npmlog')
@@ -195,43 +196,56 @@ t.test('tag emits warning', t => {
195196

196197
t.test('omit/include options', t => {
197198
t.test('omit explicitly', t => {
199+
const { NODE_ENV } = process.env
198200
const npm = new Mocknpm({
199201
omit: ['dev', 'optional', 'peer'],
200202
})
201203
t.strictSame(flatOptions(npm).omit, ['dev', 'optional', 'peer'])
204+
t.equal(process.env.NODE_ENV, 'production')
205+
process.env.NODE_ENV = NODE_ENV
202206
t.end()
203207
})
204208

205209
t.test('omit and include some', t => {
210+
const { NODE_ENV } = process.env
206211
const npm = new Mocknpm({
207212
omit: ['dev', 'optional', 'peer'],
208213
include: ['peer'],
209214
})
210215
t.strictSame(flatOptions(npm).omit, ['dev', 'optional'])
216+
t.equal(process.env.NODE_ENV, 'production')
217+
process.env.NODE_ENV = NODE_ENV
211218
t.end()
212219
})
213220

214221
t.test('dev flag', t => {
222+
const { NODE_ENV } = process.env
215223
const npm = new Mocknpm({
216224
omit: ['dev', 'optional', 'peer'],
217225
include: [],
218226
dev: true,
219227
})
220228
t.strictSame(flatOptions(npm).omit, ['optional', 'peer'])
229+
t.equal(process.env.NODE_ENV, NODE_ENV)
230+
process.env.NODE_ENV = NODE_ENV
221231
t.end()
222232
})
223233

224234
t.test('production flag', t => {
235+
const { NODE_ENV } = process.env
225236
const npm = new Mocknpm({
226237
omit: [],
227238
include: [],
228239
production: true,
229240
})
230241
t.strictSame(flatOptions(npm).omit, ['dev'])
242+
t.equal(process.env.NODE_ENV, 'production')
243+
process.env.NODE_ENV = NODE_ENV
231244
t.end()
232245
})
233246

234247
t.test('only', t => {
248+
const { NODE_ENV } = process.env
235249
const cases = ['prod', 'production']
236250
t.plan(cases.length)
237251
cases.forEach(c => t.test(c, t => {
@@ -241,26 +255,34 @@ t.test('omit/include options', t => {
241255
only: c,
242256
})
243257
t.strictSame(flatOptions(npm).omit, ['dev'])
258+
t.equal(process.env.NODE_ENV, 'production')
259+
process.env.NODE_ENV = NODE_ENV
244260
t.end()
245261
}))
246262
})
247263

248264
t.test('also dev', t => {
265+
const { NODE_ENV } = process.env
249266
const npm = new Mocknpm({
250267
omit: ['dev', 'optional', 'peer'],
251268
also: 'dev',
252269
})
253270
t.strictSame(flatOptions(npm).omit, ['optional', 'peer'])
271+
t.equal(process.env.NODE_ENV, NODE_ENV)
272+
process.env.NODE_ENV = NODE_ENV
254273
t.end()
255274
})
256275

257276
t.test('no-optional', t => {
277+
const { NODE_ENV } = process.env
258278
const npm = new Mocknpm({
259279
optional: false,
260280
omit: null,
261281
include: null,
262282
})
263283
t.strictSame(flatOptions(npm).omit, ['optional'])
284+
t.equal(process.env.NODE_ENV, NODE_ENV)
285+
process.env.NODE_ENV = NODE_ENV
264286
t.end()
265287
})
266288

0 commit comments

Comments
 (0)