mirror of
https://github.com/denoland/deno.git
synced 2025-03-03 17:34:47 -05:00
feat(compile): support sloppy imports (#27944)
Closes https://github.com/denoland/deno/issues/26102
This commit is contained in:
parent
41fa8df197
commit
e46860a2fd
7 changed files with 49 additions and 12 deletions
|
@ -59,6 +59,9 @@ use deno_resolver::npm::NpmReqResolver;
|
|||
use deno_resolver::npm::NpmReqResolverOptions;
|
||||
use deno_resolver::npm::NpmResolver;
|
||||
use deno_resolver::npm::NpmResolverCreateOptions;
|
||||
use deno_resolver::sloppy_imports::SloppyImportsCachedFs;
|
||||
use deno_resolver::sloppy_imports::SloppyImportsResolutionKind;
|
||||
use deno_resolver::sloppy_imports::SloppyImportsResolver;
|
||||
use deno_runtime::code_cache::CodeCache;
|
||||
use deno_runtime::deno_fs::FileSystem;
|
||||
use deno_runtime::deno_node::create_host_defined_options;
|
||||
|
@ -103,6 +106,8 @@ struct SharedModuleLoaderState {
|
|||
npm_module_loader: Arc<DenoRtNpmModuleLoader>,
|
||||
npm_registry_permission_checker: NpmRegistryReadPermissionChecker<DenoRtSys>,
|
||||
npm_req_resolver: Arc<DenoRtNpmReqResolver>,
|
||||
sloppy_imports_resolver:
|
||||
Option<SloppyImportsResolver<SloppyImportsCachedFs<DenoRtSys>>>,
|
||||
vfs: Arc<FileBackedVfs>,
|
||||
workspace_resolver: WorkspaceResolver<DenoRtSys>,
|
||||
}
|
||||
|
@ -316,6 +321,18 @@ impl ModuleLoader for EmbeddedModuleLoader {
|
|||
}
|
||||
}
|
||||
|
||||
// do sloppy imports resolution if enabled
|
||||
let specifier = if let Some(sloppy_imports_resolver) =
|
||||
&self.shared.sloppy_imports_resolver
|
||||
{
|
||||
sloppy_imports_resolver
|
||||
.resolve(&specifier, SloppyImportsResolutionKind::Execution)
|
||||
.map(|s| s.into_specifier())
|
||||
.unwrap_or(specifier)
|
||||
} else {
|
||||
specifier
|
||||
};
|
||||
|
||||
Ok(
|
||||
self
|
||||
.shared
|
||||
|
@ -813,6 +830,10 @@ pub async fn run(
|
|||
pkg_json_resolver.clone(),
|
||||
sys.clone(),
|
||||
));
|
||||
let sloppy_imports_resolver =
|
||||
metadata.unstable_config.sloppy_imports.then(|| {
|
||||
SloppyImportsResolver::new(SloppyImportsCachedFs::new(sys.clone()))
|
||||
});
|
||||
let workspace_resolver = {
|
||||
let import_map = match metadata.workspace_resolver.import_map {
|
||||
Some(import_map) => Some(
|
||||
|
@ -892,6 +913,7 @@ pub async fn run(
|
|||
)),
|
||||
npm_registry_permission_checker,
|
||||
npm_req_resolver,
|
||||
sloppy_imports_resolver,
|
||||
vfs: vfs.clone(),
|
||||
workspace_resolver,
|
||||
}),
|
||||
|
|
|
@ -43,18 +43,6 @@ pub async fn compile(
|
|||
cli_options.initial_cwd(),
|
||||
)?;
|
||||
|
||||
// this is not supported, so show a warning about it, but don't error in order
|
||||
// to allow someone to still run `deno compile` when this is in a deno.json
|
||||
if cli_options.unstable_sloppy_imports() {
|
||||
log::warn!(
|
||||
concat!(
|
||||
"{} Sloppy imports are not supported in deno compile. ",
|
||||
"The compiled executable may encounter runtime errors.",
|
||||
),
|
||||
crate::colors::yellow("Warning"),
|
||||
);
|
||||
}
|
||||
|
||||
let output_path = resolve_compile_executable_output_path(
|
||||
http_client,
|
||||
&compile_flags,
|
||||
|
|
14
tests/specs/compile/sloppy_imports/__test__.jsonc
Normal file
14
tests/specs/compile/sloppy_imports/__test__.jsonc
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"tempDir": true,
|
||||
"steps": [
|
||||
{
|
||||
"args": "compile --unstable-sloppy-imports -A --output out main.ts",
|
||||
"output": "compile.out"
|
||||
},
|
||||
{
|
||||
"commandName": "./out",
|
||||
"args": [],
|
||||
"output": "main.out"
|
||||
}
|
||||
]
|
||||
}
|
10
tests/specs/compile/sloppy_imports/compile.out
Normal file
10
tests/specs/compile/sloppy_imports/compile.out
Normal file
|
@ -0,0 +1,10 @@
|
|||
Check file:///[WILDLINE]/main.ts
|
||||
Compile file:///[WILDLINE]/main.ts to [WILDLINE]
|
||||
|
||||
Embedded Files
|
||||
|
||||
[WILDLINE]
|
||||
├── hello.ts ([WILDLINE])
|
||||
└── main.ts ([WILDLINE])
|
||||
|
||||
[WILDCARD]
|
1
tests/specs/compile/sloppy_imports/hello.ts
Normal file
1
tests/specs/compile/sloppy_imports/hello.ts
Normal file
|
@ -0,0 +1 @@
|
|||
console.log("Hello");
|
1
tests/specs/compile/sloppy_imports/main.out
Normal file
1
tests/specs/compile/sloppy_imports/main.out
Normal file
|
@ -0,0 +1 @@
|
|||
Hello
|
1
tests/specs/compile/sloppy_imports/main.ts
Normal file
1
tests/specs/compile/sloppy_imports/main.ts
Normal file
|
@ -0,0 +1 @@
|
|||
import "./hello"; // no ext for sloppy imports
|
Loading…
Add table
Reference in a new issue