diff --git a/packages/core/src/config.ts b/packages/core/src/config.ts index 3d54aad76..a519c9400 100644 --- a/packages/core/src/config.ts +++ b/packages/core/src/config.ts @@ -247,6 +247,9 @@ export async function createConstantRsbuildConfig(): Promise tools: { htmlPlugin: false, rspack: { + experiments: { + runtimeMode: 'rspack', + }, optimization: { nodeEnv: false, }, diff --git a/packages/core/tests/__snapshots__/config.test.ts.snap b/packages/core/tests/__snapshots__/config.test.ts.snap index f342a8960..952d0888b 100644 --- a/packages/core/tests/__snapshots__/config.test.ts.snap +++ b/packages/core/tests/__snapshots__/config.test.ts.snap @@ -308,7 +308,8 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config i aggregateTimeout: 0 }, experiments: { - sourceImport: true + sourceImport: true, + runtimeMode: 'rspack' }, devtool: false, cache: { @@ -1174,7 +1175,8 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config i aggregateTimeout: 0 }, experiments: { - sourceImport: true + sourceImport: true, + runtimeMode: 'rspack' }, devtool: false, cache: { @@ -2037,7 +2039,8 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config i aggregateTimeout: 0 }, experiments: { - sourceImport: true + sourceImport: true, + runtimeMode: 'rspack' }, devtool: false, cache: { @@ -2810,7 +2813,8 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config i aggregateTimeout: 0 }, experiments: { - sourceImport: true + sourceImport: true, + runtimeMode: 'rspack' }, devtool: false, cache: { @@ -3588,7 +3592,8 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config i aggregateTimeout: 0 }, experiments: { - sourceImport: true + sourceImport: true, + runtimeMode: 'rspack' }, devtool: false, cache: { @@ -4419,6 +4424,9 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config i "htmlPlugin": false, "rspack": [ { + "experiments": { + "runtimeMode": "rspack", + }, "optimization": { "nodeEnv": false, }, @@ -4694,6 +4702,9 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config i "htmlPlugin": false, "rspack": [ { + "experiments": { + "runtimeMode": "rspack", + }, "optimization": { "nodeEnv": false, }, @@ -4942,6 +4953,9 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config i "htmlPlugin": false, "rspack": [ { + "experiments": { + "runtimeMode": "rspack", + }, "optimization": { "nodeEnv": false, }, @@ -5179,6 +5193,9 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config i "htmlPlugin": false, "rspack": [ { + "experiments": { + "runtimeMode": "rspack", + }, "optimization": { "nodeEnv": false, }, @@ -5371,6 +5388,9 @@ exports[`Should compose create Rsbuild config correctly > Merge Rsbuild config i "htmlPlugin": false, "rspack": [ { + "experiments": { + "runtimeMode": "rspack", + }, "optimization": { "nodeEnv": false, }, diff --git a/packages/core/tests/config.test.ts b/packages/core/tests/config.test.ts index a7e3e3d62..8ca4b05d1 100644 --- a/packages/core/tests/config.test.ts +++ b/packages/core/tests/config.test.ts @@ -481,6 +481,32 @@ describe('CLI options', () => { }); describe('Should compose create Rsbuild config correctly', () => { + test('uses Rspack runtime mode by default and allows overriding it', async () => { + const defaultRslib = await createRslib({}); + const { + origin: { bundlerConfigs: defaultBundlerConfigs }, + } = await defaultRslib.inspectConfig({ verbose: true }); + expect(defaultBundlerConfigs[0]?.experiments?.runtimeMode).toBe('rspack'); + + const overriddenRslib = await createRslib({ + config: { + tools: { + rspack: { + experiments: { + runtimeMode: 'webpack', + }, + }, + }, + }, + }); + const { + origin: { bundlerConfigs: overriddenBundlerConfigs }, + } = await overriddenRslib.inspectConfig({ verbose: true }); + expect(overriddenBundlerConfigs[0]?.experiments?.runtimeMode).toBe( + 'webpack', + ); + }); + test('treats omitted lib field as default library config', async () => { const rslibConfig: RslibConfig = { root: join(__dirname, '..'), diff --git a/tests/integration/alias/__snapshots__/index.test.ts.snap b/tests/integration/alias/__snapshots__/index.test.ts.snap index c13b082f0..e5b1314b4 100644 --- a/tests/integration/alias/__snapshots__/index.test.ts.snap +++ b/tests/integration/alias/__snapshots__/index.test.ts.snap @@ -9,10 +9,10 @@ export { }; exports[`source.alias 2`] = ` ""use strict"; -var __webpack_exports__ = {}; +var __rspack_exports = {}; const a = 'hello world'; console.info(a); -for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i]; +for(var __rspack_i in __rspack_exports)exports[__rspack_i] = __rspack_exports[__rspack_i]; Object.defineProperty(exports, '__esModule', { value: true }); @@ -27,10 +27,10 @@ console.info(a); exports[`source.alias 4`] = ` ""use strict"; -var __webpack_exports__ = {}; +var __rspack_exports = {}; const external_a_cjs_namespaceObject = require("./a.cjs"); console.info(external_a_cjs_namespaceObject.a); -for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i]; +for(var __rspack_i in __rspack_exports)exports[__rspack_i] = __rspack_exports[__rspack_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 9260557ab..b35cd5095 100644 --- a/tests/integration/asset/__snapshots__/index.test.ts.snap +++ b/tests/integration/asset/__snapshots__/index.test.ts.snap @@ -57,11 +57,11 @@ export { SvgLogo as ReactComponent }; exports[`use svgr > mixedImport: true should contain export { url as default, ReactComponent } 2`] = ` ""use strict"; -var __webpack_require__ = {}; -(()=>{ - __webpack_require__.d = (exports1, getters, values)=>{ +var __rspack_context = {}; +(function() { + var definePropertyGetters = (exports1, getters, values)=>{ var define = (defs, kind)=>{ - for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, { + for(var key in defs)if (hasOwnProperty(defs, key) && !hasOwnProperty(exports1, key)) Object.defineProperty(exports1, key, { enumerable: true, [kind]: defs[key] }); @@ -69,12 +69,9 @@ var __webpack_require__ = {}; define(getters, "get"); define(values, "value"); }; -})(); -(()=>{ - __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); -})(); -(()=>{ - __webpack_require__.r = (exports1)=>{ + __rspack_context.d = definePropertyGetters; + var hasOwnProperty = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); + var makeNamespaceObject = (exports1)=>{ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, { value: 'Module' }); @@ -82,10 +79,11 @@ var __webpack_require__ = {}; value: true }); }; + __rspack_context.N = makeNamespaceObject; })(); -var __webpack_exports__ = {}; -__webpack_require__.r(__webpack_exports__); -__webpack_require__.d(__webpack_exports__, { +var __rspack_exports = {}; +__rspack_context.N(__rspack_exports); +__rspack_context.d(__rspack_exports, { ReactComponent: ()=>SvgLogo, default: ()=>logo }); @@ -113,12 +111,12 @@ const SvgLogo = (props)=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("svg }) }); const logo = require("../static/svg/logo.svg"); -exports.ReactComponent = __webpack_exports__.ReactComponent; -exports["default"] = __webpack_exports__["default"]; -for(var __rspack_i in __webpack_exports__)if (-1 === [ +exports.ReactComponent = __rspack_exports.ReactComponent; +exports["default"] = __rspack_exports["default"]; +for(var __rspack_i in __rspack_exports)if (-1 === [ "ReactComponent", "default" -].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i]; +].indexOf(__rspack_i)) exports[__rspack_i] = __rspack_exports[__rspack_i]; Object.defineProperty(exports, '__esModule', { value: true }); @@ -156,11 +154,11 @@ export default logo; exports[`use svgr > should only contain svgr default export 2`] = ` ""use strict"; -var __webpack_require__ = {}; -(()=>{ - __webpack_require__.d = (exports1, getters, values)=>{ +var __rspack_context = {}; +(function() { + var definePropertyGetters = (exports1, getters, values)=>{ var define = (defs, kind)=>{ - for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, { + for(var key in defs)if (hasOwnProperty(defs, key) && !hasOwnProperty(exports1, key)) Object.defineProperty(exports1, key, { enumerable: true, [kind]: defs[key] }); @@ -168,12 +166,9 @@ var __webpack_require__ = {}; define(getters, "get"); define(values, "value"); }; -})(); -(()=>{ - __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); -})(); -(()=>{ - __webpack_require__.r = (exports1)=>{ + __rspack_context.d = definePropertyGetters; + var hasOwnProperty = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); + var makeNamespaceObject = (exports1)=>{ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, { value: 'Module' }); @@ -181,10 +176,11 @@ var __webpack_require__ = {}; value: true }); }; + __rspack_context.N = makeNamespaceObject; })(); -var __webpack_exports__ = {}; -__webpack_require__.r(__webpack_exports__); -__webpack_require__.d(__webpack_exports__, { +var __rspack_exports = {}; +__rspack_context.N(__rspack_exports); +__rspack_context.d(__rspack_exports, { default: ()=>logo }); const jsx_runtime_namespaceObject = require("react/jsx-runtime"); @@ -211,10 +207,10 @@ const SvgLogo = (props)=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("svg }) }); const logo = SvgLogo; -exports["default"] = __webpack_exports__["default"]; -for(var __rspack_i in __webpack_exports__)if (-1 === [ +exports["default"] = __rspack_exports["default"]; +for(var __rspack_i in __rspack_exports)if (-1 === [ "default" -].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i]; +].indexOf(__rspack_i)) exports[__rspack_i] = __rspack_exports[__rspack_i]; Object.defineProperty(exports, '__esModule', { value: true }); @@ -229,26 +225,28 @@ export default logo2_namespaceObject; exports[`use svgr > should only contain url default export 2`] = ` ""use strict"; -var __webpack_modules__ = { +var __rspack_modules = { h (module) { module.exports = require("../static/svg/logo2.svg"); } }; -var __webpack_module_cache__ = {}; -function __webpack_require__(moduleId) { - var cachedModule = __webpack_module_cache__[moduleId]; +var __rspack_module_cache = {}; +var __rspack_context = {}; +function __rspack_require(moduleId) { + var cachedModule = __rspack_module_cache[moduleId]; if (void 0 !== cachedModule) return cachedModule.exports; - var module = __webpack_module_cache__[moduleId] = { + var module = __rspack_module_cache[moduleId] = { exports: {} }; - __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + __rspack_modules[moduleId](module, module.exports, __rspack_context); return module.exports; } -var __webpack_exports__ = __webpack_require__("h"); -exports["default"] = __webpack_exports__["default"]; -for(var __rspack_i in __webpack_exports__)if (-1 === [ +__rspack_context.r = __rspack_require; +var __rspack_exports = __rspack_context.r("h"); +exports["default"] = __rspack_exports["default"]; +for(var __rspack_i in __rspack_exports)if (-1 === [ "default" -].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i]; +].indexOf(__rspack_i)) exports[__rspack_i] = __rspack_exports[__rspack_i]; Object.defineProperty(exports, '__esModule', { value: true }); @@ -313,7 +311,7 @@ console.log('defaultImport', 'Url', logo); exports[`use svgr 2`] = ` ""use strict"; -var __webpack_exports__ = {}; +var __rspack_exports = {}; const jsx_runtime_namespaceObject = require("react/jsx-runtime"); require("react"); const SvgLogo = (props)=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("svg", { @@ -365,7 +363,7 @@ 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); -for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i]; +for(var __rspack_i in __rspack_exports)exports[__rspack_i] = __rspack_exports[__rspack_i]; Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/tests/integration/asset/index.test.ts b/tests/integration/asset/index.test.ts index 76a8edf84..e76f22c9d 100644 --- a/tests/integration/asset/index.test.ts +++ b/tests/integration/asset/index.test.ts @@ -1,9 +1,9 @@ -import { expect, test } from '@rstest/core'; import { existsSync } from 'node:fs'; import { readFile } from 'node:fs/promises'; import { createRequire } from 'node:module'; import { dirname, join } from 'node:path'; import { pathToFileURL } from 'node:url'; +import { expect, test } from '@rstest/core'; import { buildAndGetResults, queryContent } from 'test-helper'; const require = createRequire(import.meta.url); @@ -62,26 +62,28 @@ test('set the size threshold to inline static assets', async () => { ); expect(logoCjs2).toMatchInlineSnapshot(` ""use strict"; - var __webpack_modules__ = { + var __rspack_modules = { V (module) { module.exports = require("../static/svg/logo.svg"); } }; - var __webpack_module_cache__ = {}; - function __webpack_require__(moduleId) { - var cachedModule = __webpack_module_cache__[moduleId]; + var __rspack_module_cache = {}; + var __rspack_context = {}; + function __rspack_require(moduleId) { + var cachedModule = __rspack_module_cache[moduleId]; if (void 0 !== cachedModule) return cachedModule.exports; - var module = __webpack_module_cache__[moduleId] = { + var module = __rspack_module_cache[moduleId] = { exports: {} }; - __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + __rspack_modules[moduleId](module, module.exports, __rspack_context); return module.exports; } - var __webpack_exports__ = __webpack_require__("V"); - exports["default"] = __webpack_exports__["default"]; - for(var __rspack_i in __webpack_exports__)if (-1 === [ + __rspack_context.r = __rspack_require; + var __rspack_exports = __rspack_context.r("V"); + exports["default"] = __rspack_exports["default"]; + for(var __rspack_i in __rspack_exports)if (-1 === [ "default" - ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i]; + ].indexOf(__rspack_i)) exports[__rspack_i] = __rspack_exports[__rspack_i]; Object.defineProperty(exports, '__esModule', { value: true }); @@ -122,26 +124,28 @@ test('set the assets filename with hash', async () => { ); expect(imageCjs1).toMatchInlineSnapshot(` ""use strict"; - var __webpack_modules__ = { + var __rspack_modules = { r (module) { module.exports = require("../static/image/image.c74653c171.png"); } }; - var __webpack_module_cache__ = {}; - function __webpack_require__(moduleId) { - var cachedModule = __webpack_module_cache__[moduleId]; + var __rspack_module_cache = {}; + var __rspack_context = {}; + function __rspack_require(moduleId) { + var cachedModule = __rspack_module_cache[moduleId]; if (void 0 !== cachedModule) return cachedModule.exports; - var module = __webpack_module_cache__[moduleId] = { + var module = __rspack_module_cache[moduleId] = { exports: {} }; - __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + __rspack_modules[moduleId](module, module.exports, __rspack_context); return module.exports; } - var __webpack_exports__ = __webpack_require__("r"); - exports["default"] = __webpack_exports__["default"]; - for(var __rspack_i in __webpack_exports__)if (-1 === [ + __rspack_context.r = __rspack_require; + var __rspack_exports = __rspack_context.r("r"); + exports["default"] = __rspack_exports["default"]; + for(var __rspack_i in __rspack_exports)if (-1 === [ "default" - ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i]; + ].indexOf(__rspack_i)) exports[__rspack_i] = __rspack_exports[__rspack_i]; Object.defineProperty(exports, '__esModule', { value: true }); @@ -182,26 +186,28 @@ test('set the assets output path', async () => { ); expect(imageCjs1).toMatchInlineSnapshot(` ""use strict"; - var __webpack_modules__ = { + var __rspack_modules = { r (module) { module.exports = require("../assets/bundleless/image.png"); } }; - var __webpack_module_cache__ = {}; - function __webpack_require__(moduleId) { - var cachedModule = __webpack_module_cache__[moduleId]; + var __rspack_module_cache = {}; + var __rspack_context = {}; + function __rspack_require(moduleId) { + var cachedModule = __rspack_module_cache[moduleId]; if (void 0 !== cachedModule) return cachedModule.exports; - var module = __webpack_module_cache__[moduleId] = { + var module = __rspack_module_cache[moduleId] = { exports: {} }; - __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + __rspack_modules[moduleId](module, module.exports, __rspack_context); return module.exports; } - var __webpack_exports__ = __webpack_require__("r"); - exports["default"] = __webpack_exports__["default"]; - for(var __rspack_i in __webpack_exports__)if (-1 === [ + __rspack_context.r = __rspack_require; + var __rspack_exports = __rspack_context.r("r"); + exports["default"] = __rspack_exports["default"]; + for(var __rspack_i in __rspack_exports)if (-1 === [ "default" - ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i]; + ].indexOf(__rspack_i)) exports[__rspack_i] = __rspack_exports[__rspack_i]; Object.defineProperty(exports, '__esModule', { value: true }); @@ -213,23 +219,20 @@ test('set the assets public path', async () => { const fixturePath = join(__dirname, 'public-path'); const { contents } = await buildAndGetResults({ fixturePath }); - // 1. umd should preserve '__webpack_require__.p' + // 1. umd should preserve the runtime public path const { content: indexUmdJs } = queryContent(contents.umd!, /index\.js/); - expect(indexUmdJs).toContain('__webpack_require__.p = "/public/path/";'); + expect(indexUmdJs).toContain('__rspack_context.p = publicPath;'); expect(indexUmdJs).toContain( - 'const image_namespaceObject = __webpack_require__.p + "static/image/image.png";', + 'const image_namespaceObject = __rspack_context.p + "static/image/image.png";', ); // 2. bundle // esm const { content: indexJs } = queryContent(contents.esm0!, /index\.js/); expect(indexJs).toMatchInlineSnapshot(` - "var __webpack_require__ = {}; - (()=>{ - __webpack_require__.p = "/public/path/"; - })(); - const image_namespaceObject = __webpack_require__.p + "static/image/image.png"; + "var publicPath = "/public/path/"; + const image_namespaceObject = publicPath + "static/image/image.png"; const src = image_namespaceObject; export default src; " @@ -242,8 +245,8 @@ test('set the assets public path', async () => { /assets\/image\.js/, ); expect(imageJs).toMatchInlineSnapshot(` - "import { __webpack_require__ } from "../rslib-runtime~2.js"; - const image_namespaceObject = __webpack_require__.p + "static/image/image.png"; + "import { publicPath } from "../rslib-runtime~2.js"; + const image_namespaceObject = publicPath + "static/image/image.png"; export default image_namespaceObject; " `); diff --git a/tests/integration/auto-extension/index.test.ts b/tests/integration/auto-extension/index.test.ts index da342d94c..3e5fc073a 100644 --- a/tests/integration/auto-extension/index.test.ts +++ b/tests/integration/auto-extension/index.test.ts @@ -46,7 +46,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.6e60045198.js"`, + `"/tests/integration/auto-extension/type-commonjs/config-override/dist/cjs-override-filename/index.d26be75738.js"`, ); // override output.filenameHash @@ -54,7 +54,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.3ac7e0ff07.js"`, ); expect(entryFiles.cjs1).toMatchInlineSnapshot( - `"/tests/integration/auto-extension/type-commonjs/config-override/dist/cjs-override-filename-hash/index.6e60045198.js"`, + `"/tests/integration/auto-extension/type-commonjs/config-override/dist/cjs-override-filename-hash/index.d26be75738.js"`, ); // override different file types with function @@ -89,7 +89,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.3ac7e0ff07.js"`, ); expect(entryFiles.cjs1).toMatchInlineSnapshot( - `"/tests/integration/auto-extension/type-module/config-override/dist/cjs-override-filename-hash/index.6e60045198.js"`, + `"/tests/integration/auto-extension/type-module/config-override/dist/cjs-override-filename-hash/index.d26be75738.js"`, ); // override different file types with function diff --git a/tests/integration/bundle-false/__snapshots__/index.test.ts.snap b/tests/integration/bundle-false/__snapshots__/index.test.ts.snap index 455d6eb92..7dc8e26de 100644 --- a/tests/integration/bundle-false/__snapshots__/index.test.ts.snap +++ b/tests/integration/bundle-false/__snapshots__/index.test.ts.snap @@ -33,11 +33,11 @@ export { SvgLogo as ReactComponent }; exports[`svgr in bundleless 2`] = ` ""use strict"; -var __webpack_require__ = {}; -(()=>{ - __webpack_require__.d = (exports1, getters, values)=>{ +var __rspack_context = {}; +(function() { + var definePropertyGetters = (exports1, getters, values)=>{ var define = (defs, kind)=>{ - for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, { + for(var key in defs)if (hasOwnProperty(defs, key) && !hasOwnProperty(exports1, key)) Object.defineProperty(exports1, key, { enumerable: true, [kind]: defs[key] }); @@ -45,12 +45,9 @@ var __webpack_require__ = {}; define(getters, "get"); define(values, "value"); }; -})(); -(()=>{ - __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); -})(); -(()=>{ - __webpack_require__.r = (exports1)=>{ + __rspack_context.d = definePropertyGetters; + var hasOwnProperty = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); + var makeNamespaceObject = (exports1)=>{ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, { value: 'Module' }); @@ -58,10 +55,11 @@ var __webpack_require__ = {}; value: true }); }; + __rspack_context.N = makeNamespaceObject; })(); -var __webpack_exports__ = {}; -__webpack_require__.r(__webpack_exports__); -__webpack_require__.d(__webpack_exports__, { +var __rspack_exports = {}; +__rspack_context.N(__rspack_exports); +__rspack_context.d(__rspack_exports, { ReactComponent: ()=>SvgLogo, default: ()=>logo }); @@ -89,12 +87,12 @@ const SvgLogo = (props)=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("svg }) }); const logo = require("../static/svg/logo.svg"); -exports.ReactComponent = __webpack_exports__.ReactComponent; -exports["default"] = __webpack_exports__["default"]; -for(var __rspack_i in __webpack_exports__)if (-1 === [ +exports.ReactComponent = __rspack_exports.ReactComponent; +exports["default"] = __rspack_exports["default"]; +for(var __rspack_i in __rspack_exports)if (-1 === [ "ReactComponent", "default" -].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i]; +].indexOf(__rspack_i)) exports[__rspack_i] = __rspack_exports[__rspack_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 5c651346d..d81584e01 100644 --- a/tests/integration/bundle-false/index.test.ts +++ b/tests/integration/bundle-false/index.test.ts @@ -205,26 +205,28 @@ test('asset in bundleless', async () => { `); expect(Object.values(contents.cjs)[0]).toMatchInlineSnapshot(` ""use strict"; - var __webpack_modules__ = { + var __rspack_modules = { "./src/assets/image.png" (module) { module.exports = require("../static/image/image.png"); } }; - var __webpack_module_cache__ = {}; - function __webpack_require__(moduleId) { - var cachedModule = __webpack_module_cache__[moduleId]; + var __rspack_module_cache = {}; + var __rspack_context = {}; + function __rspack_require(moduleId) { + var cachedModule = __rspack_module_cache[moduleId]; if (void 0 !== cachedModule) return cachedModule.exports; - var module = __webpack_module_cache__[moduleId] = { + var module = __rspack_module_cache[moduleId] = { exports: {} }; - __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + __rspack_modules[moduleId](module, module.exports, __rspack_context); return module.exports; } - var __webpack_exports__ = __webpack_require__("./src/assets/image.png"); - exports["default"] = __webpack_exports__["default"]; - for(var __rspack_i in __webpack_exports__)if (-1 === [ + __rspack_context.r = __rspack_require; + var __rspack_exports = __rspack_context.r("./src/assets/image.png"); + exports["default"] = __rspack_exports["default"]; + for(var __rspack_i in __rspack_exports)if (-1 === [ "default" - ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i]; + ].indexOf(__rspack_i)) exports[__rspack_i] = __rspack_exports[__rspack_i]; Object.defineProperty(exports, '__esModule', { value: true }); @@ -232,26 +234,28 @@ test('asset in bundleless', async () => { `); expect(Object.values(contents.cjs)[1]).toMatchInlineSnapshot(` ""use strict"; - var __webpack_modules__ = { + var __rspack_modules = { "./src/assets/logo.svg" (module) { module.exports = require("../static/svg/logo.svg"); } }; - var __webpack_module_cache__ = {}; - function __webpack_require__(moduleId) { - var cachedModule = __webpack_module_cache__[moduleId]; + var __rspack_module_cache = {}; + var __rspack_context = {}; + function __rspack_require(moduleId) { + var cachedModule = __rspack_module_cache[moduleId]; if (void 0 !== cachedModule) return cachedModule.exports; - var module = __webpack_module_cache__[moduleId] = { + var module = __rspack_module_cache[moduleId] = { exports: {} }; - __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + __rspack_modules[moduleId](module, module.exports, __rspack_context); return module.exports; } - var __webpack_exports__ = __webpack_require__("./src/assets/logo.svg"); - exports["default"] = __webpack_exports__["default"]; - for(var __rspack_i in __webpack_exports__)if (-1 === [ + __rspack_context.r = __rspack_require; + var __rspack_exports = __rspack_context.r("./src/assets/logo.svg"); + exports["default"] = __rspack_exports["default"]; + for(var __rspack_i in __rspack_exports)if (-1 === [ "default" - ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i]; + ].indexOf(__rspack_i)) exports[__rspack_i] = __rspack_exports[__rspack_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 3a20bc759..a23bcd791 100644 --- a/tests/integration/extension-alias/__snapshots__/index.test.ts.snap +++ b/tests/integration/extension-alias/__snapshots__/index.test.ts.snap @@ -2,9 +2,9 @@ exports[`resolve.extensionAlias should work 1`] = ` ""use strict"; -var __webpack_require__ = {}; -(()=>{ - __webpack_require__.r = (exports1)=>{ +var __rspack_context = {}; +(function() { + var makeNamespaceObject = (exports1)=>{ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, { value: 'Module' }); @@ -12,11 +12,12 @@ var __webpack_require__ = {}; value: true }); }; + __rspack_context.N = makeNamespaceObject; })(); -var __webpack_exports__ = {}; -__webpack_require__.r(__webpack_exports__); +var __rspack_exports = {}; +__rspack_context.N(__rspack_exports); console.log("foobar"); -for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i]; +for(var __rspack_i in __rspack_exports)exports[__rspack_i] = __rspack_exports[__rspack_i]; Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/tests/integration/externals/index.test.ts b/tests/integration/externals/index.test.ts index 43ec926f9..68ab1c384 100644 --- a/tests/integration/externals/index.test.ts +++ b/tests/integration/externals/index.test.ts @@ -133,7 +133,7 @@ test('modern-module externals should handle CommonJS requests by target', async expect(nodeOutput).toContain('module.exports = __rspack_external_e8;'); expect(nodeOutput).toContain('"./src/local-false.ts"'); expect(nodeOutput).toContain( - 'const localFalse = __webpack_require__("./src/local-false.ts");', + 'const localFalse = rspackRequire("./src/local-false.ts");', ); expect(nodeOutput).not.toContain('require("./local-false")'); diff --git a/tests/integration/minify/index.test.ts b/tests/integration/minify/index.test.ts index 933266fba..36a675b9c 100644 --- a/tests/integration/minify/index.test.ts +++ b/tests/integration/minify/index.test.ts @@ -1,5 +1,5 @@ -import { describe, expect, test } from '@rstest/core'; import { join } from 'node:path'; +import { describe, expect, test } from '@rstest/core'; import { buildAndGetResults } from 'test-helper'; const normalizeMfExposeEntry = (content: string) => @@ -67,7 +67,7 @@ describe('minify config (mf)', () => { expect(mfExposeEntry).toBeDefined(); expect(normalizeMfExposeEntry(mfExposeEntry!)).toMatchInlineSnapshot(` "/*! LICENSE: __federation_expose_default_export..js.LICENSE.txt */ - "use strict";(globalThis["default_minify"]||=[]).push([["l"],{(__unused_rspack_module,__webpack_exports__,__webpack_require__){__webpack_require__.r(__webpack_exports__);var react_jsx_runtime__rspack_import_0=__webpack_require__("l");/*! Legal Comment */const foo=()=>{};const Button=()=>/*#__PURE__*/(0,react_jsx_runtime__rspack_import_0.jsx)("button",{});__webpack_require__.d(__webpack_exports__,{},{Button:Button,foo:foo})}}]);" + "use strict";(globalThis["default_minify"]||=[]).push([["l"],{(__unused_rspack_module,__rspack_exports,__rspack_context){__rspack_context.N(__rspack_exports);var react_jsx_runtime__rspack_import_0=__rspack_context.r("l");/*! Legal Comment */const foo=()=>{};const Button=()=>/*#__PURE__*/(0,react_jsx_runtime__rspack_import_0.jsx)("button",{});__rspack_context.d(__rspack_exports,{},{Button:Button,foo:foo})}}]);" `); }); @@ -79,10 +79,10 @@ describe('minify config (mf)', () => { expect(normalizeMfExposeEntry(mfExposeEntry!)).toMatchInlineSnapshot(` ""use strict"; (globalThis["disable_minify"] ||= []).push([["l"], { - (__unused_rspack_module, __webpack_exports__, __webpack_require__) { - __webpack_require__.r(__webpack_exports__); - /* import */ var react_jsx_runtime__rspack_import_0 = __webpack_require__("l"); - /* import */ var react_jsx_runtime__rspack_import_0_default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__rspack_import_0); + (__unused_rspack_module, __rspack_exports, __rspack_context) { + __rspack_context.N(__rspack_exports); + /* import */ var react_jsx_runtime__rspack_import_0 = __rspack_context.r("l"); + /* import */ var react_jsx_runtime__rspack_import_0_default = /*#__PURE__*/__rspack_context.n(react_jsx_runtime__rspack_import_0); /*! Legal Comment */ const foo = ()=>{}; const bar = ()=>{}; @@ -92,7 +92,7 @@ describe('minify config (mf)', () => { // normal comment const Button = ()=>/*#__PURE__*/ (0,react_jsx_runtime__rspack_import_0.jsx)('button', {}); - __webpack_require__.d(__webpack_exports__, { + __rspack_context.d(__rspack_exports, { }, { Button: Button, foo: foo diff --git a/tests/integration/node-polyfill/index.test.ts b/tests/integration/node-polyfill/index.test.ts index 8a620279d..bac961c04 100644 --- a/tests/integration/node-polyfill/index.test.ts +++ b/tests/integration/node-polyfill/index.test.ts @@ -1,12 +1,12 @@ -import { expect, test } from '@rstest/core'; import { basename, join } from 'node:path'; +import { expect, test } from '@rstest/core'; import { buildAndGetResults } from 'test-helper'; test('`Buffer` should be imported from polyfill when bundled', async () => { const fixturePath = join(__dirname, './bundle'); const { entries, entryFiles } = await buildAndGetResults({ fixturePath }); const bufferRegex = - /var [\w$]+ = __webpack_require__\((?:"[^"]+"|\d+)\)\.[\w$]+/g; + /var [\w$]+ = (?:rspackRequire|__rspack_context\.r)\((?:"[^"]+"|\d+)\)\.[\w$]+/g; for (const format of ['esm', 'cjs'] as const) { expect(entries[format].match(bufferRegex)?.length).toBe(2); @@ -27,10 +27,10 @@ test('`Buffer` should be aliased to polyfill packages when bundle is disabled', expect(bufferContents).toMatchInlineSnapshot(` [ - "import { __webpack_require__ } from "./rslib-runtime.js"; + "import { moduleFactories } from "./rslib-runtime.js"; import { createRequire as __rspack_createRequire } from "node:module"; const __rspack_createRequire_require = __rspack_createRequire(import.meta.url); - __webpack_require__.add({ + moduleFactories.add({ u (module) { module.exports = __rspack_createRequire_require("buffer"); } diff --git a/tests/integration/preserve-jsx/__snapshots__/index.test.ts.snap b/tests/integration/preserve-jsx/__snapshots__/index.test.ts.snap index 514407cb5..9de019d3d 100644 --- a/tests/integration/preserve-jsx/__snapshots__/index.test.ts.snap +++ b/tests/integration/preserve-jsx/__snapshots__/index.test.ts.snap @@ -2,11 +2,11 @@ exports[`JSX syntax should be preserved 1`] = ` ""use strict"; -var __webpack_require__ = {}; -(()=>{ - __webpack_require__.d = (exports1, getters, values)=>{ +var __rspack_context = {}; +(function() { + var definePropertyGetters = (exports1, getters, values)=>{ var define = (defs, kind)=>{ - for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, { + for(var key in defs)if (hasOwnProperty(defs, key) && !hasOwnProperty(exports1, key)) Object.defineProperty(exports1, key, { enumerable: true, [kind]: defs[key] }); @@ -14,12 +14,9 @@ var __webpack_require__ = {}; define(getters, "get"); define(values, "value"); }; -})(); -(()=>{ - __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); -})(); -(()=>{ - __webpack_require__.r = (exports1)=>{ + __rspack_context.d = definePropertyGetters; + var hasOwnProperty = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); + var makeNamespaceObject = (exports1)=>{ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, { value: 'Module' }); @@ -27,10 +24,11 @@ var __webpack_require__ = {}; value: true }); }; + __rspack_context.N = makeNamespaceObject; })(); -var __webpack_exports__ = {}; -__webpack_require__.r(__webpack_exports__); -__webpack_require__.d(__webpack_exports__, { +var __rspack_exports = {}; +__rspack_context.N(__rspack_exports); +__rspack_context.d(__rspack_exports, { default: ()=>Root }); const external_App1_namespaceObject = require("./App1"); @@ -117,10 +115,10 @@ function Root() { ; } -exports["default"] = __webpack_exports__["default"]; -for(var __rspack_i in __webpack_exports__)if (-1 === [ +exports["default"] = __rspack_exports["default"]; +for(var __rspack_i in __rspack_exports)if (-1 === [ "default" -].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i]; +].indexOf(__rspack_i)) exports[__rspack_i] = __rspack_exports[__rspack_i]; Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/tests/integration/resolve/index.test.ts b/tests/integration/resolve/index.test.ts index fc8afcff8..9a40c68aa 100644 --- a/tests/integration/resolve/index.test.ts +++ b/tests/integration/resolve/index.test.ts @@ -1,5 +1,5 @@ -import { expect, test } from '@rstest/core'; import { join } from 'node:path'; +import { expect, test } from '@rstest/core'; import { buildAndGetResults, queryContent } from 'test-helper'; test('resolve data url', async () => { @@ -20,52 +20,44 @@ test('resolve false', async () => { expect(isSuccess).toBeTruthy(); expect(entries.esm).toMatchInlineSnapshot(` - "var __webpack_modules__ = {}; - var __webpack_module_cache__ = {}; - function __webpack_require__(moduleId) { - var cachedModule = __webpack_module_cache__[moduleId]; + "var modules = {}; + var moduleCache = {}; + function rspackRequire(moduleId) { + var cachedModule = moduleCache[moduleId]; if (void 0 !== cachedModule) return cachedModule.exports; - var module = __webpack_module_cache__[moduleId] = { + var module = moduleCache[moduleId] = { exports: {} }; - __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + modules[moduleId](module, module.exports, rspackRequire); return module.exports; } - __webpack_require__.m = __webpack_modules__; - (()=>{ - __webpack_require__.n = (module)=>{ - var getter = module && module.__esModule ? ()=>module['default'] : ()=>module; - __webpack_require__.d(getter, { - a: getter + var moduleFactories = modules; + var compatGetDefaultExport = (module)=>{ + var getter = module && module.__esModule ? ()=>module['default'] : ()=>module; + definePropertyGetters(getter, { + a: getter + }); + return getter; + }; + var definePropertyGetters = (exports, getters, values)=>{ + var define = (defs, kind)=>{ + for(var key in defs)if (hasOwnProperty(defs, key) && !hasOwnProperty(exports, key)) Object.defineProperty(exports, key, { + enumerable: true, + [kind]: defs[key] }); - return getter; - }; - })(); - (()=>{ - __webpack_require__.d = (exports, getters, values)=>{ - var define = (defs, kind)=>{ - for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports, key)) Object.defineProperty(exports, key, { - enumerable: true, - [kind]: defs[key] - }); - }; - define(getters, "get"); - define(values, "value"); - }; - })(); - (()=>{ - __webpack_require__.add = function(modules) { - Object.assign(__webpack_require__.m, modules); }; - })(); - (()=>{ - __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); - })(); - __webpack_require__.add({ + define(getters, "get"); + define(values, "value"); + }; + moduleFactories.add = function(modules) { + Object.assign(moduleFactories, modules); + }; + var hasOwnProperty = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); + moduleFactories.add({ iP () {} }); - const util_ignored_ = __webpack_require__("iP"); - var util_ignored__default = /*#__PURE__*/ __webpack_require__.n(util_ignored_); + const util_ignored_ = rspackRequire("iP"); + var util_ignored__default = /*#__PURE__*/ compatGetDefaultExport(util_ignored_); console.log('foo:', util_ignored__default()); console.log('bar: ', "bar"); " diff --git a/tests/integration/style/css-modules-named/index.test.ts b/tests/integration/style/css-modules-named/index.test.ts index d0f4a623a..9caae1425 100644 --- a/tests/integration/style/css-modules-named/index.test.ts +++ b/tests/integration/style/css-modules-named/index.test.ts @@ -65,12 +65,12 @@ export { _1 as contentWrapper };`, expectFileContainContent( jsContents.cjs, 'button/index.module.cjs', - `__webpack_require__.d(__webpack_exports__, { + `__rspack_context.d(__rspack_exports, { contentWrapper: ()=>_1 }); require("./index_module.css"); var _1 = "content-wrapper-iNtwbA"; -exports.contentWrapper = __webpack_exports__.contentWrapper;`, +exports.contentWrapper = __rspack_exports.contentWrapper;`, ); // cspell:enable }); diff --git a/tests/integration/syntax/index.test.ts b/tests/integration/syntax/index.test.ts index 290a9cae3..1de2679a8 100644 --- a/tests/integration/syntax/index.test.ts +++ b/tests/integration/syntax/index.test.ts @@ -25,7 +25,7 @@ test('should downgrade class private method with output.syntax config', async () expect(entries.esm1).toContain('...a'); expect(entries.cjs0).toContain('#bar'); - expect(entries.cjs0).toContain('()=>{'); // test webpack runtime arrow function + expect(entries.cjs0).toContain('(exports1, getters, values)=>{'); // test Rspack runtime arrow function expect(entries.cjs1).not.toContain('#bar'); - expect(entries.cjs1).not.toContain('()=>{'); // test webpack runtime arrow function + expect(entries.cjs1).not.toContain('(exports1, getters, values)=>{'); // test Rspack runtime arrow function }); diff --git a/tests/integration/transform-import/index.test.ts b/tests/integration/transform-import/index.test.ts index ed96d72c6..7e557cb7b 100644 --- a/tests/integration/transform-import/index.test.ts +++ b/tests/integration/transform-import/index.test.ts @@ -29,7 +29,7 @@ test('transformImport with lodash', async () => { for (const format of formats) { expect(Object.values(contents[format]!)[0]).toContain( format.startsWith('esm') - ? 'import get from "lodash/get"' + ? 'import lodash_get from "lodash/get"' : 'const get_namespaceObject = require("lodash/get")', ); expect(Object.values(contents[format]!)[0]).toContain( diff --git a/tests/integration/vue/index.test.ts b/tests/integration/vue/index.test.ts index 319731cda..947b98784 100644 --- a/tests/integration/vue/index.test.ts +++ b/tests/integration/vue/index.test.ts @@ -9,12 +9,12 @@ const normalizeVueModuleIds = (contents: Record) => file, content .replace( - /(\n\s*)(?:\d+|[A-Za-z_$][\w$]*)(?= \(__unused_rspack_module, exports\) \{)/g, + /(\n\s*)\d+(?= \(__unused_rspack_module, exports\) \{)/g, '$1', ) .replace( - /__webpack_require__\((?:\d+|"[^"]*"|'[^']*')\)/g, - '__webpack_require__("")', + /(rspackRequire|__webpack_require__)\("?\d+"?\)/g, + '$1("")', ), ]), ); @@ -39,25 +39,23 @@ describe.runIf(platform() !== 'win32')('ESM', async () => { .toMatchInlineSnapshot(` { "/tests/integration/vue/dist/bundle/index.js": "import { createElementBlock, openBlock, ref, toDisplayString } from "vue"; - var __webpack_modules__ = {}; - var __webpack_module_cache__ = {}; - function __webpack_require__(moduleId) { - var cachedModule = __webpack_module_cache__[moduleId]; + var modules = {}; + var moduleCache = {}; + function rspackRequire(moduleId) { + var cachedModule = moduleCache[moduleId]; if (void 0 !== cachedModule) return cachedModule.exports; - var module = __webpack_module_cache__[moduleId] = { + var module = moduleCache[moduleId] = { exports: {} }; - __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + modules[moduleId](module, module.exports, rspackRequire); return module.exports; } - __webpack_require__.m = __webpack_modules__; - (()=>{ - __webpack_require__.add = function(modules) { - Object.assign(__webpack_require__.m, modules); - }; - })(); - __webpack_require__.add({ - (__unused_rspack_module, exports) { + var moduleFactories = modules; + moduleFactories.add = function(modules) { + Object.assign(moduleFactories, modules); + }; + moduleFactories.add({ + T (__unused_rspack_module, exports) { exports.A = (sfc, props)=>{ const target = sfc.__vccOpts || sfc; for (const [key, val] of props)target[key] = val; @@ -75,7 +73,7 @@ describe.runIf(platform() !== 'win32')('ESM', async () => { return (_ctx, _cache)=>(openBlock(), createElementBlock("p", _hoisted_1, toDisplayString(button.value), 1)); } }; - const exportHelper = __webpack_require__(""); + const exportHelper = rspackRequire("T"); const __exports__ = /*#__PURE__*/ (0, exportHelper.A)(Buttonvue_type_script_setup_true_lang_js, [ [ '__scopeId', @@ -125,12 +123,12 @@ describe.runIf(platform() !== 'win32')('ESM', async () => { expect(normalizeVueModuleIds(jsResult.contents.esm0!)) .toMatchInlineSnapshot(` { - "/tests/integration/vue/dist/bundleless/Button/Button.js": "import { createElementBlock, openBlock, ref, toDisplayString } from "vue"; + "/tests/integration/vue/dist/bundleless/Button/Button.js": "import { rspackRequire, moduleFactories } from "../rslib-runtime~0.js"; + import { createElementBlock, openBlock, ref, toDisplayString } from "vue"; import "./style.css"; import "./Button.css"; - import { __webpack_require__ } from "../rslib-runtime~0.js"; - __webpack_require__.add({ - (__unused_rspack_module, exports) { + moduleFactories.add({ + T (__unused_rspack_module, exports) { exports.A = (sfc, props)=>{ const target = sfc.__vccOpts || sfc; for (const [key, val] of props)target[key] = val; @@ -148,7 +146,7 @@ describe.runIf(platform() !== 'win32')('ESM', async () => { return (_ctx, _cache)=>(openBlock(), createElementBlock("p", _hoisted_1, toDisplayString(button.value), 1)); } }; - const exportHelper = __webpack_require__(""); + const exportHelper = rspackRequire("T"); const __exports__ = /*#__PURE__*/ (0, exportHelper.A)(Buttonvue_type_script_setup_true_lang_js, [ [ '__scopeId', @@ -179,24 +177,22 @@ describe.runIf(platform() !== 'win32')('ESM', async () => { "/tests/integration/vue/dist/bundleless/index.js": "export { default as Button } from "./Button/index.js"; export { default as Card } from "./Card.js"; ", - "/tests/integration/vue/dist/bundleless/rslib-runtime~0.js": "var __webpack_modules__ = {}; - var __webpack_module_cache__ = {}; - function __webpack_require__(moduleId) { - var cachedModule = __webpack_module_cache__[moduleId]; + "/tests/integration/vue/dist/bundleless/rslib-runtime~0.js": "var modules = {}; + var moduleCache = {}; + function rspackRequire(moduleId) { + var cachedModule = moduleCache[moduleId]; if (void 0 !== cachedModule) return cachedModule.exports; - var module = __webpack_module_cache__[moduleId] = { + var module = moduleCache[moduleId] = { exports: {} }; - __webpack_modules__[moduleId](module, module.exports, __webpack_require__); + modules[moduleId](module, module.exports, rspackRequire); return module.exports; } - __webpack_require__.m = __webpack_modules__; - (()=>{ - __webpack_require__.add = function(modules) { - Object.assign(__webpack_require__.m, modules); - }; - })(); - export { __webpack_require__ }; + var moduleFactories = modules; + moduleFactories.add = function(modules) { + Object.assign(moduleFactories, modules); + }; + export { rspackRequire, moduleFactories }; ", } `); diff --git a/website/docs/en/config/default-behavior.mdx b/website/docs/en/config/default-behavior.mdx index 616476634..14c02e04a 100644 --- a/website/docs/en/config/default-behavior.mdx +++ b/website/docs/en/config/default-behavior.mdx @@ -90,6 +90,7 @@ Rslib adjusts the following optimization defaults: | Module IDs | Non-MF formats use `'named'` when `output.target` is `'node'` and inherit Rsbuild's default `'compact-hashed'` when it is `'web'`.
MF format inherits Rsbuild's default: `'compact-hashed'` for regular builds and `'named'` for `mf-dev`. | [optimization.moduleIds](https://rspack.rs/config/optimization#optimizationmoduleids) | | Chunk IDs | Inherits Rsbuild's default: `'compact-hashed'` for regular builds and `'named'` for `mf-dev`. | [optimization.chunkIds](https://rspack.rs/config/optimization#optimizationchunkids) | | ESM output optimization | Sets `concatenateModules: false`, `sideEffects: true`, and `avoidEntryIife: true`, alongside `modern-module` output for downstream tree shaking. | [optimization.concatenateModules](https://rspack.rs/config/optimization#optimizationconcatenatemodules), [optimization.sideEffects](https://rspack.rs/config/optimization#optimizationsideeffects), [optimization.avoidEntryIife](https://rspack.rs/config/optimization#optimizationavoidentryiife) | +| Runtime mode | Uses Rspack's runtime output by default. | [experiments.runtimeMode](https://rspack.rs/config/experiments#experimentsruntimemode) | | Shared runtime | ESM sets `runtimeChunk: { name: 'rslib-runtime' }` for bundleless builds or multiple explicit entries to share runtime code. | [optimization.runtimeChunk](https://rspack.rs/config/optimization#optimizationruntimechunk) | :::note diff --git a/website/docs/zh/config/default-behavior.mdx b/website/docs/zh/config/default-behavior.mdx index fb369b0ff..59528ddf2 100644 --- a/website/docs/zh/config/default-behavior.mdx +++ b/website/docs/zh/config/default-behavior.mdx @@ -90,6 +90,7 @@ Rslib 在此基础上调整了以下优化默认值: | 模块 ID | 非 MF 格式:`output.target` 为 `'node'` 时使用 `'named'`,为 `'web'` 时沿用 Rsbuild 的默认值 `'compact-hashed'`。
MF 格式沿用 Rsbuild 的默认值:常规构建使用 `'compact-hashed'`,`mf-dev` 使用 `'named'`。 | [optimization.moduleIds](https://rspack.rs/zh/config/optimization#optimizationmoduleids) | | Chunk ID | 沿用 Rsbuild 的默认值:常规构建使用 `'compact-hashed'`,`mf-dev` 使用 `'named'`。 | [optimization.chunkIds](https://rspack.rs/zh/config/optimization#optimizationchunkids) | | ESM 产物优化 | `concatenateModules: false`、`sideEffects: true`、`avoidEntryIife: true`,配合 `modern-module` 输出,便于下游 tree shaking。 | [optimization.concatenateModules](https://rspack.rs/zh/config/optimization#optimizationconcatenatemodules)、[optimization.sideEffects](https://rspack.rs/zh/config/optimization#optimizationsideeffects)、[optimization.avoidEntryIife](https://rspack.rs/zh/config/optimization#optimizationavoidentryiife) | +| Runtime 模式 | 默认使用 Rspack 模式的 runtime 输出。 | [experiments.runtimeMode](https://rspack.rs/zh/config/experiments#experimentsruntimemode) | | 共享 runtime | ESM 在 bundleless 或多个显式入口时设置 `runtimeChunk: { name: 'rslib-runtime' }`,复用运行时代码。 | [optimization.runtimeChunk](https://rspack.rs/zh/config/optimization#optimizationruntimechunk) | :::note