summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Whitaker <17734409+nathanwhit@users.noreply.github.com>2024-06-12 16:06:41 -0700
committerGitHub <noreply@github.com>2024-06-12 16:06:41 -0700
commita7531361ef9bcc29b31ca73b68eeae707ea91f22 (patch)
treeea212f7d1fc4bc20d1facf6434672afecaffefe4
parentb30e5c09859000896a0caf52e78b0cbdb58955ef (diff)
fix(cli): Explicitly cache NPM packages during `deno install` (#24190)
Fixes a regression introduced in https://github.com/denoland/deno/pull/24170, where we wouldn't actually set up the node modules dir on `deno install` if there was an up to date deno lockfile present. Previously we were relying on the fact that resolving pending module resolution called `cache_packages` (which sets up the node modules dir). When pending resolutions were removed, and the `resolve_pending` function with it, we also removed the `cache_packages` call needed to set up node modules.
-rw-r--r--cli/module_loader.rs3
-rw-r--r--tests/specs/install/future_install_node_modules/__test__.jsonc38
-rw-r--r--tests/specs/install/future_install_node_modules/install_lockfile.out2
-rw-r--r--tests/specs/npm/npmrc_not_next_to_package_json/main.out1
4 files changed, 44 insertions, 0 deletions
diff --git a/cli/module_loader.rs b/cli/module_loader.rs
index 1da3f1f2a..5752c50aa 100644
--- a/cli/module_loader.rs
+++ b/cli/module_loader.rs
@@ -75,6 +75,9 @@ pub async fn load_top_level_deps(factory: &CliFactory) -> Result<(), AnyError> {
let npm_resolver = factory.npm_resolver().await?;
if let Some(npm_resolver) = npm_resolver.as_managed() {
npm_resolver.ensure_top_level_package_json_install().await?;
+ // TODO(nathanwhit): we call `cache_packages` if the lockfile is modified,
+ // so by calling it here it's possible we end up calling it twice
+ npm_resolver.cache_packages().await?;
}
// cache as many entries in the import map as we can
if let Some(import_map) = factory.maybe_import_map().await? {
diff --git a/tests/specs/install/future_install_node_modules/__test__.jsonc b/tests/specs/install/future_install_node_modules/__test__.jsonc
index 571216557..c705ad0f8 100644
--- a/tests/specs/install/future_install_node_modules/__test__.jsonc
+++ b/tests/specs/install/future_install_node_modules/__test__.jsonc
@@ -25,6 +25,44 @@
}
]
},
+ "install_sets_up_node_modules_with_lockfile": {
+ "tempDir": true,
+ "envs": {
+ "DENO_FUTURE": "1"
+ },
+ "steps": [
+ {
+ "args": "install",
+ "output": "install.out"
+ },
+ {
+ // check for lockfile
+ "args": [
+ "eval",
+ "console.log(Deno.readTextFileSync('./deno.lock').trim())"
+ ],
+ "output": "deno.lock.out"
+ },
+ {
+ // remove the lockfile
+ "args": [
+ "eval",
+ "Deno.removeSync('node_modules', {recursive: true});"
+ ],
+ "output": ""
+ },
+ {
+ // install, this time should use the lockfile
+ "args": "install",
+ "output": "install_lockfile.out"
+ },
+ {
+ // make sure we created the node_modules dir
+ "args": ["eval", "Deno.statSync('node_modules')"],
+ "output": ""
+ }
+ ]
+ },
"install_errors_corrupted_lockfile": {
"tempDir": true,
"envs": {
diff --git a/tests/specs/install/future_install_node_modules/install_lockfile.out b/tests/specs/install/future_install_node_modules/install_lockfile.out
new file mode 100644
index 000000000..3e27e3d20
--- /dev/null
+++ b/tests/specs/install/future_install_node_modules/install_lockfile.out
@@ -0,0 +1,2 @@
+⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
+Initialize @denotest/esm-basic@1.0.0
diff --git a/tests/specs/npm/npmrc_not_next_to_package_json/main.out b/tests/specs/npm/npmrc_not_next_to_package_json/main.out
index 8f42fb6d8..933d44f1c 100644
--- a/tests/specs/npm/npmrc_not_next_to_package_json/main.out
+++ b/tests/specs/npm/npmrc_not_next_to_package_json/main.out
@@ -4,3 +4,4 @@
[WILDCARD]
Download http://localhost:4260/@denotest/esm-basic/1.0.0.tgz
Initialize @denotest/esm-basic@1.0.0
+[WILDCARD]