Skip to content

Commit 11ebae1

Browse files
authoredAug 25, 2023
fix(es/module): Don't resolve as node_modules from TscResolver (#7866)
**Related issue:** - Closes #7863
1 parent 7986566 commit 11ebae1

File tree

8 files changed

+66
-3
lines changed

8 files changed

+66
-3
lines changed
 

‎crates/swc/src/config/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1951,7 +1951,7 @@ fn build_resolver(base_url: PathBuf, paths: CompiledPaths) -> Box<SwcImportResol
19511951

19521952
let r = {
19531953
let r = TsConfigResolver::new(
1954-
NodeModulesResolver::new(Default::default(), Default::default(), true),
1954+
NodeModulesResolver::without_node_modules(Default::default(), Default::default(), true),
19551955
base_url.clone(),
19561956
paths.clone(),
19571957
);

‎crates/swc/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ pub mod resolver {
193193
preserve_symlinks: bool,
194194
) -> CachingResolver<TsConfigResolver<NodeModulesResolver>> {
195195
let r = TsConfigResolver::new(
196-
NodeModulesResolver::new(target_env, alias, preserve_symlinks),
196+
NodeModulesResolver::without_node_modules(target_env, alias, preserve_symlinks),
197197
base_url,
198198
paths,
199199
);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"jsc": {
3+
"parser": {
4+
"syntax": "typescript",
5+
"tsx": true
6+
},
7+
"baseUrl": ".",
8+
"paths": {
9+
"~/*": [
10+
"./src/*"
11+
]
12+
},
13+
"externalHelpers": true
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import test from '~/util/test';
2+
3+
class X {
4+
5+
}
6+
7+
console.log(test, X);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
2+
import test from "./src/util/test";
3+
var X = function X() {
4+
"use strict";
5+
_class_call_check(this, X);
6+
};
7+
console.log(test, X);

‎crates/swc_ecma_loader/src/resolvers/node.rs

+20
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ pub struct NodeModulesResolver {
103103
alias: AHashMap<String, String>,
104104
// if true do not resolve symlink
105105
preserve_symlinks: bool,
106+
ignore_node_modules: bool,
106107
}
107108

108109
static EXTENSIONS: &[&str] = &["ts", "tsx", "js", "jsx", "json", "node"];
@@ -118,6 +119,21 @@ impl NodeModulesResolver {
118119
target_env,
119120
alias,
120121
preserve_symlinks,
122+
ignore_node_modules: false,
123+
}
124+
}
125+
126+
/// Create a node modules resolver which does not care about `node_modules`
127+
pub fn without_node_modules(
128+
target_env: TargetEnv,
129+
alias: AHashMap<String, String>,
130+
preserve_symlinks: bool,
131+
) -> Self {
132+
Self {
133+
target_env,
134+
alias,
135+
preserve_symlinks,
136+
ignore_node_modules: true,
121137
}
122138
}
123139

@@ -369,6 +385,10 @@ impl NodeModulesResolver {
369385
base_dir: &Path,
370386
target: &str,
371387
) -> Result<Option<PathBuf>, Error> {
388+
if self.ignore_node_modules {
389+
return Ok(None);
390+
}
391+
372392
let absolute_path = to_absolute_path(base_dir)?;
373393
let mut path = Some(&*absolute_path);
374394
while let Some(dir) = path {

‎crates/swc_ecma_loader/src/resolvers/tsc.rs

+14
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,20 @@ where
119119
"Resolved `{}` as `{}` from `{}`",
120120
module_specifier, resolved, base
121121
);
122+
123+
if let FileName::Real(target) = &resolved {
124+
// If node_modules is in path, we should return module specifier.
125+
if target.components().any(|c| {
126+
if let Component::Normal(v) = c {
127+
v == "node_modules"
128+
} else {
129+
false
130+
}
131+
}) {
132+
return Ok(FileName::Real(module_specifier.into()));
133+
}
134+
}
135+
122136
Ok(resolved)
123137
}
124138

‎node-swc/__tests__/transform/issue_4730_test.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ it("should work", async () => {
3737
Object.defineProperty(exports, \\"__esModule\\", {
3838
value: true
3939
});
40-
const _interop_require_wildcard = require(\\"node_modules/@swc/helpers/esm/_interop_require_wildcard\\");
40+
const _interop_require_wildcard = require(\\"@swc/helpers/_/_interop_require_wildcard\\");
4141
const _b = require(\\"../packages/b/src\\");
4242
async function display() {
4343
const displayA = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard._(require(\\"../packages/a/src\\"))).then((c)=>c.displayA);

1 commit comments

Comments
 (1)

github-actions[bot] commented on Aug 25, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: 11ebae1 Previous: 52a1ee7 Ratio
es/full/bugs-1 294741 ns/iter (± 17799) 287571 ns/iter (± 12979) 1.02
es/full/minify/libraries/antd 1353774624 ns/iter (± 19709215) 1396613022 ns/iter (± 19602596) 0.97
es/full/minify/libraries/d3 282776418 ns/iter (± 7034123) 287340201 ns/iter (± 6704277) 0.98
es/full/minify/libraries/echarts 1084848269 ns/iter (± 14523627) 1132238165 ns/iter (± 18346810) 0.96
es/full/minify/libraries/jquery 83769748 ns/iter (± 370697) 84469814 ns/iter (± 283040) 0.99
es/full/minify/libraries/lodash 97537042 ns/iter (± 895677) 97654002 ns/iter (± 562124) 1.00
es/full/minify/libraries/moment 49591857 ns/iter (± 509105) 49543496 ns/iter (± 316008) 1.00
es/full/minify/libraries/react 17862445 ns/iter (± 79443) 17984417 ns/iter (± 128151) 0.99
es/full/minify/libraries/terser 219931785 ns/iter (± 2745553) 225525224 ns/iter (± 2873033) 0.98
es/full/minify/libraries/three 393541517 ns/iter (± 5484319) 411230823 ns/iter (± 3897908) 0.96
es/full/minify/libraries/typescript 2667322670 ns/iter (± 21574738) 2722886384 ns/iter (± 20995115) 0.98
es/full/minify/libraries/victory 592135605 ns/iter (± 16351602) 613676085 ns/iter (± 9737459) 0.96
es/full/minify/libraries/vue 119677614 ns/iter (± 843292) 121354674 ns/iter (± 365541) 0.99
es/full/codegen/es3 35124 ns/iter (± 113) 35740 ns/iter (± 110) 0.98
es/full/codegen/es5 35154 ns/iter (± 99) 36038 ns/iter (± 75) 0.98
es/full/codegen/es2015 35248 ns/iter (± 108) 35963 ns/iter (± 59) 0.98
es/full/codegen/es2016 35032 ns/iter (± 96) 36034 ns/iter (± 112) 0.97
es/full/codegen/es2017 35104 ns/iter (± 149) 35970 ns/iter (± 89) 0.98
es/full/codegen/es2018 34967 ns/iter (± 170) 35987 ns/iter (± 91) 0.97
es/full/codegen/es2019 35065 ns/iter (± 401) 36010 ns/iter (± 119) 0.97
es/full/codegen/es2020 35149 ns/iter (± 123) 36066 ns/iter (± 114) 0.97
es/full/all/es3 167713213 ns/iter (± 462897) 167228212 ns/iter (± 1815177) 1.00
es/full/all/es5 161345203 ns/iter (± 754336) 158355872 ns/iter (± 1207130) 1.02
es/full/all/es2015 120269261 ns/iter (± 506742) 119646865 ns/iter (± 717214) 1.01
es/full/all/es2016 119455138 ns/iter (± 367072) 119745591 ns/iter (± 1151705) 1.00
es/full/all/es2017 118849745 ns/iter (± 665869) 119002672 ns/iter (± 749297) 1.00
es/full/all/es2018 116323980 ns/iter (± 890309) 116869544 ns/iter (± 845527) 1.00
es/full/all/es2019 115507936 ns/iter (± 1512163) 115590184 ns/iter (± 740710) 1.00
es/full/all/es2020 112397217 ns/iter (± 1295562) 111439233 ns/iter (± 525383) 1.01
es/full/parser 499280 ns/iter (± 6986) 487009 ns/iter (± 6459) 1.03
es/full/base/fixer 18316 ns/iter (± 44) 19630 ns/iter (± 195) 0.93
es/full/base/resolver_and_hygiene 80063 ns/iter (± 240) 79810 ns/iter (± 92) 1.00
serialization of serde 295 ns/iter (± 2) 296 ns/iter (± 0) 1.00
css/minify/libraries/bootstrap 28557242 ns/iter (± 54920) 28779667 ns/iter (± 106364) 0.99
css/visitor/compare/clone 1629298 ns/iter (± 2596) 1689059 ns/iter (± 4331) 0.96
css/visitor/compare/visit_mut_span 1757160 ns/iter (± 1857) 1844486 ns/iter (± 8892) 0.95
css/visitor/compare/visit_mut_span_panic 1838396 ns/iter (± 3476) 1904573 ns/iter (± 10922) 0.97
css/visitor/compare/fold_span 2551501 ns/iter (± 9886) 2619712 ns/iter (± 7939) 0.97
css/visitor/compare/fold_span_panic 2744024 ns/iter (± 9953) 2836488 ns/iter (± 47941) 0.97
css/lexer/bootstrap_5_1_3 4518565 ns/iter (± 3038) 4527562 ns/iter (± 2848) 1.00
css/lexer/foundation_6_7_4 3805691 ns/iter (± 2383) 3788460 ns/iter (± 2070) 1.00
css/lexer/tailwind_3_1_1 720948 ns/iter (± 506) 720591 ns/iter (± 538) 1.00
css/parser/bootstrap_5_1_3 19057353 ns/iter (± 33622) 19829544 ns/iter (± 103012) 0.96
css/parser/foundation_6_7_4 15466972 ns/iter (± 15570) 16053645 ns/iter (± 93257) 0.96
css/parser/tailwind_3_1_1 2983734 ns/iter (± 2861) 3009630 ns/iter (± 7991) 0.99
es/codegen/colors 738781 ns/iter (± 402960) 740273 ns/iter (± 404000) 1.00
es/codegen/large 2891289 ns/iter (± 1524342) 2889736 ns/iter (± 1534053) 1.00
es/codegen/with-parser/colors 45203 ns/iter (± 663) 44806 ns/iter (± 580) 1.01
es/codegen/with-parser/large 487504 ns/iter (± 826) 486763 ns/iter (± 1153) 1.00
es/minify/libraries/antd 1152245650 ns/iter (± 11885588) 1230353305 ns/iter (± 22312679) 0.94
es/minify/libraries/d3 238716261 ns/iter (± 781809) 250153905 ns/iter (± 3786320) 0.95
es/minify/libraries/echarts 906320765 ns/iter (± 8264284) 959311795 ns/iter (± 11151884) 0.94
es/minify/libraries/jquery 72544205 ns/iter (± 167978) 73536304 ns/iter (± 195658) 0.99
es/minify/libraries/lodash 86481074 ns/iter (± 216918) 87660215 ns/iter (± 189178) 0.99
es/minify/libraries/moment 43100624 ns/iter (± 60010) 43668481 ns/iter (± 133141) 0.99
es/minify/libraries/react 15950270 ns/iter (± 57231) 16075170 ns/iter (± 72183) 0.99
es/minify/libraries/terser 184596320 ns/iter (± 997584) 193325283 ns/iter (± 3035760) 0.95
es/minify/libraries/three 320538123 ns/iter (± 1950571) 345860083 ns/iter (± 3198986) 0.93
es/minify/libraries/typescript 2235114049 ns/iter (± 9924833) 2325114436 ns/iter (± 11442325) 0.96
es/minify/libraries/victory 480677564 ns/iter (± 9346096) 505554742 ns/iter (± 5109591) 0.95
es/minify/libraries/vue 105556035 ns/iter (± 259560) 107403361 ns/iter (± 204978) 0.98
es/visitor/compare/clone 1957097 ns/iter (± 4260) 1944999 ns/iter (± 4571) 1.01
es/visitor/compare/visit_mut_span 2273498 ns/iter (± 9579) 2255857 ns/iter (± 8056) 1.01
es/visitor/compare/visit_mut_span_panic 2346508 ns/iter (± 5142) 2321267 ns/iter (± 4851) 1.01
es/visitor/compare/fold_span 3388515 ns/iter (± 7157) 3373368 ns/iter (± 11911) 1.00
es/visitor/compare/fold_span_panic 3491631 ns/iter (± 5873) 3473112 ns/iter (± 40762) 1.01
es/lexer/colors 12984 ns/iter (± 24) 13245 ns/iter (± 50) 0.98
es/lexer/angular 6012272 ns/iter (± 8122) 6108870 ns/iter (± 6619) 0.98
es/lexer/backbone 772660 ns/iter (± 2110) 795559 ns/iter (± 1369) 0.97
es/lexer/jquery 4425650 ns/iter (± 5106) 4505896 ns/iter (± 5537) 0.98
es/lexer/jquery mobile 6708183 ns/iter (± 10321) 6859250 ns/iter (± 5957) 0.98
es/lexer/mootools 3513608 ns/iter (± 4535) 3552246 ns/iter (± 5986) 0.99
es/lexer/underscore 648797 ns/iter (± 1508) 663106 ns/iter (± 361) 0.98
es/lexer/three 21011769 ns/iter (± 56317) 21327743 ns/iter (± 33086) 0.99
es/lexer/yui 3770270 ns/iter (± 4575) 3831585 ns/iter (± 3693) 0.98
es/parser/colors 27055 ns/iter (± 69) 26719 ns/iter (± 55) 1.01
es/parser/angular 13550817 ns/iter (± 100727) 13531123 ns/iter (± 67278) 1.00
es/parser/backbone 1985618 ns/iter (± 7238) 1970424 ns/iter (± 8574) 1.01
es/parser/jquery 10805712 ns/iter (± 46826) 10797495 ns/iter (± 67888) 1.00
es/parser/jquery mobile 16622316 ns/iter (± 61318) 16647521 ns/iter (± 98378) 1.00
es/parser/mootools 8303081 ns/iter (± 18014) 8286984 ns/iter (± 22122) 1.00
es/parser/underscore 1698416 ns/iter (± 9777) 1702262 ns/iter (± 9508) 1.00
es/parser/three 47348792 ns/iter (± 962846) 47884969 ns/iter (± 873855) 0.99
es/parser/yui 8232625 ns/iter (± 26337) 8199566 ns/iter (± 55705) 1.00
es/preset-env/usage/builtin_type 138136 ns/iter (± 33304) 138430 ns/iter (± 32905) 1.00
es/preset-env/usage/property 16983 ns/iter (± 49) 16566 ns/iter (± 116) 1.03
es/resolver/typescript 88781610 ns/iter (± 926469) 90919623 ns/iter (± 1172019) 0.98
es/fixer/typescript 64304909 ns/iter (± 634994) 66004264 ns/iter (± 787524) 0.97
es/hygiene/typescript 128949766 ns/iter (± 1185163) 134660484 ns/iter (± 1209721) 0.96
es/resolver_with_hygiene/typescript 240685626 ns/iter (± 1451966) 249409564 ns/iter (± 2140629) 0.97
es/visitor/base-perf/module_clone 58869 ns/iter (± 248) 58783 ns/iter (± 324) 1.00
es/visitor/base-perf/fold_empty 62501 ns/iter (± 283) 62980 ns/iter (± 330) 0.99
es/visitor/base-perf/fold_noop_impl_all 63080 ns/iter (± 208) 63128 ns/iter (± 106) 1.00
es/visitor/base-perf/fold_noop_impl_vec 62905 ns/iter (± 263) 63570 ns/iter (± 312) 0.99
es/visitor/base-perf/boxing_boxed_clone 58 ns/iter (± 0) 57 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed_clone 46 ns/iter (± 0) 40 ns/iter (± 0) 1.15
es/visitor/base-perf/boxing_boxed 110 ns/iter (± 0) 109 ns/iter (± 0) 1.01
es/visitor/base-perf/boxing_unboxed 80 ns/iter (± 0) 78 ns/iter (± 0) 1.03
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2620 ns/iter (± 34) 2588 ns/iter (± 9) 1.01
es/base/parallel/resolver/typescript 3887086571 ns/iter (± 271399555) 3728249021 ns/iter (± 254417276) 1.04
es/base/parallel/hygiene/typescript 1442054423 ns/iter (± 13404763) 1442155216 ns/iter (± 22494771) 1.00
misc/visitors/time-complexity/time 5 133 ns/iter (± 5) 132 ns/iter (± 1) 1.01
misc/visitors/time-complexity/time 10 305 ns/iter (± 0) 390 ns/iter (± 8) 0.78
misc/visitors/time-complexity/time 15 519 ns/iter (± 2) 518 ns/iter (± 25) 1.00
misc/visitors/time-complexity/time 20 1049 ns/iter (± 3) 1055 ns/iter (± 5) 0.99
misc/visitors/time-complexity/time 40 3565 ns/iter (± 40) 3516 ns/iter (± 92) 1.01
misc/visitors/time-complexity/time 60 7302 ns/iter (± 26) 7268 ns/iter (± 36) 1.00
es/full-target/es2016 228013 ns/iter (± 358) 230863 ns/iter (± 640) 0.99
es/full-target/es2017 217853 ns/iter (± 986) 217393 ns/iter (± 942) 1.00
es/full-target/es2018 205911 ns/iter (± 479) 206616 ns/iter (± 995) 1.00
es2020_nullish_coalescing 72388 ns/iter (± 283) 71926 ns/iter (± 450) 1.01
es2020_optional_chaining 82812 ns/iter (± 201) 80274 ns/iter (± 205) 1.03
es2022_class_properties 117005 ns/iter (± 357) 113279 ns/iter (± 269) 1.03
es2018_object_rest_spread 76552 ns/iter (± 225) 74775 ns/iter (± 656) 1.02
es2019_optional_catch_binding 65257 ns/iter (± 243) 63512 ns/iter (± 283) 1.03
es2017_async_to_generator 65240 ns/iter (± 283) 64022 ns/iter (± 138) 1.02
es2016_exponentiation 67370 ns/iter (± 203) 67918 ns/iter (± 105) 0.99
es2015_arrow 73067 ns/iter (± 325) 71605 ns/iter (± 214) 1.02
es2015_block_scoped_fn 70635 ns/iter (± 258) 68436 ns/iter (± 270) 1.03
es2015_block_scoping 122967 ns/iter (± 593) 123091 ns/iter (± 429) 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.