summaryrefslogtreecommitdiff
path: root/cli/worker.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-05-22 16:55:04 -0400
committerGitHub <noreply@github.com>2023-05-22 16:55:04 -0400
commit7b4c483aa159794cdb9d57d3252c2980fba45469 (patch)
treeb1c3b0ab080e98ab20f470fbad5b1aba05045dfb /cli/worker.rs
parent612226de8e2fe3068d981866242bacedfceb9734 (diff)
fix(npm): store npm binary command resolution in lockfile (#19219)
Part of #19038 Closes #19034 (eliminates the time spent re-resolving)
Diffstat (limited to 'cli/worker.rs')
-rw-r--r--cli/worker.rs19
1 files changed, 18 insertions, 1 deletions
diff --git a/cli/worker.rs b/cli/worker.rs
index 4d8e500b7..4a41da1a5 100644
--- a/cli/worker.rs
+++ b/cli/worker.rs
@@ -5,10 +5,12 @@ use std::rc::Rc;
use std::sync::Arc;
use deno_ast::ModuleSpecifier;
+use deno_core::anyhow::Context;
use deno_core::error::AnyError;
use deno_core::futures::task::LocalFutureObj;
use deno_core::futures::FutureExt;
use deno_core::located_script_name;
+use deno_core::parking_lot::Mutex;
use deno_core::url::Url;
use deno_core::CompiledWasmModuleStore;
use deno_core::Extension;
@@ -16,6 +18,7 @@ use deno_core::ModuleId;
use deno_core::ModuleLoader;
use deno_core::SharedArrayBufferStore;
use deno_core::SourceMapGetter;
+use deno_lockfile::Lockfile;
use deno_runtime::colors;
use deno_runtime::deno_broadcast_channel::InMemoryBroadcastChannel;
use deno_runtime::deno_fs;
@@ -100,6 +103,7 @@ struct SharedWorkerState {
root_cert_store_provider: Arc<dyn RootCertStoreProvider>,
fs: Arc<dyn deno_fs::FileSystem>,
maybe_inspector_server: Option<Arc<InspectorServer>>,
+ maybe_lockfile: Option<Arc<Mutex<Lockfile>>>,
}
impl SharedWorkerState {
@@ -311,6 +315,7 @@ impl CliMainWorkerFactory {
root_cert_store_provider: Arc<dyn RootCertStoreProvider>,
fs: Arc<dyn deno_fs::FileSystem>,
maybe_inspector_server: Option<Arc<InspectorServer>>,
+ maybe_lockfile: Option<Arc<Mutex<Lockfile>>>,
options: CliMainWorkerOptions,
) -> Self {
Self {
@@ -328,6 +333,7 @@ impl CliMainWorkerFactory {
root_cert_store_provider,
fs,
maybe_inspector_server,
+ maybe_lockfile,
}),
}
}
@@ -360,11 +366,22 @@ impl CliMainWorkerFactory {
{
shared
.npm_resolver
- .add_package_reqs(vec![package_ref.req.clone()])
+ .add_package_reqs(&[package_ref.req.clone()])
.await?;
let node_resolution =
shared.node_resolver.resolve_binary_export(&package_ref)?;
let is_main_cjs = matches!(node_resolution, NodeResolution::CommonJs(_));
+
+ if let Some(lockfile) = &shared.maybe_lockfile {
+ // For npm binary commands, ensure that the lockfile gets updated
+ // so that we can re-use the npm resolution the next time it runs
+ // for better performance
+ lockfile
+ .lock()
+ .write()
+ .context("Failed writing lockfile.")?;
+ }
+
(node_resolution.into_url(), is_main_cjs)
} else if shared.options.is_npm_main {
let node_resolution =