mirror of
https://github.com/denoland/deno.git
synced 2024-11-24 15:19:26 -05:00
fix(unstable/compile): handle byonm import in sub dir (#24755)
Regression in 1.45.0 caused by storing relative paths instead of absolute paths in the binary. Closes #24654
This commit is contained in:
parent
ed2bf8ce31
commit
06b6352292
6 changed files with 75 additions and 8 deletions
|
@ -1370,15 +1370,37 @@ impl<TEnv: NodeResolverEnv> NodeResolver<TEnv> {
|
|||
&self,
|
||||
file_path: &Path,
|
||||
) -> Result<Option<PackageJsonRc>, ClosestPkgJsonError> {
|
||||
// we use this for deno compile using byonm because the script paths
|
||||
// won't be in virtual file system, but the package.json paths will be
|
||||
fn canonicalize_first_ancestor_exists(
|
||||
dir_path: &Path,
|
||||
env: &dyn NodeResolverEnv,
|
||||
) -> Result<Option<PathBuf>, std::io::Error> {
|
||||
for ancestor in dir_path.ancestors() {
|
||||
match env.realpath_sync(ancestor) {
|
||||
Ok(dir_path) => return Ok(Some(dir_path)),
|
||||
Err(err) if err.kind() == std::io::ErrorKind::NotFound => {
|
||||
// keep searching
|
||||
}
|
||||
Err(err) => return Err(err),
|
||||
}
|
||||
}
|
||||
Ok(None)
|
||||
}
|
||||
|
||||
let parent_dir = file_path.parent().unwrap();
|
||||
let current_dir =
|
||||
strip_unc_prefix(self.env.realpath_sync(parent_dir).map_err(
|
||||
|source| CanonicalizingPkgJsonDirError {
|
||||
dir_path: parent_dir.to_path_buf(),
|
||||
source,
|
||||
},
|
||||
)?);
|
||||
for current_dir in current_dir.ancestors() {
|
||||
let Some(start_dir) = canonicalize_first_ancestor_exists(
|
||||
parent_dir, &self.env,
|
||||
)
|
||||
.map_err(|source| CanonicalizingPkgJsonDirError {
|
||||
dir_path: parent_dir.to_path_buf(),
|
||||
source,
|
||||
})?
|
||||
else {
|
||||
return Ok(None);
|
||||
};
|
||||
let start_dir = strip_unc_prefix(start_dir);
|
||||
for current_dir in start_dir.ancestors() {
|
||||
let package_json_path = current_dir.join("package.json");
|
||||
if let Some(pkg_json) = self.load_package_json(&package_json_path)? {
|
||||
return Ok(Some(pkg_json));
|
||||
|
|
28
tests/specs/compile/byonm_main_sub_dir/__test__.jsonc
Normal file
28
tests/specs/compile/byonm_main_sub_dir/__test__.jsonc
Normal file
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"tempDir": true,
|
||||
"envs": {
|
||||
"DENO_FUTURE": "1"
|
||||
},
|
||||
"steps": [{
|
||||
"args": "install",
|
||||
"output": "[WILDCARD]"
|
||||
}, {
|
||||
"if": "unix",
|
||||
"args": "compile --output main src/main.ts",
|
||||
"output": "[WILDCARD]"
|
||||
}, {
|
||||
"if": "unix",
|
||||
"commandName": "./main",
|
||||
"args": [],
|
||||
"output": "main.out"
|
||||
}, {
|
||||
"if": "windows",
|
||||
"args": "compile --output main.exe src/main.ts",
|
||||
"output": "[WILDCARD]"
|
||||
}, {
|
||||
"if": "windows",
|
||||
"commandName": "./main.exe",
|
||||
"args": [],
|
||||
"output": "main.out"
|
||||
}]
|
||||
}
|
3
tests/specs/compile/byonm_main_sub_dir/deno.json
Normal file
3
tests/specs/compile/byonm_main_sub_dir/deno.json
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"unstable": ["byonm"]
|
||||
}
|
1
tests/specs/compile/byonm_main_sub_dir/main.out
Normal file
1
tests/specs/compile/byonm_main_sub_dir/main.out
Normal file
|
@ -0,0 +1 @@
|
|||
3
|
11
tests/specs/compile/byonm_main_sub_dir/package.json
Normal file
11
tests/specs/compile/byonm_main_sub_dir/package.json
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"name": "package",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@denotest/add": "*"
|
||||
}
|
||||
}
|
2
tests/specs/compile/byonm_main_sub_dir/src/main.ts
Normal file
2
tests/specs/compile/byonm_main_sub_dir/src/main.ts
Normal file
|
@ -0,0 +1,2 @@
|
|||
import { add } from "@denotest/add";
|
||||
console.log(add(1, 2));
|
Loading…
Reference in a new issue