Skip to content

Commit ebd0969

Browse files
authored
feat(node-resolve)!: set development or production condition (#1823)
feat(node-resolve): set development or production condition BREAKING CHANGES The `'development'` or `'production'` condition will be set. If neither the `'development'` or `'production'` conditions are provided it will default to `production` - or `development` if `NODE_ENV` is set to a value other than `production`.
1 parent d32bcf6 commit ebd0969

File tree

7 files changed

+35
-4
lines changed

7 files changed

+35
-4
lines changed

Diff for: packages/node-resolve/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ This plugin supports the package entrypoints feature from node js, specified in
5353
Type: `Array[...String]`<br>
5454
Default: `[]`
5555

56-
Additional conditions of the package.json exports field to match when resolving modules. By default, this plugin looks for the `['default', 'module', 'import']` conditions when resolving imports.
56+
Additional conditions of the package.json exports field to match when resolving modules. By default, this plugin looks for the `['default', 'module', 'import', 'development|production']` conditions when resolving imports. If neither the `development` or `production` conditions are provided it will default to `production` - or `development` if `NODE_ENV` is set to a value other than `production`.
5757

5858
When using `@rollup/plugin-commonjs` v16 or higher, this plugin will use the `['default', 'module', 'require']` conditions when resolving require statements.
5959

Diff for: packages/node-resolve/src/index.js

+11-3
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,17 @@ export function nodeResolve(opts = {}) {
5252

5353
const options = { ...defaults, ...opts };
5454
const { extensions, jail, moduleDirectories, modulePaths, ignoreSideEffectsForRoot } = options;
55-
const conditionsEsm = [...baseConditionsEsm, ...(options.exportConditions || [])];
56-
const conditionsCjs = [...baseConditionsCjs, ...(options.exportConditions || [])];
55+
const exportConditions = options.exportConditions || [];
56+
const devProdCondition =
57+
exportConditions.includes('development') || exportConditions.includes('production')
58+
? []
59+
: [
60+
process.env.NODE_ENV && process.env.NODE_ENV !== 'production'
61+
? 'development'
62+
: 'production'
63+
];
64+
const conditionsEsm = [...baseConditionsEsm, ...exportConditions, ...devProdCondition];
65+
const conditionsCjs = [...baseConditionsCjs, ...exportConditions, ...devProdCondition];
5766
const packageInfoCache = new Map();
5867
const idToPackageInfo = new Map();
5968
const mainFields = getMainFields(options);
@@ -171,7 +180,6 @@ export function nodeResolve(opts = {}) {
171180
const warn = (...args) => context.warn(...args);
172181
const isRequire = custom && custom['node-resolve'] && custom['node-resolve'].isRequire;
173182
const exportConditions = isRequire ? conditionsCjs : conditionsEsm;
174-
175183
if (useBrowserOverrides && !exportConditions.includes('browser'))
176184
exportConditions.push('browser');
177185

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import mode from 'dev-prod-conditions';
2+
3+
export default mode;

Diff for: packages/node-resolve/test/fixtures/node_modules/dev-prod-conditions/dev.js

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: packages/node-resolve/test/fixtures/node_modules/dev-prod-conditions/index.js

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: packages/node-resolve/test/fixtures/node_modules/dev-prod-conditions/package.json

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: packages/node-resolve/test/package-entry-points.js

+10
Original file line numberDiff line numberDiff line change
@@ -413,3 +413,13 @@ test('custom condition takes precedence over browser field with `browser: true`'
413413

414414
t.deepEqual(module.exports, 'FROM WEBWORKER CONDITION');
415415
});
416+
417+
test('development condition is used when NODE_ENV is not production', async (t) => {
418+
const bundle = await rollup({
419+
input: 'dev-prod-conditions.js',
420+
plugins: [nodeResolve()]
421+
});
422+
const { module } = await testBundle(t, bundle);
423+
424+
t.deepEqual(module.exports, 'DEV');
425+
});

0 commit comments

Comments
 (0)