1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-01-11 16:42:21 -05:00

fix(cli): for main-module that exists in package.json, use the version defined in package.json directly (#20328)

This commit is contained in:
await-ovo 2023-09-19 04:02:58 +08:00 committed by GitHub
parent f5963b6a05
commit dc1da30927
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 72 additions and 3 deletions

View file

@ -684,6 +684,7 @@ impl CliFactory {
.unsafely_ignore_certificate_errors() .unsafely_ignore_certificate_errors()
.clone(), .clone(),
unstable: self.options.unstable(), unstable: self.options.unstable(),
maybe_package_json_deps: self.options.maybe_package_json_deps(),
}) })
} }
} }

View file

@ -458,6 +458,7 @@ pub async fn run(
unsafely_ignore_certificate_errors: metadata unsafely_ignore_certificate_errors: metadata
.unsafely_ignore_certificate_errors, .unsafely_ignore_certificate_errors,
unstable: metadata.unstable, unstable: metadata.unstable,
maybe_package_json_deps: package_json_deps_provider.deps().cloned(),
}, },
); );

View file

@ -448,6 +448,27 @@ itest!(permissions_outside_package {
http_server: true, http_server: true,
}); });
itest!(run_existing_npm_package {
args: "run --allow-read --node-modules-dir npm:@denotest/bin",
output: "npm/run_existing_npm_package/main.out",
envs: env_vars_for_npm_tests(),
http_server: true,
temp_cwd: true,
cwd: Some("npm/run_existing_npm_package/"),
copy_temp_dir: Some("npm/run_existing_npm_package/"),
});
itest!(run_existing_npm_package_with_subpath {
args:
"run --allow-read --node-modules-dir npm:@denotest/bin/cli-esm dev --help",
output: "npm/run_existing_npm_package_with_subpath/main.out",
envs: env_vars_for_npm_tests(),
http_server: true,
temp_cwd: true,
cwd: Some("npm/run_existing_npm_package_with_subpath/"),
copy_temp_dir: Some("npm/run_existing_npm_package_with_subpath/"),
});
#[test] #[test]
fn parallel_downloading() { fn parallel_downloading() {
let (out, _err) = util::run_and_collect_output_with_args( let (out, _err) = util::run_and_collect_output_with_args(

View file

@ -1,5 +1,5 @@
{ {
"name": "@deno/bin", "name": "@denotest/bin",
"version": "0.5.0", "version": "0.5.0",
"bin": "./cli.mjs" "bin": "./cli.mjs"
} }

View file

@ -1,4 +1,4 @@
{ {
"name": "@deno/bin", "name": "@denotest/bin",
"version": "0.6.0" "version": "0.6.0"
} }

View file

@ -1,5 +1,5 @@
{ {
"name": "@deno/bin", "name": "@denotest/bin",
"version": "1.0.0", "version": "1.0.0",
"bin": { "bin": {
"cli-esm": "./cli.mjs", "cli-esm": "./cli.mjs",

View file

@ -0,0 +1,3 @@
Download http://localhost:4545/npm/registry/@denotest/bin
Download http://localhost:4545/npm/registry/@denotest/bin/0.5.0.tgz
Initialize @denotest/bin@0.5.0

View file

@ -0,0 +1,6 @@
{
"name": "run-existing-npm-package",
"dependencies": {
"@denotest/bin": "0.5.0"
}
}

View file

@ -0,0 +1,5 @@
Download http://localhost:4545/npm/registry/@denotest/bin
Download http://localhost:4545/npm/registry/@denotest/bin/1.0.0.tgz
Initialize @denotest/bin@1.0.0
dev
--help

View file

@ -0,0 +1,6 @@
{
"name": "run-existing-npm-package",
"dependencies": {
"@denotest/bin": "1.0.0"
}
}

View file

@ -40,7 +40,9 @@ use deno_runtime::worker::WorkerOptions;
use deno_runtime::BootstrapOptions; use deno_runtime::BootstrapOptions;
use deno_runtime::WorkerLogLevel; use deno_runtime::WorkerLogLevel;
use deno_semver::npm::NpmPackageReqReference; use deno_semver::npm::NpmPackageReqReference;
use deno_semver::package::PackageReqReference;
use crate::args::package_json::PackageJsonDeps;
use crate::args::StorageKeyResolver; use crate::args::StorageKeyResolver;
use crate::errors; use crate::errors;
use crate::npm::CliNpmResolver; use crate::npm::CliNpmResolver;
@ -89,6 +91,7 @@ pub struct CliMainWorkerOptions {
pub seed: Option<u64>, pub seed: Option<u64>,
pub unsafely_ignore_certificate_errors: Option<Vec<String>>, pub unsafely_ignore_certificate_errors: Option<Vec<String>>,
pub unstable: bool, pub unstable: bool,
pub maybe_package_json_deps: Option<PackageJsonDeps>,
} }
struct SharedWorkerState { struct SharedWorkerState {
@ -356,6 +359,29 @@ impl CliMainWorkerFactory {
let (main_module, is_main_cjs) = if let Ok(package_ref) = let (main_module, is_main_cjs) = if let Ok(package_ref) =
NpmPackageReqReference::from_specifier(&main_module) NpmPackageReqReference::from_specifier(&main_module)
{ {
let package_ref = if package_ref.req().version_req.version_text() == "*" {
// When using the wildcard version, select the same version used in the
// package.json deps in order to prevent adding new dependency version
shared
.options
.maybe_package_json_deps
.as_ref()
.and_then(|deps| {
deps
.values()
.filter_map(|v| v.as_ref().ok())
.find(|dep| dep.name == package_ref.req().name)
.map(|dep| {
NpmPackageReqReference::new(PackageReqReference {
req: dep.clone(),
sub_path: package_ref.sub_path().map(|s| s.to_string()),
})
})
})
.unwrap_or(package_ref)
} else {
package_ref
};
shared shared
.npm_resolver .npm_resolver
.add_package_reqs(&[package_ref.req().clone()]) .add_package_reqs(&[package_ref.req().clone()])