diff --git a/src/module_loader.rs b/src/module_loader.rs index 25f3b23..8d929e0 100644 --- a/src/module_loader.rs +++ b/src/module_loader.rs @@ -232,6 +232,7 @@ mod test { async fn test_import_provider() { let loader = RustyLoader::new(LoaderOptions { import_provider: Some(Box::new(TestImportProvider::new())), + cwd: std::env::current_dir().unwrap(), ..LoaderOptions::default() }); let expected_responses = [ diff --git a/src/module_loader/inner_loader.rs b/src/module_loader/inner_loader.rs index 062f016..274a4a1 100644 --- a/src/module_loader/inner_loader.rs +++ b/src/module_loader/inner_loader.rs @@ -164,6 +164,11 @@ impl InnerRustyLoader { referrer: &str, kind: deno_core::ResolutionKind, ) -> Result { + #[cfg(feature = "node_experimental")] + let referrer_specifier = referrer + .to_module_specifier(&self.cwd) + .map_err(|e| JsErrorBox::from_err(to_io_err(e)))?; + // // Handle import aliasing for node imports #[cfg(feature = "node_experimental")] @@ -178,6 +183,15 @@ impl InnerRustyLoader { return self.load_npm(specifier, referrer); } + // + // Use node resolution if we're in an npm package + #[cfg(feature = "node_experimental")] + if referrer_specifier.scheme() == "file" + && self.node.rusty_resolver.in_npm_package(&referrer_specifier) + { + return self.load_npm(specifier, referrer); + } + // Resolve the module specifier to an absolute URL let url = deno_core::resolve_import(specifier, referrer)?;