Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit76c6380

Browse files
fix: dynamic import with backquotes are not bundled (#4435)
<!-- Thank you for contributing! -->### Description1.Closed#4433<!-- Please insert your description here and provide especially infoabout the "what" this PR is solving -->
1 parent6e72663 commit76c6380

File tree

7 files changed

+43
-15
lines changed

7 files changed

+43
-15
lines changed

‎crates/rolldown/src/ast_scanner/impl_visit.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use rolldown_common::{
1414
};
1515
#[cfg(debug_assertions)]
1616
use rolldown_ecmascript::ToSourceString;
17+
use rolldown_ecmascript_utils::ExpressionExt;
1718
use rolldown_error::BuildDiagnostic;
1819
use rolldown_std_utils::OptionExt;
1920

@@ -170,18 +171,14 @@ impl<'me, 'ast: 'me> Visit<'ast> for AstScanner<'me, 'ast> {
170171
}
171172

172173
fnvisit_import_expression(&mutself,expr:&ast::ImportExpression<'ast>){
173-
iflet ast::Expression::StringLiteral(request) =&expr.source{
174-
let import_rec_idx =self.add_import_record(
175-
request.value.as_str(),
176-
ImportKind::DynamicImport,
177-
expr.source.span(),
178-
{
174+
ifletSome(request) = expr.source.as_static_module_request(){
175+
let import_rec_idx =
176+
self.add_import_record(request.as_str(),ImportKind::DynamicImport, expr.source.span(),{
179177
letmut meta =ImportRecordMeta::empty();
180178
meta.set(ImportRecordMeta::IS_TOP_LEVEL,self.is_root_scope());
181179
meta.set(ImportRecordMeta::IS_UNSPANNED_IMPORT, expr.source.span().is_empty());
182180
meta
183-
},
184-
);
181+
});
185182
self.init_dynamic_import_binding_usage_info(import_rec_idx);
186183
self.result.imports.insert(expr.span, import_rec_idx);
187184
}

‎crates/rolldown/src/module_finalizers/scope_hoisting/impl_visit_mut.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use oxc::{
55
match_member_expression,
66
},
77
ast_visit::{VisitMut, walk_mut},
8-
span::{SPAN,Span},
8+
span::{GetSpan,SPAN,Span},
99
};
1010
use rolldown_common::{ExportsKind,Module,StmtInfoIdx,SymbolRef,ThisExprReplaceKind,WrapKind};
1111
use rolldown_ecmascript_utils::ExpressionExt;
@@ -368,7 +368,7 @@ impl<'ast> VisitMut<'ast> for ScopeHoistingFinalizer<'_, 'ast> {
368368
fnvisit_import_expression(&mutself,expr:&mut ast::ImportExpression<'ast>){
369369
if expr.options.is_none(){
370370
// Make sure the import expression is in correct form. If it's not, we should leave it as it is.
371-
ifletast::Expression::StringLiteral(str) =&mutexpr.source{
371+
ifletSome(str) = expr.source.as_static_module_request(){
372372
let rec_id =self.ctx.module.imports[&expr.span];
373373
let rec =&self.ctx.module.import_records[rec_id];
374374
let importee_id = rec.resolved_module;
@@ -379,13 +379,16 @@ impl<'ast> VisitMut<'ast> for ScopeHoistingFinalizer<'_, 'ast> {
379379
let importee_chunk =&self.ctx.chunk_graph.chunk_table[importee_chunk_id];
380380

381381
let import_path = importer_chunk.import_path_for(importee_chunk);
382-
383-
str.value =self.snippet.atom(&import_path);
382+
expr.source =Expression::StringLiteral(
383+
self.snippet.alloc_string_literal(&import_path, expr.source.span()),
384+
);
384385
}
385386
Module::External(importee) =>{
386387
let import_path = importee.get_import_path(importer_chunk);
387-
if str.value != import_path{
388-
str.value =self.snippet.atom(&import_path);
388+
if str != import_path{
389+
expr.source =Expression::StringLiteral(
390+
self.snippet.alloc_string_literal(&import_path, expr.source.span()),
391+
);
389392
}
390393
}
391394
}

‎crates/rolldown_ecmascript_utils/src/extensions/ast_ext/expression_ext.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use oxc::ast::ast;
1+
use oxc::{ast::ast, span::Atom};
22

33
pubtraitExpressionExt<'ast>{
44
fnas_call_expression(&self) ->Option<&ast::CallExpression<'ast>>;
@@ -10,6 +10,7 @@ pub trait ExpressionExt<'ast> {
1010
fnas_string_literal(&self) ->Option<&ast::StringLiteral<'ast>>;
1111
fnas_binary_expression(&self) ->Option<&ast::BinaryExpression<'ast>>;
1212
fnas_static_member_expr_mut(&mutself) ->Option<&mut ast::StaticMemberExpression<'ast>>;
13+
fnas_static_module_request(&self) ->Option<Atom<'ast>>;
1314

1415
fnis_import_meta(&self) ->bool;
1516
fnis_import_meta_url(&self) ->bool;
@@ -48,6 +49,16 @@ impl<'ast> ExpressionExt<'ast> for ast::Expression<'ast> {
4849
Some(expr)
4950
}
5051

52+
fnas_static_module_request(&self) ->Option<Atom<'ast>>{
53+
match&self{
54+
ast::Expression::StringLiteral(request) =>Some(request.value),
55+
ast::Expression::TemplateLiteral(request)if request.is_no_substitution_template() =>{
56+
request.quasi()
57+
}
58+
_ =>None,
59+
}
60+
}
61+
5162
fnas_binary_expression(&self) ->Option<&ast::BinaryExpression<'ast>>{
5263
let ast::Expression::BinaryExpression(expr) =selfelse{
5364
returnNone;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import{defineTest}from"rolldown-tests";
2+
3+
exportdefaultdefineTest({
4+
config:{},
5+
afterTest:async()=>{
6+
awaitimport("./assert.mjs");
7+
},
8+
});
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import{a}from'./dist/main'
2+
importassertfrom'assert'
3+
4+
5+
assert.equal(a,1000);
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
exportconsta=1000;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
constns=awaitimport(`./foo.mjs`)
2+
3+
exportconsta=ns.a;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp