diff --git a/crates/rspack/src/builder/mod.rs b/crates/rspack/src/builder/mod.rs index db62007b374d..c9012fd497b2 100644 --- a/crates/rspack/src/builder/mod.rs +++ b/crates/rspack/src/builder/mod.rs @@ -3728,7 +3728,7 @@ impl ExperimentsBuilder { // Builder specific let future_defaults = w!(self.future_defaults, false); w!(self.css, *future_defaults); - w!(self.async_web_assembly, *future_defaults); + w!(self.async_web_assembly, true); w!(self.output_module, false); Ok(Experiments { diff --git a/crates/rspack/tests/snapshots/defaults__default_options-2.snap b/crates/rspack/tests/snapshots/defaults__default_options-2.snap index 55a4e96f26fe..934eccb598a5 100644 --- a/crates/rspack/tests/snapshots/defaults__default_options-2.snap +++ b/crates/rspack/tests/snapshots/defaults__default_options-2.snap @@ -4,6 +4,7 @@ expression: builder_context --- BuilderContext { plugins: [ + AsyncWebAssemblyModulesPlugin, ArrayPushCallbackChunkFormatPlugin, EnableChunkLoadingPlugin( Jsonp, diff --git a/crates/rspack/tests/snapshots/defaults__default_options.snap b/crates/rspack/tests/snapshots/defaults__default_options.snap index 82b762a6476b..c3c4404227c3 100644 --- a/crates/rspack/tests/snapshots/defaults__default_options.snap +++ b/crates/rspack/tests/snapshots/defaults__default_options.snap @@ -1190,6 +1190,219 @@ CompilerOptions { }, extract_source_map: None, }, + ModuleRule { + rspack_resource: None, + test: Some( + "Func(...)", + ), + include: None, + exclude: None, + resource: None, + resource_query: None, + resource_fragment: None, + dependency: None, + issuer: None, + issuer_layer: None, + scheme: None, + mimetype: None, + description_data: None, + with: None, + one_of: None, + rules: Some( + [ + ModuleRule { + rspack_resource: None, + test: None, + include: None, + exclude: None, + resource: None, + resource_query: None, + resource_fragment: None, + dependency: None, + issuer: None, + issuer_layer: None, + scheme: None, + mimetype: None, + description_data: Some( + { + "type": RuleSetConditionWithEmpty { + condition: "module", + match_when_empty: OnceCell { + value: None, + }, + }, + }, + ), + with: None, + one_of: None, + rules: None, + effect: ModuleRuleEffect { + side_effects: None, + type: None, + layer: None, + use: , + parser: None, + generator: None, + resolve: Some( + Resolve { + extensions: None, + alias: None, + prefer_relative: None, + prefer_absolute: None, + symlinks: None, + main_files: None, + main_fields: None, + condition_names: None, + tsconfig: None, + modules: None, + fallback: None, + fully_specified: Some( + true, + ), + exports_fields: None, + extension_alias: None, + alias_fields: None, + roots: None, + restrictions: None, + imports_fields: None, + by_dependency: None, + description_files: None, + enforce_extension: None, + pnp: None, + builtin_modules: false, + }, + ), + enforce: Normal, + extract_source_map: None, + }, + extract_source_map: None, + }, + ], + ), + effect: ModuleRuleEffect { + side_effects: None, + type: Some( + WasmAsync, + ), + layer: None, + use: , + parser: None, + generator: None, + resolve: None, + enforce: Normal, + extract_source_map: None, + }, + extract_source_map: None, + }, + ModuleRule { + rspack_resource: None, + test: None, + include: None, + exclude: None, + resource: None, + resource_query: None, + resource_fragment: None, + dependency: None, + issuer: None, + issuer_layer: None, + scheme: None, + mimetype: Some( + RuleSetConditionWithEmpty { + condition: "application/wasm", + match_when_empty: OnceCell { + value: None, + }, + }, + ), + description_data: None, + with: None, + one_of: None, + rules: Some( + [ + ModuleRule { + rspack_resource: None, + test: None, + include: None, + exclude: None, + resource: None, + resource_query: None, + resource_fragment: None, + dependency: None, + issuer: None, + issuer_layer: None, + scheme: None, + mimetype: None, + description_data: Some( + { + "type": RuleSetConditionWithEmpty { + condition: "module", + match_when_empty: OnceCell { + value: None, + }, + }, + }, + ), + with: None, + one_of: None, + rules: None, + effect: ModuleRuleEffect { + side_effects: None, + type: None, + layer: None, + use: , + parser: None, + generator: None, + resolve: Some( + Resolve { + extensions: None, + alias: None, + prefer_relative: None, + prefer_absolute: None, + symlinks: None, + main_files: None, + main_fields: None, + condition_names: None, + tsconfig: None, + modules: None, + fallback: None, + fully_specified: Some( + true, + ), + exports_fields: None, + extension_alias: None, + alias_fields: None, + roots: None, + restrictions: None, + imports_fields: None, + by_dependency: None, + description_files: None, + enforce_extension: None, + pnp: None, + builtin_modules: false, + }, + ), + enforce: Normal, + extract_source_map: None, + }, + extract_source_map: None, + }, + ], + ), + effect: ModuleRuleEffect { + side_effects: None, + type: Some( + WasmAsync, + ), + layer: None, + use: , + parser: None, + generator: None, + resolve: None, + enforce: Normal, + extract_source_map: None, + }, + extract_source_map: None, + }, ModuleRule { rspack_resource: None, test: None, diff --git a/packages/rspack/src/config/defaults.ts b/packages/rspack/src/config/defaults.ts index 4c4007d8ef1d..5d6f5e7d0e87 100644 --- a/packages/rspack/src/config/defaults.ts +++ b/packages/rspack/src/config/defaults.ts @@ -210,7 +210,8 @@ const applyInfrastructureLoggingDefaults = ( const applyExperimentsDefaults = (experiments: ExperimentsNormalized) => { D(experiments, 'futureDefaults', false); - D(experiments, 'asyncWebAssembly', experiments.futureDefaults); + // IGNORE(experiments.asyncWebAssembly): Rspack enable async WebAssembly by default + D(experiments, 'asyncWebAssembly', true); D(experiments, 'css', experiments.futureDefaults ? true : undefined); D(experiments, 'deferImport', false); diff --git a/packages/rspack/src/config/types.ts b/packages/rspack/src/config/types.ts index 160c263b2523..34c3cb043759 100644 --- a/packages/rspack/src/config/types.ts +++ b/packages/rspack/src/config/types.ts @@ -2741,7 +2741,7 @@ export type Experiments = { /** * Enable async WebAssembly. * Support the new WebAssembly according to the [updated specification](https://github.com/WebAssembly/esm-integration), it makes a WebAssembly module an async module. - * @default false + * @default true */ asyncWebAssembly?: boolean; /** diff --git a/tests/rspack-test/configCases/wasm/missing-wasm-experiment/rspack.config.js b/tests/rspack-test/configCases/wasm/missing-wasm-experiment/rspack.config.js index 58eb2af29b24..ebab7c2aed74 100644 --- a/tests/rspack-test/configCases/wasm/missing-wasm-experiment/rspack.config.js +++ b/tests/rspack-test/configCases/wasm/missing-wasm-experiment/rspack.config.js @@ -1,2 +1,6 @@ /** @type {import("@rspack/core").Configuration} */ -module.exports = {}; +module.exports = { + experiments: { + asyncWebAssembly: false, + }, +}; diff --git a/tests/rspack-test/defaultsCases/default/base.js b/tests/rspack-test/defaultsCases/default/base.js index c60f83b9856d..1e3f0e5745df 100644 --- a/tests/rspack-test/defaultsCases/default/base.js +++ b/tests/rspack-test/defaultsCases/default/base.js @@ -20,7 +20,7 @@ module.exports = { }, }, experiments: Object { - asyncWebAssembly: false, + asyncWebAssembly: true, buildHttp: undefined, css: undefined, deferImport: false, @@ -147,6 +147,34 @@ module.exports = { }, type: javascript/esm, }, + Object { + rules: Array [ + Object { + descriptionData: Object { + type: module, + }, + resolve: Object { + fullySpecified: true, + }, + }, + ], + test: /\\\\\\.wasm\\$/i, + type: webassembly/async, + }, + Object { + mimetype: application/wasm, + rules: Array [ + Object { + descriptionData: Object { + type: module, + }, + resolve: Object { + fullySpecified: true, + }, + }, + ], + type: webassembly/async, + }, Object { dependency: url, oneOf: Array [ diff --git a/tests/rspack-test/defaultsCases/experiments/async-wasm.js b/tests/rspack-test/defaultsCases/experiments/async-wasm.js index f4e967c0e24b..1405c88442e0 100644 --- a/tests/rspack-test/defaultsCases/experiments/async-wasm.js +++ b/tests/rspack-test/defaultsCases/experiments/async-wasm.js @@ -3,41 +3,5 @@ module.exports = { description: "async wasm", options: () => ({ experiments: { asyncWebAssembly: true } }), diff: e => - e.toMatchInlineSnapshot(` - - Expected - + Received - - @@ ... @@ - - "asyncWebAssembly": false, - + "asyncWebAssembly": true, - @@ ... @@ - + }, - + Object { - + "rules": Array [ - + Object { - + "descriptionData": Object { - + "type": "module", - + }, - + "resolve": Object { - + "fullySpecified": true, - + }, - + }, - + ], - + "test": /\\.wasm$/i, - + "type": "webassembly/async", - + }, - + Object { - + "mimetype": "application/wasm", - + "rules": Array [ - + Object { - + "descriptionData": Object { - + "type": "module", - + }, - + "resolve": Object { - + "fullySpecified": true, - + }, - + }, - + ], - + "type": "webassembly/async", - `) + e.toMatchInlineSnapshot(`Compared values have no visual difference.`) }; diff --git a/tests/rspack-test/defaultsCases/experiments/both-wasm.js b/tests/rspack-test/defaultsCases/experiments/both-wasm.js index ce58c5595d4c..454de073057c 100644 --- a/tests/rspack-test/defaultsCases/experiments/both-wasm.js +++ b/tests/rspack-test/defaultsCases/experiments/both-wasm.js @@ -6,42 +6,10 @@ module.exports = { }), diff: e => e.toMatchInlineSnapshot(` - - Expected - + Received + - Expected + + Received - @@ ... @@ - - "asyncWebAssembly": false, - + "asyncWebAssembly": true, - @@ ... @@ - + "syncWebAssembly": true, - @@ ... @@ - + }, - + Object { - + "rules": Array [ - + Object { - + "descriptionData": Object { - + "type": "module", - + }, - + "resolve": Object { - + "fullySpecified": true, - + }, - + }, - + ], - + "test": /\\.wasm$/i, - + "type": "webassembly/async", - + }, - + Object { - + "mimetype": "application/wasm", - + "rules": Array [ - + Object { - + "descriptionData": Object { - + "type": "module", - + }, - + "resolve": Object { - + "fullySpecified": true, - + }, - + }, - + ], - + "type": "webassembly/async", - `) + @@ ... @@ + + "syncWebAssembly": true, + `) }; diff --git a/tests/rspack-test/defaultsCases/experiments/future-defaults-with-css.js b/tests/rspack-test/defaultsCases/experiments/future-defaults-with-css.js index 5281794f9027..261d37a45ed7 100644 --- a/tests/rspack-test/defaultsCases/experiments/future-defaults-with-css.js +++ b/tests/rspack-test/defaultsCases/experiments/future-defaults-with-css.js @@ -9,46 +9,14 @@ module.exports = { }), diff: e => e.toMatchInlineSnapshot(` - - Expected - + Received + - Expected + + Received - @@ ... @@ - - "asyncWebAssembly": false, - + "asyncWebAssembly": true, - @@ ... @@ - - "css": undefined, - + "css": false, - @@ ... @@ - - "futureDefaults": false, - + "futureDefaults": true, - @@ ... @@ - + }, - + Object { - + "rules": Array [ - + Object { - + "descriptionData": Object { - + "type": "module", - + }, - + "resolve": Object { - + "fullySpecified": true, - + }, - + }, - + ], - + "test": /\\.wasm$/i, - + "type": "webassembly/async", - + }, - + Object { - + "mimetype": "application/wasm", - + "rules": Array [ - + Object { - + "descriptionData": Object { - + "type": "module", - + }, - + "resolve": Object { - + "fullySpecified": true, - + }, - + }, - + ], - + "type": "webassembly/async", - `) + @@ ... @@ + - "css": undefined, + + "css": false, + @@ ... @@ + - "futureDefaults": false, + + "futureDefaults": true, + `) }; diff --git a/tests/rspack-test/defaultsCases/experiments/future-defaults.js b/tests/rspack-test/defaultsCases/experiments/future-defaults.js index 7fb62a734201..78ccb2282d6f 100644 --- a/tests/rspack-test/defaultsCases/experiments/future-defaults.js +++ b/tests/rspack-test/defaultsCases/experiments/future-defaults.js @@ -11,9 +11,6 @@ module.exports = { - Expected + Received - @@ ... @@ - - "asyncWebAssembly": false, - + "asyncWebAssembly": true, @@ ... @@ - "css": undefined, + "css": true, @@ -21,33 +18,6 @@ module.exports = { - "futureDefaults": false, + "futureDefaults": true, @@ ... @@ - + Object { - + "rules": Array [ - @@ ... @@ - + "descriptionData": Object { - + "type": "module", - + }, - + "resolve": Object { - + "fullySpecified": true, - + }, - + }, - + ], - + "test": /\\.wasm$/i, - + "type": "webassembly/async", - + }, - + Object { - + "mimetype": "application/wasm", - + "rules": Array [ - + Object { - + "descriptionData": Object { - + "type": "module", - + }, - + "resolve": Object { - + "fullySpecified": true, - + }, - + }, - + ], - + "type": "webassembly/async", + }, + Object { + "resolve": Object { @@ -64,8 +34,7 @@ module.exports = { + "preferRelative": true, + }, + "type": "css/module", - + }, - + Object { + @@ ... @@ + "mimetype": "text/css", + "resolve": Object { + "fullySpecified": true, @@ -92,6 +61,8 @@ module.exports = { + "localIdentName": "[fullhash]", + }, @@ ... @@ + + }, + + }, + "css": Object { + "namedExports": true, + "url": true, @@ -99,21 +70,21 @@ module.exports = { + "css/auto": Object { + "namedExports": true, + "url": true, - + }, + @@ ... @@ + "css/module": Object { + "namedExports": true, + "url": true, - + }, @@ ... @@ + "css", @@ ... @@ + + ], + }, + "css-import": Object { + "conditionNames": Array [ + "webpack", + "production", + "style", - + ], + @@ ... @@ + "extensions": Array [ + ".css", + ], diff --git a/website/docs/en/config/experiments.mdx b/website/docs/en/config/experiments.mdx index 8612e25f5db0..b9631164790f 100644 --- a/website/docs/en/config/experiments.mdx +++ b/website/docs/en/config/experiments.mdx @@ -17,7 +17,7 @@ In minor releases, Rspack may change the APIs of experimental features. If you'r ## experiments.asyncWebAssembly - **Type:** `boolean` -- **Default:** `false` +- **Default:** `true` Supports the new WebAssembly according to the [updated specification](https://github.com/WebAssembly/esm-integration), making WebAssembly modules async. @@ -29,7 +29,6 @@ export default { }; ``` -This is enabled by default when [experiments.futureDefaults](#experimentsfuturedefaults) is set to `true`. ## experiments.outputModule diff --git a/website/docs/zh/config/experiments.mdx b/website/docs/zh/config/experiments.mdx index 6efff1b08ae7..c1a239c42e3e 100644 --- a/website/docs/zh/config/experiments.mdx +++ b/website/docs/zh/config/experiments.mdx @@ -18,7 +18,7 @@ import { Table } from '@builtIns'; ## experiments.asyncWebAssembly - **类型:** `boolean` -- **默认值:** `false` +- **默认值:** `true` 支持基于[新规范](https://github.com/WebAssembly/esm-integration)的 WebAssembly,这使 WebAssembly 模块成为异步模块。 @@ -30,7 +30,6 @@ export default { }; ``` -当设置 [experiments.futureDefaults](#experimentsfuturedefaults) 为 `true` 时,默认启用此功能。 ## experiments.outputModule