diff --git a/packages/core/src/config.ts b/packages/core/src/config.ts index d194a64d5..2d63d53f3 100644 --- a/packages/core/src/config.ts +++ b/packages/core/src/config.ts @@ -730,16 +730,24 @@ const composeAutoExtensionConfig = ( autoExtension, }); - return { - config: { - output: { - filename: { - js: `[name]${jsExtension}`, - ...config.output?.filename, - }, + const updatedConfig: RsbuildConfig = { + output: { + filename: { + js: `[name]${jsExtension}`, + ...config.output?.filename, }, }, - jsExtension, + }; + + const updatedJsExtension = + typeof updatedConfig.output?.filename?.js === 'string' && + updatedConfig.output?.filename?.js + ? extname(updatedConfig.output.filename.js) + : jsExtension; + + return { + config: updatedConfig, + jsExtension: updatedJsExtension, dtsExtension, }; }; @@ -934,6 +942,7 @@ const composeBundleConfig = ( return callback(); } } else { + // TODO: add redirect.extension option request = `${request}${jsExtension}`; } } diff --git a/tests/integration/bundle-false/index.test.ts b/tests/integration/bundle-false/index.test.ts index 32e1d7cc8..26af6c519 100644 --- a/tests/integration/bundle-false/index.test.ts +++ b/tests/integration/bundle-false/index.test.ts @@ -44,22 +44,44 @@ test('auto add js extension for relative import', async () => { const fixturePath = join(__dirname, 'js-extension'); const { contents } = await buildAndGetResults({ fixturePath }); + // basic esm for (const importer of [ 'import * as __WEBPACK_EXTERNAL_MODULE__bar_js__ from "./bar.js";', 'import * as __WEBPACK_EXTERNAL_MODULE__baz_js__ from "./baz.js";', 'import * as __WEBPACK_EXTERNAL_MODULE__foo_js__ from "./foo.js";', 'import * as __WEBPACK_EXTERNAL_MODULE__qux_js__ from "./qux.js";', ]) { - expect(Object.values(contents.esm)[3]).toContain(importer); + expect(Object.values(contents.esm0!)[3]).toContain(importer); } + // basic cjs for (const requirer of [ 'const external_bar_cjs_namespaceObject = require("./bar.cjs");', 'const external_baz_cjs_namespaceObject = require("./baz.cjs");', 'const external_foo_cjs_namespaceObject = require("./foo.cjs");', 'const external_qux_cjs_namespaceObject = require("./qux.cjs");', ]) { - expect(Object.values(contents.cjs)[3]).toContain(requirer); + expect(Object.values(contents.cjs0!)[3]).toContain(requirer); + } + + // using `autoExtension: false` along with `output.filename.js` - esm + for (const importer of [ + 'import * as __WEBPACK_EXTERNAL_MODULE__bar_mjs__ from "./bar.mjs";', + 'import * as __WEBPACK_EXTERNAL_MODULE__baz_mjs__ from "./baz.mjs";', + 'import * as __WEBPACK_EXTERNAL_MODULE__foo_mjs__ from "./foo.mjs";', + 'import * as __WEBPACK_EXTERNAL_MODULE__qux_mjs__ from "./qux.mjs";', + ]) { + expect(Object.values(contents.esm1!)[3]).toContain(importer); + } + + // using `autoExtension: false` along with `output.filename.js` - cjs + for (const requirer of [ + 'const external_bar_cjs_namespaceObject = require("./bar.cjs");', + 'const external_baz_cjs_namespaceObject = require("./baz.cjs");', + 'const external_foo_cjs_namespaceObject = require("./foo.cjs");', + 'const external_qux_cjs_namespaceObject = require("./qux.cjs");', + ]) { + expect(Object.values(contents.cjs1!)[3]).toContain(requirer); } }); diff --git a/tests/integration/bundle-false/js-extension/rslib.config.ts b/tests/integration/bundle-false/js-extension/rslib.config.ts index 6a10170f6..54ebfec13 100644 --- a/tests/integration/bundle-false/js-extension/rslib.config.ts +++ b/tests/integration/bundle-false/js-extension/rslib.config.ts @@ -5,9 +5,43 @@ export default defineConfig({ lib: [ generateBundleEsmConfig({ bundle: false, + output: { + distPath: { + root: './dist/basic-esm', + }, + }, }), generateBundleCjsConfig({ bundle: false, + output: { + distPath: { + root: './dist/basic-cjs', + }, + }, + }), + generateBundleEsmConfig({ + bundle: false, + output: { + distPath: { + root: './dist/no-auto-extension-esm', + }, + filename: { + js: '[name].mjs', + }, + }, + autoExtension: false, + }), + generateBundleCjsConfig({ + bundle: false, + output: { + distPath: { + root: './dist/no-auto-extension-cjs', + }, + filename: { + js: '[name].cjs', + }, + }, + autoExtension: false, }), ], source: {