diff --git a/packages/core/integration-tests/test/integration/resolve-mode-condition/default.js b/packages/core/integration-tests/test/integration/resolve-mode-condition/default.js new file mode 100644 index 00000000000..c86d8e99a46 --- /dev/null +++ b/packages/core/integration-tests/test/integration/resolve-mode-condition/default.js @@ -0,0 +1 @@ +throw new Error('Should never resolve'); diff --git a/packages/core/integration-tests/test/integration/resolve-mode-condition/dev.js b/packages/core/integration-tests/test/integration/resolve-mode-condition/dev.js new file mode 100644 index 00000000000..c063c3ad5cf --- /dev/null +++ b/packages/core/integration-tests/test/integration/resolve-mode-condition/dev.js @@ -0,0 +1 @@ +export const isDevelopment = true; diff --git a/packages/core/integration-tests/test/integration/resolve-mode-condition/index.js b/packages/core/integration-tests/test/integration/resolve-mode-condition/index.js new file mode 100644 index 00000000000..ee1b85e65d2 --- /dev/null +++ b/packages/core/integration-tests/test/integration/resolve-mode-condition/index.js @@ -0,0 +1,2 @@ +import {isDevelopment} from '#is-development'; +export default isDevelopment ? 'development' : 'production'; diff --git a/packages/core/integration-tests/test/integration/resolve-mode-condition/package.json b/packages/core/integration-tests/test/integration/resolve-mode-condition/package.json new file mode 100644 index 00000000000..217ee3d60da --- /dev/null +++ b/packages/core/integration-tests/test/integration/resolve-mode-condition/package.json @@ -0,0 +1,13 @@ +{ + "module": "dist/module.js", + "imports": { + "#is-development": { + "development": "./dev.js", + "production": "./prod.js", + "default": "./default.js" + } + }, + "@parcel/resolver-default": { + "packageExports": true + } +} diff --git a/packages/core/integration-tests/test/integration/resolve-mode-condition/prod.js b/packages/core/integration-tests/test/integration/resolve-mode-condition/prod.js new file mode 100644 index 00000000000..06dd9e3d3b3 --- /dev/null +++ b/packages/core/integration-tests/test/integration/resolve-mode-condition/prod.js @@ -0,0 +1 @@ +export const isDevelopment = false; diff --git a/packages/core/integration-tests/test/integration/resolve-mode-condition/yarn.lock b/packages/core/integration-tests/test/integration/resolve-mode-condition/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/resolver.js b/packages/core/integration-tests/test/resolver.js index c8a5a3f7606..edfdcb6c5f8 100644 --- a/packages/core/integration-tests/test/resolver.js +++ b/packages/core/integration-tests/test/resolver.js @@ -426,4 +426,22 @@ describe('resolver', function () { let output = await run(b); assert.strictEqual(output.default, 'hello bar'); }); + + it('should support the development and production import conditions', async () => { + let b = await bundle( + path.join(__dirname, '/integration/resolve-mode-condition/index.js'), + {mode: 'development'}, + ); + + let output = await run(b); + assert.strictEqual(output.default, 'development'); + + b = await bundle( + path.join(__dirname, '/integration/resolve-mode-condition/index.js'), + {mode: 'production'}, + ); + + output = await run(b); + assert.strictEqual(output.default, 'production'); + }); }); diff --git a/packages/resolvers/default/src/DefaultResolver.js b/packages/resolvers/default/src/DefaultResolver.js index 071488dd883..cbd2ff1ae22 100644 --- a/packages/resolvers/default/src/DefaultResolver.js +++ b/packages/resolvers/default/src/DefaultResolver.js @@ -18,6 +18,7 @@ export default (new Resolver({ projectRoot: options.projectRoot, packageManager: options.packageManager, shouldAutoInstall: options.shouldAutoInstall, + mode: options.mode, logger, packageExports: conf?.contents?.packageExports ?? false, }); diff --git a/packages/resolvers/glob/src/GlobResolver.js b/packages/resolvers/glob/src/GlobResolver.js index 32a77710129..dec14447ad3 100644 --- a/packages/resolvers/glob/src/GlobResolver.js +++ b/packages/resolvers/glob/src/GlobResolver.js @@ -83,6 +83,7 @@ export default (new Resolver({ packageManager: options.shouldAutoInstall ? options.packageManager : undefined, + mode: options.mode, logger, }); diff --git a/packages/utils/node-resolver-core/src/Wrapper.js b/packages/utils/node-resolver-core/src/Wrapper.js index 2d8d0f051ce..17144dc4de5 100644 --- a/packages/utils/node-resolver-core/src/Wrapper.js +++ b/packages/utils/node-resolver-core/src/Wrapper.js @@ -47,7 +47,7 @@ type Options = {| packageManager?: PackageManager, logger?: PluginLogger, shouldAutoInstall?: boolean, - mode?: BuildMode, + mode: BuildMode, mainFields?: Array, extensions?: Array, packageExports?: boolean,