diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2023-02-22 23:21:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-22 23:21:05 +0100 |
commit | 1c14127c4f54d815b3e1be48bddd5198dcb33a50 (patch) | |
tree | 56dbbea5e9a39fc95d3c722811b47bce08e21b59 /cli/resolver.rs | |
parent | c18e0d1d37878bb4441f7f8d339cc23ac8e68448 (diff) |
feat: support bare specifier resolution with package.json (#17864)
This commit enables resolution of "bare specifiers" (eg. "import express
from 'express';") if a "package.json" file is discovered.
It's a step towards being able to run projects authored for Node.js
without any changes.
With this commit we are able to successfully run Vite projects without
any changes to the user code.
---------
Co-authored-by: David Sherret <dsherret@gmail.com>
Diffstat (limited to 'cli/resolver.rs')
-rw-r--r-- | cli/resolver.rs | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/cli/resolver.rs b/cli/resolver.rs index 76e1715b5..ce0d5d5cf 100644 --- a/cli/resolver.rs +++ b/cli/resolver.rs @@ -26,9 +26,6 @@ use crate::npm::NpmResolution; #[derive(Debug, Clone)] pub struct CliGraphResolver { maybe_import_map: Option<Arc<ImportMap>>, - // TODO(bartlomieju): actually use in `resolver`, once - // deno_graph refactors and upgrades land. - #[allow(dead_code)] maybe_package_json_deps: Option<HashMap<String, NpmPackageReq>>, maybe_default_jsx_import_source: Option<String>, maybe_jsx_import_source_module: Option<String>, @@ -116,15 +113,19 @@ impl Resolver for CliGraphResolver { specifier: &str, referrer: &ModuleSpecifier, ) -> Result<ModuleSpecifier, AnyError> { - // TODO(bartlomieju): actually use `maybe_package_json_deps` here, once - // deno_graph refactors and upgrades land. if let Some(import_map) = &self.maybe_import_map { - import_map + return import_map .resolve(specifier, referrer) - .map_err(|err| err.into()) - } else { - deno_graph::resolve_import(specifier, referrer).map_err(|err| err.into()) + .map_err(|err| err.into()); + } + + if let Some(deps) = self.maybe_package_json_deps.as_ref() { + if let Some(req) = deps.get(specifier) { + return Ok(ModuleSpecifier::parse(&format!("npm:{req}")).unwrap()); + } } + + deno_graph::resolve_import(specifier, referrer).map_err(|err| err.into()) } } |