From 28279f905631100314593ef9de4b71ebf9d3ecf4 Mon Sep 17 00:00:00 2001 From: fi3ework Date: Wed, 5 Mar 2025 21:28:46 +0800 Subject: [PATCH] fix!: change to `commonjs-static` library type of commonjs format --- packages/core/src/config.ts | 2 +- .../tests/__snapshots__/config.test.ts.snap | 2 +- .../alias/__snapshots__/index.test.ts.snap | 10 +++--- .../asset/__snapshots__/index.test.ts.snap | 31 +++++++++++------- tests/integration/asset/index.test.ts | 24 ++++++++------ .../integration/auto-extension/index.test.ts | 6 ++-- .../__snapshots__/index.test.ts.snap | 10 ++++-- tests/integration/bundle-false/index.test.ts | 16 ++++++---- .../__snapshots__/index.test.ts.snap | 5 ++- .../format/cjs-static-export/rslib.config.ts | 22 +++++++++++++ .../format/cjs-static-export/src/index.js | 1 + .../format/cjs-static-export/src/value.js | 2 ++ .../{ => import-meta-url}/rslib.config.ts | 0 .../format/{ => import-meta-url}/src/index.js | 0 .../format/{ => import-meta-url}/src/value.js | 0 tests/integration/format/index.test.ts | 32 ++++++++++++++++--- 16 files changed, 115 insertions(+), 48 deletions(-) create mode 100644 tests/integration/format/cjs-static-export/rslib.config.ts create mode 100644 tests/integration/format/cjs-static-export/src/index.js create mode 100644 tests/integration/format/cjs-static-export/src/value.js rename tests/integration/format/{ => import-meta-url}/rslib.config.ts (100%) rename tests/integration/format/{ => import-meta-url}/src/index.js (100%) rename tests/integration/format/{ => import-meta-url}/src/value.js (100%) diff --git a/packages/core/src/config.ts b/packages/core/src/config.ts index 41994a87f..ac43f318c 100644 --- a/packages/core/src/config.ts +++ b/packages/core/src/config.ts @@ -626,7 +626,7 @@ const composeFormatConfig = ({ iife: false, chunkFormat: 'commonjs', library: { - type: 'commonjs', + type: 'commonjs-static', }, chunkLoading: 'require', workerChunkLoading: 'async-node', diff --git a/packages/core/tests/__snapshots__/config.test.ts.snap b/packages/core/tests/__snapshots__/config.test.ts.snap index 7331adaf6..180cf01af 100644 --- a/packages/core/tests/__snapshots__/config.test.ts.snap +++ b/packages/core/tests/__snapshots__/config.test.ts.snap @@ -449,7 +449,7 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config i "chunkLoading": "require", "iife": false, "library": { - "type": "commonjs", + "type": "commonjs-static", }, "wasmLoading": "async-node", "workerChunkLoading": "async-node", diff --git a/tests/integration/alias/__snapshots__/index.test.ts.snap b/tests/integration/alias/__snapshots__/index.test.ts.snap index 3ff127d40..88d850b1b 100644 --- a/tests/integration/alias/__snapshots__/index.test.ts.snap +++ b/tests/integration/alias/__snapshots__/index.test.ts.snap @@ -11,9 +11,8 @@ exports[`source.alias 2`] = ` var __webpack_exports__ = {}; const a = 'hello world'; console.info(a); -var __webpack_export_target__ = exports; -for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; -if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { +for(var __webpack_i__ in __webpack_exports__)exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; +Object.defineProperty(exports, '__esModule', { value: true }); " @@ -30,9 +29,8 @@ exports[`source.alias 4`] = ` var __webpack_exports__ = {}; const external_a_cjs_namespaceObject = require("./a.cjs"); console.info(external_a_cjs_namespaceObject.a); -var __webpack_export_target__ = exports; -for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; -if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { +for(var __webpack_i__ in __webpack_exports__)exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; +Object.defineProperty(exports, '__esModule', { value: true }); " diff --git a/tests/integration/asset/__snapshots__/index.test.ts.snap b/tests/integration/asset/__snapshots__/index.test.ts.snap index bd435f88a..fafe4e475 100644 --- a/tests/integration/asset/__snapshots__/index.test.ts.snap +++ b/tests/integration/asset/__snapshots__/index.test.ts.snap @@ -128,9 +128,13 @@ const SvgLogo = (props)=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("svg }) }); const logo_rslib_entry_ = require("../static/svg/logo.svg"); -var __webpack_export_target__ = exports; -for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; -if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { +exports.ReactComponent = __webpack_exports__.ReactComponent; +exports["default"] = __webpack_exports__["default"]; +for(var __webpack_i__ in __webpack_exports__)if (-1 === [ + "ReactComponent", + "default" +].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; +Object.defineProperty(exports, '__esModule', { value: true }); " @@ -218,9 +222,11 @@ const SvgLogo = (props)=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("svg }) }); const logo_rslib_entry_ = SvgLogo; -var __webpack_export_target__ = exports; -for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; -if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { +exports["default"] = __webpack_exports__["default"]; +for(var __webpack_i__ in __webpack_exports__)if (-1 === [ + "default" +].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; +Object.defineProperty(exports, '__esModule', { value: true }); " @@ -250,9 +256,11 @@ function __webpack_require__(moduleId) { return module.exports; } var __webpack_exports__ = __webpack_require__("./src/assets/logo2.svg?__rslib_entry__"); -var __webpack_export_target__ = exports; -for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; -if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { +exports["default"] = __webpack_exports__["default"]; +for(var __webpack_i__ in __webpack_exports__)if (-1 === [ + "default" +].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; +Object.defineProperty(exports, '__esModule', { value: true }); " @@ -368,9 +376,8 @@ const logo_SvgLogo = (props)=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx) const logo = require("./static/svg/logo.svg"); console.log('namedImport', 'ReactComponent', logo_SvgLogo); console.log('defaultImport', 'Url', logo); -var __webpack_export_target__ = exports; -for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; -if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { +for(var __webpack_i__ in __webpack_exports__)exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; +Object.defineProperty(exports, '__esModule', { value: true }); " diff --git a/tests/integration/asset/index.test.ts b/tests/integration/asset/index.test.ts index 15cdc6a49..0bd8a721e 100644 --- a/tests/integration/asset/index.test.ts +++ b/tests/integration/asset/index.test.ts @@ -72,9 +72,11 @@ test('set the size threshold to inline static assets', async () => { return module.exports; } var __webpack_exports__ = __webpack_require__("./src/assets/logo.svg?__rslib_entry__"); - var __webpack_export_target__ = exports; - for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; - if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { + exports["default"] = __webpack_exports__["default"]; + for(var __webpack_i__ in __webpack_exports__)if (-1 === [ + "default" + ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; + Object.defineProperty(exports, '__esModule', { value: true }); " @@ -130,9 +132,11 @@ test('set the assets filename with hash', async () => { return module.exports; } var __webpack_exports__ = __webpack_require__("./src/assets/image.png?__rslib_entry__"); - var __webpack_export_target__ = exports; - for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; - if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { + exports["default"] = __webpack_exports__["default"]; + for(var __webpack_i__ in __webpack_exports__)if (-1 === [ + "default" + ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; + Object.defineProperty(exports, '__esModule', { value: true }); " @@ -188,9 +192,11 @@ test('set the assets output path', async () => { return module.exports; } var __webpack_exports__ = __webpack_require__("./src/assets/image.png?__rslib_entry__"); - var __webpack_export_target__ = exports; - for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; - if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { + exports["default"] = __webpack_exports__["default"]; + for(var __webpack_i__ in __webpack_exports__)if (-1 === [ + "default" + ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; + Object.defineProperty(exports, '__esModule', { value: true }); " diff --git a/tests/integration/auto-extension/index.test.ts b/tests/integration/auto-extension/index.test.ts index 3787e0311..80d1af441 100644 --- a/tests/integration/auto-extension/index.test.ts +++ b/tests/integration/auto-extension/index.test.ts @@ -42,7 +42,7 @@ describe('should respect output.filename.js and output.filenameHash to override // override output.filename.js expect(extname(entryFiles.esm0!)).toEqual('.mjs'); expect(entryFiles.cjs0).toMatchInlineSnapshot( - `"/tests/integration/auto-extension/type-commonjs/config-override/dist/cjs-override-filename/index.d6fcc5d4.js"`, + `"/tests/integration/auto-extension/type-commonjs/config-override/dist/cjs-override-filename/index.df02628a.js"`, ); // override output.filenameHash @@ -50,7 +50,7 @@ describe('should respect output.filename.js and output.filenameHash to override `"/tests/integration/auto-extension/type-commonjs/config-override/dist/esm-override-filename-hash/index.996a7edd.js"`, ); expect(entryFiles.cjs1).toMatchInlineSnapshot( - `"/tests/integration/auto-extension/type-commonjs/config-override/dist/cjs-override-filename-hash/index.d6fcc5d4.js"`, + `"/tests/integration/auto-extension/type-commonjs/config-override/dist/cjs-override-filename-hash/index.df02628a.js"`, ); }); @@ -69,7 +69,7 @@ describe('should respect output.filename.js and output.filenameHash to override `"/tests/integration/auto-extension/type-module/config-override/dist/esm-override-filename-hash/index.996a7edd.js"`, ); expect(entryFiles.cjs1).toMatchInlineSnapshot( - `"/tests/integration/auto-extension/type-module/config-override/dist/cjs-override-filename-hash/index.d6fcc5d4.js"`, + `"/tests/integration/auto-extension/type-module/config-override/dist/cjs-override-filename-hash/index.df02628a.js"`, ); }); }); diff --git a/tests/integration/bundle-false/__snapshots__/index.test.ts.snap b/tests/integration/bundle-false/__snapshots__/index.test.ts.snap index 3f36f8e33..c260bfdf3 100644 --- a/tests/integration/bundle-false/__snapshots__/index.test.ts.snap +++ b/tests/integration/bundle-false/__snapshots__/index.test.ts.snap @@ -84,9 +84,13 @@ const SvgLogo = (props)=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("svg }) }); const logo_rslib_entry_ = require("../static/svg/logo.svg"); -var __webpack_export_target__ = exports; -for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; -if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { +exports.ReactComponent = __webpack_exports__.ReactComponent; +exports["default"] = __webpack_exports__["default"]; +for(var __webpack_i__ in __webpack_exports__)if (-1 === [ + "ReactComponent", + "default" +].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; +Object.defineProperty(exports, '__esModule', { value: true }); " diff --git a/tests/integration/bundle-false/index.test.ts b/tests/integration/bundle-false/index.test.ts index b51780866..2b37a2020 100644 --- a/tests/integration/bundle-false/index.test.ts +++ b/tests/integration/bundle-false/index.test.ts @@ -217,9 +217,11 @@ test('asset in bundleless', async () => { return module.exports; } var __webpack_exports__ = __webpack_require__("./src/assets/image.png?__rslib_entry__"); - var __webpack_export_target__ = exports; - for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; - if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { + exports["default"] = __webpack_exports__["default"]; + for(var __webpack_i__ in __webpack_exports__)if (-1 === [ + "default" + ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; + Object.defineProperty(exports, '__esModule', { value: true }); " @@ -242,9 +244,11 @@ test('asset in bundleless', async () => { return module.exports; } var __webpack_exports__ = __webpack_require__("./src/assets/logo.svg?__rslib_entry__"); - var __webpack_export_target__ = exports; - for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; - if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { + exports["default"] = __webpack_exports__["default"]; + for(var __webpack_i__ in __webpack_exports__)if (-1 === [ + "default" + ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; + Object.defineProperty(exports, '__esModule', { value: true }); " diff --git a/tests/integration/extension-alias/__snapshots__/index.test.ts.snap b/tests/integration/extension-alias/__snapshots__/index.test.ts.snap index 92ab04d87..72a43c986 100644 --- a/tests/integration/extension-alias/__snapshots__/index.test.ts.snap +++ b/tests/integration/extension-alias/__snapshots__/index.test.ts.snap @@ -6,9 +6,8 @@ var __webpack_exports__ = {}; const bar = 'bar'; const foo = 'foo'; console.log(foo + bar); -var __webpack_export_target__ = exports; -for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__]; -if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', { +for(var __webpack_i__ in __webpack_exports__)exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; +Object.defineProperty(exports, '__esModule', { value: true }); " diff --git a/tests/integration/format/cjs-static-export/rslib.config.ts b/tests/integration/format/cjs-static-export/rslib.config.ts new file mode 100644 index 000000000..394c96727 --- /dev/null +++ b/tests/integration/format/cjs-static-export/rslib.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from '@rslib/core'; +import { generateBundleCjsConfig } from 'test-helper'; + +export default defineConfig({ + lib: [ + generateBundleCjsConfig({ + output: { + distPath: { + root: './dist/cjs', + }, + filename: { + js: '[name].cjs', + }, + }, + }), + ], + source: { + entry: { + index: './src/index.js', + }, + }, +}); diff --git a/tests/integration/format/cjs-static-export/src/index.js b/tests/integration/format/cjs-static-export/src/index.js new file mode 100644 index 000000000..3ad5f24f9 --- /dev/null +++ b/tests/integration/format/cjs-static-export/src/index.js @@ -0,0 +1 @@ +export { foo, bar } from './value.js'; diff --git a/tests/integration/format/cjs-static-export/src/value.js b/tests/integration/format/cjs-static-export/src/value.js new file mode 100644 index 000000000..04f7f43eb --- /dev/null +++ b/tests/integration/format/cjs-static-export/src/value.js @@ -0,0 +1,2 @@ +export const foo = 'foo'; +export const bar = 'bar'; diff --git a/tests/integration/format/rslib.config.ts b/tests/integration/format/import-meta-url/rslib.config.ts similarity index 100% rename from tests/integration/format/rslib.config.ts rename to tests/integration/format/import-meta-url/rslib.config.ts diff --git a/tests/integration/format/src/index.js b/tests/integration/format/import-meta-url/src/index.js similarity index 100% rename from tests/integration/format/src/index.js rename to tests/integration/format/import-meta-url/src/index.js diff --git a/tests/integration/format/src/value.js b/tests/integration/format/import-meta-url/src/value.js similarity index 100% rename from tests/integration/format/src/value.js rename to tests/integration/format/import-meta-url/src/value.js diff --git a/tests/integration/format/index.test.ts b/tests/integration/format/index.test.ts index 76d07b2b4..2a25d791a 100644 --- a/tests/integration/format/index.test.ts +++ b/tests/integration/format/index.test.ts @@ -1,15 +1,16 @@ +import path from 'node:path'; import { buildAndGetResults } from 'test-helper'; import { expect, test } from 'vitest'; -test('esm', async () => { - const fixturePath = __dirname; +test('import.meta.url should be preserved', async () => { + const fixturePath = path.resolve(__dirname, 'import-meta-url'); const { files, entries, entryFiles } = await buildAndGetResults({ fixturePath, }); expect(files).toMatchInlineSnapshot(` { "esm": [ - "/tests/integration/format/dist/esm/index.js", + "/tests/integration/format/import-meta-url/dist/esm/index.js", ], } `); @@ -25,7 +26,30 @@ test('esm', async () => { expect(result).toMatchInlineSnapshot(` { "foo": "foo", - "packageDirectory": "/tests/integration/format/dist/esm/", + "packageDirectory": "/tests/integration/format/import-meta-url/dist/esm/", + } + `); +}); + +test('CJS exports should be statically analyzable (cjs-module-lexer for Node.js)', async () => { + const fixturePath = path.resolve(__dirname, 'cjs-static-export'); + const { entryFiles } = await buildAndGetResults({ + fixturePath, + }); + + const { bar, foo } = await import(entryFiles.cjs); + expect(bar).toBe('bar'); + expect(foo).toBe('foo'); + + const cjs = await import(entryFiles.cjs); + expect(cjs).toMatchInlineSnapshot(` + { + "bar": "bar", + "default": { + "bar": "bar", + "foo": "foo", + }, + "foo": "foo", } `); });