mirror of
https://github.com/denoland/deno.git
synced 2025-01-21 21:50:00 -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,
|
&self,
|
||||||
file_path: &Path,
|
file_path: &Path,
|
||||||
) -> Result<Option<PackageJsonRc>, ClosestPkgJsonError> {
|
) -> 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 parent_dir = file_path.parent().unwrap();
|
||||||
let current_dir =
|
let Some(start_dir) = canonicalize_first_ancestor_exists(
|
||||||
strip_unc_prefix(self.env.realpath_sync(parent_dir).map_err(
|
parent_dir, &self.env,
|
||||||
|source| CanonicalizingPkgJsonDirError {
|
)
|
||||||
|
.map_err(|source| CanonicalizingPkgJsonDirError {
|
||||||
dir_path: parent_dir.to_path_buf(),
|
dir_path: parent_dir.to_path_buf(),
|
||||||
source,
|
source,
|
||||||
},
|
})?
|
||||||
)?);
|
else {
|
||||||
for current_dir in current_dir.ancestors() {
|
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");
|
let package_json_path = current_dir.join("package.json");
|
||||||
if let Some(pkg_json) = self.load_package_json(&package_json_path)? {
|
if let Some(pkg_json) = self.load_package_json(&package_json_path)? {
|
||||||
return Ok(Some(pkg_json));
|
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…
Add table
Reference in a new issue