mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
fix(install): Make sure target node_modules exists when symlinking (#25494)
Fixes https://github.com/denoland/deno/issues/25493
This commit is contained in:
parent
51f5f5789b
commit
292344af42
6 changed files with 67 additions and 2 deletions
|
@ -10,6 +10,7 @@ use std::cmp::Ordering;
|
|||
use std::collections::hash_map::Entry;
|
||||
use std::collections::BTreeMap;
|
||||
use std::collections::HashMap;
|
||||
use std::collections::HashSet;
|
||||
use std::fs;
|
||||
use std::path::Path;
|
||||
use std::path::PathBuf;
|
||||
|
@ -620,6 +621,9 @@ async fn sync_resolution_with_fs(
|
|||
|
||||
let mut found_names: HashMap<&String, &PackageNv> = HashMap::new();
|
||||
|
||||
// set of node_modules in workspace packages that we've already ensured exist
|
||||
let mut existing_child_node_modules_dirs: HashSet<PathBuf> = HashSet::new();
|
||||
|
||||
// 4. Create symlinks for package json dependencies
|
||||
{
|
||||
for remote in npm_install_deps_provider.remote_pkgs() {
|
||||
|
@ -667,8 +671,15 @@ async fn sync_resolution_with_fs(
|
|||
);
|
||||
if install_in_child {
|
||||
// symlink the dep into the package's child node_modules folder
|
||||
let dest_path =
|
||||
remote.base_dir.join("node_modules").join(&remote.alias);
|
||||
let dest_node_modules = remote.base_dir.join("node_modules");
|
||||
if !existing_child_node_modules_dirs.contains(&dest_node_modules) {
|
||||
fs::create_dir_all(&dest_node_modules).with_context(|| {
|
||||
format!("Creating '{}'", dest_node_modules.display())
|
||||
})?;
|
||||
existing_child_node_modules_dirs.insert(dest_node_modules.clone());
|
||||
}
|
||||
let mut dest_path = dest_node_modules;
|
||||
dest_path.push(&remote.alias);
|
||||
|
||||
symlink_package_dir(&local_registry_package_path, &dest_path)?;
|
||||
} else {
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
// Regression test for https://github.com/denoland/deno/issues/25493
|
||||
//
|
||||
// `deno install` where we need to create a `node_modules` for a workspace member
|
||||
// due to conflicting package versions, but when we go to set it up, the
|
||||
// symlink target path (`package2/node_modules/chalk`) has `node_modules` as its parent,
|
||||
// and it doesn't exist yet
|
||||
{
|
||||
"tempDir": true,
|
||||
"steps": [
|
||||
{
|
||||
"args": "install",
|
||||
"output": "install.out"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"nodeModulesDir": "auto",
|
||||
"workspace": [
|
||||
"./package1",
|
||||
"./package2"
|
||||
]
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
[UNORDERED_START]
|
||||
Download http://localhost:4260/chalk
|
||||
Download http://localhost:4260/ansi-styles
|
||||
Download http://localhost:4260/supports-color
|
||||
Download http://localhost:4260/color-convert
|
||||
Download http://localhost:4260/has-flag
|
||||
Download http://localhost:4260/color-name
|
||||
Download http://localhost:4260/chalk/chalk-4.1.2.tgz
|
||||
Download http://localhost:4260/chalk/chalk-5.0.1.tgz
|
||||
Download http://localhost:4260/supports-color/supports-color-7.2.0.tgz
|
||||
Download http://localhost:4260/ansi-styles/ansi-styles-4.3.0.tgz
|
||||
Download http://localhost:4260/has-flag/has-flag-4.0.0.tgz
|
||||
Download http://localhost:4260/color-convert/color-convert-2.0.1.tgz
|
||||
Download http://localhost:4260/color-name/color-name-1.1.4.tgz
|
||||
Initialize supports-color@7.2.0
|
||||
Initialize chalk@4.1.2
|
||||
Initialize ansi-styles@4.3.0
|
||||
Initialize color-name@1.1.4
|
||||
Initialize color-convert@2.0.1
|
||||
Initialize has-flag@4.0.0
|
||||
Initialize chalk@5.0.1
|
||||
[UNORDERED_END]
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"chalk": "4.1.2"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"chalk": "5.0.1"
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue