Skip to content

Commit 6ee0d4b

Browse files
LingyuCoderCopilot
andauthored
feat: add requireAlias option to control require variable renaming (#12686)
* feat: add requireRename option to control require variable renaming * Update packages/rspack/src/config/types.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update tests/rspack-test/configCases/parsing/renaming-disabled/index.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * rename * rename --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent b81dfa2 commit 6ee0d4b

22 files changed

Lines changed: 323 additions & 351 deletions

File tree

crates/node_binding/napi-binding.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2339,6 +2339,11 @@ export interface RawJavascriptParserOptions {
23392339
worker?: Array<string>
23402340
overrideStrict?: string
23412341
importMeta?: boolean
2342+
/**
2343+
* This option is experimental in Rspack only and subject to change or be removed anytime.
2344+
* @experimental
2345+
*/
2346+
requireAlias?: boolean
23422347
/**
23432348
* This option is experimental in Rspack only and subject to change or be removed anytime.
23442349
* @experimental

crates/rspack/src/builder/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,6 +1721,7 @@ impl ModuleOptionsBuilder {
17211721
strict_export_presence: Some(false),
17221722
worker: Some(vec!["...".to_string()]),
17231723
import_meta: Some(true),
1724+
require_alias: Some(true),
17241725
require_as_expression: Some(true),
17251726
require_dynamic: Some(true),
17261727
require_resolve: Some(true),

crates/rspack/tests/snapshots/defaults__default_options.snap

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1456,6 +1456,9 @@ CompilerOptions {
14561456
import_meta: Some(
14571457
true,
14581458
),
1459+
require_alias: Some(
1460+
true,
1461+
),
14591462
require_as_expression: Some(
14601463
true,
14611464
),

crates/rspack_binding_api/src/raw_options/raw_module/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,9 @@ pub struct RawJavascriptParserOptions {
290290
pub import_meta: Option<bool>,
291291
/// This option is experimental in Rspack only and subject to change or be removed anytime.
292292
/// @experimental
293+
pub require_alias: Option<bool>,
294+
/// This option is experimental in Rspack only and subject to change or be removed anytime.
295+
/// @experimental
293296
pub require_as_expression: Option<bool>,
294297
/// This option is experimental in Rspack only and subject to change or be removed anytime.
295298
/// @experimental
@@ -364,6 +367,7 @@ impl From<RawJavascriptParserOptions> for JavascriptParserOptions {
364367
.override_strict
365368
.map(|e| OverrideStrict::from(e.as_str())),
366369
import_meta: value.import_meta,
370+
require_alias: value.require_alias,
367371
require_as_expression: value.require_as_expression,
368372
require_dynamic: value.require_dynamic,
369373
require_resolve: value.require_resolve,

crates/rspack_core/src/options/module.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ pub struct JavascriptParserOptions {
301301
pub worker: Option<Vec<String>>,
302302
pub override_strict: Option<OverrideStrict>,
303303
pub import_meta: Option<bool>,
304+
pub require_alias: Option<bool>,
304305
pub require_as_expression: Option<bool>,
305306
pub require_dynamic: Option<bool>,
306307
pub require_resolve: Option<bool>,

crates/rspack_plugin_javascript/src/parser_plugin/common_js_imports_parse_plugin.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -402,9 +402,9 @@ impl CommonJsImportsParserPlugin {
402402
}
403403

404404
impl JavascriptParserPlugin for CommonJsImportsParserPlugin {
405-
fn can_rename(&self, _parser: &mut JavascriptParser, for_name: &str) -> Option<bool> {
405+
fn can_rename(&self, parser: &mut JavascriptParser, for_name: &str) -> Option<bool> {
406406
if for_name == expr_name::REQUIRE {
407-
Some(true)
407+
Some(parser.javascript_options.require_alias.unwrap_or(true))
408408
} else {
409409
None
410410
}

packages/rspack/etc/core.api.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3563,6 +3563,7 @@ export type JavascriptParserOptions = {
35633563
strictExportPresence?: boolean;
35643564
worker?: string[] | boolean;
35653565
overrideStrict?: 'strict' | 'non-strict';
3566+
requireAlias?: boolean;
35663567
requireAsExpression?: boolean;
35673568
requireDynamic?: boolean;
35683569
requireResolve?: boolean;

packages/rspack/src/config/adapter.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,7 @@ function getRawJavascriptParserOptions(
585585
: parser.worker,
586586
overrideStrict: parser.overrideStrict,
587587
requireAsExpression: parser.requireAsExpression,
588+
requireAlias: parser.requireAlias,
588589
requireDynamic: parser.requireDynamic,
589590
requireResolve: parser.requireResolve,
590591
commonjs: parser.commonjs,

packages/rspack/src/config/defaults.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ const applyJavascriptParserOptionsDefaults = (
322322
D(parserOptions, 'wrappedContextRegExp', /.*/);
323323
D(parserOptions, 'strictExportPresence', false);
324324
D(parserOptions, 'requireAsExpression', true);
325+
D(parserOptions, 'requireAlias', true);
325326
D(parserOptions, 'requireDynamic', true);
326327
D(parserOptions, 'requireResolve', true);
327328
D(parserOptions, 'commonjs', true);

packages/rspack/src/config/types.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1162,6 +1162,12 @@ export type JavascriptParserOptions = {
11621162
/** Override the module to strict or non-strict. */
11631163
overrideStrict?: 'strict' | 'non-strict';
11641164

1165+
/**
1166+
* Control whether renaming of the CommonJS `require` function will be parsed and transformed.
1167+
* @default true
1168+
*/
1169+
requireAlias?: boolean;
1170+
11651171
// TODO: add docs
11661172
requireAsExpression?: boolean;
11671173

0 commit comments

Comments
 (0)