From 8da8994e191b75b87858cea7a981c480cbee00f1 Mon Sep 17 00:00:00 2001 From: sorrycc Date: Wed, 8 Jan 2025 09:59:00 +0800 Subject: [PATCH] fix: win path problem with context module and require context --- crates/mako/src/plugins/context_module.rs | 3 +- .../mako/src/plugins/require_context/param.rs | 5 ++- .../src/plugins/require_context/render.rs | 38 +++++++++++++------ 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/crates/mako/src/plugins/context_module.rs b/crates/mako/src/plugins/context_module.rs index 94290395d..1ffbce9f7 100644 --- a/crates/mako/src/plugins/context_module.rs +++ b/crates/mako/src/plugins/context_module.rs @@ -12,7 +12,7 @@ use swc_core::ecma::ast::{ use swc_core::ecma::utils::{member_expr, quote_ident, quote_str, ExprExt, ExprFactory}; use swc_core::ecma::visit::{VisitMut, VisitMutWith}; -use crate::ast::file::{Content, JsContent}; +use crate::ast::file::{win_path, Content, JsContent}; use crate::ast::utils::{is_commonjs_require, is_dynamic_import}; use crate::ast::DUMMY_CTXT; use crate::build::load::JS_EXTENSIONS; @@ -120,6 +120,7 @@ module.exports = (id) => {{ "#, key_values .into_values() + .map(|v| win_path(v.as_str())) .collect::>() .join(",\n") ); diff --git a/crates/mako/src/plugins/require_context/param.rs b/crates/mako/src/plugins/require_context/param.rs index 9ad95dd5d..faf3dd559 100644 --- a/crates/mako/src/plugins/require_context/param.rs +++ b/crates/mako/src/plugins/require_context/param.rs @@ -8,6 +8,7 @@ use swc_core::ecma::ast::{Expr, ExprOrSpread, Lit, Regex}; use thiserror::Error; use super::VIRTUAL_REQUIRE_CONTEXT_MODULE; +use crate::ast::file::win_path; use crate::compiler::Context; #[derive(Debug)] @@ -34,9 +35,9 @@ impl ContextParam { Ok(format!( "{}?root={}&sub={}®={}&mode={}&ig={}", VIRTUAL_REQUIRE_CONTEXT_MODULE, - encode(relative_path.to_string_lossy().as_ref(),), + encode(win_path(relative_path.to_string_lossy().as_ref()).as_str()), self.use_subdirectories, - encode(self.reg_expr.exp.as_ref()), + encode(win_path(self.reg_expr.exp.as_ref()).as_str()), self.mode, ignore_case, )) diff --git a/crates/mako/src/plugins/require_context/render.rs b/crates/mako/src/plugins/require_context/render.rs index 40f1549a0..8383e42fc 100644 --- a/crates/mako/src/plugins/require_context/render.rs +++ b/crates/mako/src/plugins/require_context/render.rs @@ -8,6 +8,7 @@ use pathdiff::diff_paths; use regex::RegexBuilder; use super::param::ContextLoadMode; +use crate::ast::file::win_path; use crate::compiler::Context; use crate::module::ModuleId; @@ -24,18 +25,30 @@ impl ContextLoadMode { let mut map_str = String::from(r#"var _map_lazy = {"#); map.iter().for_each(|(key, value)| match self { ContextLoadMode::Sync => { + println!( + "... render_module_import1: {} -> {}", + win_path(key), + win_path(value) + ); map_str.push_str(&format!( r#" "{}": ()=> require("{}"),"#, - key, value + win_path(key), + win_path(value) )); } ContextLoadMode::Lazy => { + println!( + "... render_module_import2: {} -> {}", + win_path(key), + win_path(value) + ); map_str.push_str(&format!( r#" "{}": ()=> import("{}"),"#, - key, value + win_path(key), + win_path(value) )); } ContextLoadMode::Eager | ContextLoadMode::Weak | ContextLoadMode::LazyOnce => { @@ -71,8 +84,8 @@ impl ContextLoadMode { var e = new Error("Cannot find module '" + req + "'"); e.code = 'MODULE_NOT_FOUND'; return Promise.reject(e) - }} - }}; + }} + }}; "# .to_string(), ContextLoadMode::Eager | ContextLoadMode::Weak | ContextLoadMode::LazyOnce => { @@ -147,11 +160,12 @@ impl VirtualContextModuleRender { pub fn module_id_map(&self, map: &BTreeMap, context: &Arc) -> String { let mut map_str = String::from(r#"var _map = {"#); for (key, value) in map.iter() { + println!("... replace key: {} -> {}", key, win_path(key)); map_str.push_str(&format!( r#" "{}": "{}","#, - key, - ModuleId::from(value.as_str()).generate(context) + win_path(key), + win_path(ModuleId::from(value.as_str()).generate(context).as_str()) )); } map_str.push_str("\n};\n"); @@ -175,7 +189,7 @@ impl VirtualContextModuleRender { r#" // context Map {} -// context lazy require function Map +// context lazy require function Map {} // context require {} @@ -183,16 +197,16 @@ module.exports.resolve = function(req) {{ var r = _map[req]; if(r){{ return r - }}else{{ + }}else{{ var e = new Error("Cannot find module '" + req + "'"); e.code = 'MODULE_NOT_FOUND'; - throw e; + throw e; }} }}; -module.exports.keys = function() {{ return Object.keys(_map); }} - -module.exports.id = "{id}"; +module.exports.keys = function() {{ return Object.keys(_map); }} + +module.exports.id = "{id}"; "#, self.module_id_map(&source_to_path, &context), self.module_import(&source_to_path),