Skip to content

Commit

Permalink
fix(es/module): Don't resolve as node_modules from TscResolver (#…
Browse files Browse the repository at this point in the history
…7866)

**Related issue:**

 - Closes #7863
  • Loading branch information
kdy1 committed Aug 25, 2023
1 parent 7986566 commit 11ebae1
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 3 deletions.
2 changes: 1 addition & 1 deletion crates/swc/src/config/mod.rs
Expand Up @@ -1951,7 +1951,7 @@ fn build_resolver(base_url: PathBuf, paths: CompiledPaths) -> Box<SwcImportResol

let r = {
let r = TsConfigResolver::new(
NodeModulesResolver::new(Default::default(), Default::default(), true),
NodeModulesResolver::without_node_modules(Default::default(), Default::default(), true),
base_url.clone(),
paths.clone(),
);
Expand Down
2 changes: 1 addition & 1 deletion crates/swc/src/lib.rs
Expand Up @@ -193,7 +193,7 @@ pub mod resolver {
preserve_symlinks: bool,
) -> CachingResolver<TsConfigResolver<NodeModulesResolver>> {
let r = TsConfigResolver::new(
NodeModulesResolver::new(target_env, alias, preserve_symlinks),
NodeModulesResolver::without_node_modules(target_env, alias, preserve_symlinks),
base_url,
paths,
);
Expand Down
15 changes: 15 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7863/1/input/.swcrc
@@ -0,0 +1,15 @@
{
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": true
},
"baseUrl": ".",
"paths": {
"~/*": [
"./src/*"
]
},
"externalHelpers": true
}
}
7 changes: 7 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7863/1/input/1.js
@@ -0,0 +1,7 @@
import test from '~/util/test';

class X {

}

console.log(test, X);
7 changes: 7 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7863/1/output/1.js
@@ -0,0 +1,7 @@
import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
import test from "./src/util/test";
var X = function X() {
"use strict";
_class_call_check(this, X);
};
console.log(test, X);
20 changes: 20 additions & 0 deletions crates/swc_ecma_loader/src/resolvers/node.rs
Expand Up @@ -103,6 +103,7 @@ pub struct NodeModulesResolver {
alias: AHashMap<String, String>,
// if true do not resolve symlink
preserve_symlinks: bool,
ignore_node_modules: bool,
}

static EXTENSIONS: &[&str] = &["ts", "tsx", "js", "jsx", "json", "node"];
Expand All @@ -118,6 +119,21 @@ impl NodeModulesResolver {
target_env,
alias,
preserve_symlinks,
ignore_node_modules: false,
}
}

/// Create a node modules resolver which does not care about `node_modules`
pub fn without_node_modules(
target_env: TargetEnv,
alias: AHashMap<String, String>,
preserve_symlinks: bool,
) -> Self {
Self {
target_env,
alias,
preserve_symlinks,
ignore_node_modules: true,
}
}

Expand Down Expand Up @@ -369,6 +385,10 @@ impl NodeModulesResolver {
base_dir: &Path,
target: &str,
) -> Result<Option<PathBuf>, Error> {
if self.ignore_node_modules {
return Ok(None);
}

let absolute_path = to_absolute_path(base_dir)?;
let mut path = Some(&*absolute_path);
while let Some(dir) = path {
Expand Down
14 changes: 14 additions & 0 deletions crates/swc_ecma_loader/src/resolvers/tsc.rs
Expand Up @@ -119,6 +119,20 @@ where
"Resolved `{}` as `{}` from `{}`",
module_specifier, resolved, base
);

if let FileName::Real(target) = &resolved {
// If node_modules is in path, we should return module specifier.
if target.components().any(|c| {
if let Component::Normal(v) = c {
v == "node_modules"
} else {
false
}
}) {
return Ok(FileName::Real(module_specifier.into()));
}
}

Ok(resolved)
}

Expand Down
2 changes: 1 addition & 1 deletion node-swc/__tests__/transform/issue_4730_test.mjs
Expand Up @@ -37,7 +37,7 @@ it("should work", async () => {
Object.defineProperty(exports, \\"__esModule\\", {
value: true
});
const _interop_require_wildcard = require(\\"node_modules/@swc/helpers/esm/_interop_require_wildcard\\");
const _interop_require_wildcard = require(\\"@swc/helpers/_/_interop_require_wildcard\\");
const _b = require(\\"../packages/b/src\\");
async function display() {
const displayA = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard._(require(\\"../packages/a/src\\"))).then((c)=>c.displayA);
Expand Down

1 comment on commit 11ebae1

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.