1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-25 15:29:32 -05:00

fix(future): Emit deno install warning less often, suggest deno install in error message (#24706)

Two small changes:

- In our BYONM errors, suggest running `deno install` instead of `npm
install` if `DENO_FUTURE` is set
- Only emit warning about `deno install` changes if you do `deno install
<foo>` with deno_future unset
This commit is contained in:
Nathan Whitaker 2024-07-24 16:37:13 -07:00 committed by David Sherret
parent a8817fe8cc
commit 4edb86496c
29 changed files with 87 additions and 156 deletions

View file

@ -286,9 +286,14 @@ impl CliNpmResolver for ByonmCliNpmResolver {
concat!(
"Could not find \"{}\" in a node_modules folder. ",
"Deno expects the node_modules/ directory to be up to date. ",
"Did you forget to run `npm install`?"
"Did you forget to run `{}`?"
),
alias,
if *crate::args::DENO_FUTURE {
"deno install"
} else {
"npm install"
}
);
}

View file

@ -233,8 +233,13 @@ impl CliNodeResolver {
let package_json_path = package_folder.join("package.json");
if !self.fs.exists_sync(&package_json_path) {
return Err(anyhow!(
"Could not find '{}'. Deno expects the node_modules/ directory to be up to date. Did you forget to run `npm install`?",
package_json_path.display()
"Could not find '{}'. Deno expects the node_modules/ directory to be up to date. Did you forget to run `{}`?",
package_json_path.display(),
if *crate::args::DENO_FUTURE {
"deno install"
} else {
"npm install"
},
));
}
}

View file

@ -283,12 +283,12 @@ pub async fn install_command(
flags: Arc<Flags>,
install_flags: InstallFlags,
) -> Result<(), AnyError> {
if !install_flags.global {
log::warn!("⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.");
}
match install_flags.kind {
InstallKind::Global(global_flags) => {
if !install_flags.global {
log::warn!("⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.");
}
install_global(flags, global_flags).await
}
InstallKind::Local(maybe_add_flags) => {

View file

@ -109,7 +109,7 @@ fn install_basic_global() {
let output_text = output.combined_output();
assert_not_contains!(
output_text,
"`deno install` behavior will change in Deno 2. To preserve the current behavior use `-g` or `--global` flag."
"`deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag."
);
// no lockfile should be created locally

View file

@ -2453,138 +2453,6 @@ fn byonm_package_specifier_not_installed_and_invalid_subpath() {
output.assert_exit_code(1);
}
#[test]
fn future_byonm_package_specifier_not_installed_and_invalid_subpath() {
let test_context = TestContextBuilder::for_npm()
.env("DENO_FUTURE", "1")
.use_temp_cwd()
.build();
let dir = test_context.temp_dir();
dir.path().join("package.json").write_json(&json!({
"dependencies": {
"chalk": "4",
"@denotest/conditional-exports-strict": "1"
}
}));
dir.write(
"main.ts",
"import chalk from 'chalk'; console.log(chalk.green('hi'));",
);
// no npm install has been run, so this should give an informative error
let output = test_context.new_command().args("run main.ts").run();
output.assert_matches_text(
r#"error: Could not resolve "chalk", but found it in a package.json. Deno expects the node_modules/ directory to be up to date. Did you forget to run `npm install`?
at file:///[WILDCARD]/main.ts:1:19
"#,
);
output.assert_exit_code(1);
// now test for an invalid sub path after doing an npm install
dir.write(
"main.ts",
"import '@denotest/conditional-exports-strict/test';",
);
test_context.run_npm("install");
let output = test_context.new_command().args("run main.ts").run();
output.assert_matches_text(
r#"error: [ERR_PACKAGE_PATH_NOT_EXPORTED] Package subpath './test' is not defined by "exports" in '[WILDCARD]' imported from '[WILDCARD]main.ts'
at file:///[WILDCARD]/main.ts:1:8
"#,
);
output.assert_exit_code(1);
}
#[test]
fn byonm_package_npm_specifier_not_installed_and_invalid_subpath() {
let test_context = TestContextBuilder::for_npm()
.env("DENO_UNSTABLE_BYONM", "1")
.use_temp_cwd()
.build();
let dir = test_context.temp_dir();
dir.path().join("package.json").write_json(&json!({
"dependencies": {
"chalk": "4",
"@denotest/conditional-exports-strict": "1"
}
}));
dir.write(
"main.ts",
"import chalk from 'npm:chalk'; console.log(chalk.green('hi'));",
);
// no npm install has been run, so this should give an informative error
let output = test_context.new_command().args("run main.ts").run();
output.assert_matches_text(
r#"error: Could not find "chalk" in a node_modules folder. Deno expects the node_modules/ directory to be up to date. Did you forget to run `npm install`?
at file:///[WILDCARD]/main.ts:1:19
"#,
);
output.assert_exit_code(1);
// now test for an invalid sub path after doing an npm install
dir.write(
"main.ts",
"import 'npm:@denotest/conditional-exports-strict/test';",
);
test_context.run_npm("install");
let output = test_context.new_command().args("run main.ts").run();
output.assert_matches_text(
r#"error: [ERR_PACKAGE_PATH_NOT_EXPORTED] Package subpath './test' is not defined by "exports" in '[WILDLINE]package.json' imported from '[WILDLINE]main.ts'
at file:///[WILDLINE]/main.ts:1:8
"#,
);
output.assert_exit_code(1);
}
#[test]
fn future_byonm_package_npm_specifier_not_installed_and_invalid_subpath() {
let test_context = TestContextBuilder::for_npm()
.env("DENO_FUTURE", "1")
.use_temp_cwd()
.build();
let dir = test_context.temp_dir();
dir.path().join("package.json").write_json(&json!({
"dependencies": {
"chalk": "4",
"@denotest/conditional-exports-strict": "1"
}
}));
dir.write(
"main.ts",
"import chalk from 'npm:chalk'; console.log(chalk.green('hi'));",
);
// no npm install has been run, so this should give an informative error
let output = test_context.new_command().args("run main.ts").run();
output.assert_matches_text(
r#"error: Could not find "chalk" in a node_modules folder. Deno expects the node_modules/ directory to be up to date. Did you forget to run `npm install`?
at file:///[WILDCARD]/main.ts:1:19
"#,
);
output.assert_exit_code(1);
// now test for an invalid sub path after doing an npm install
dir.write(
"main.ts",
"import 'npm:@denotest/conditional-exports-strict/test';",
);
test_context.run_npm("install");
let output = test_context.new_command().args("run main.ts").run();
output.assert_matches_text(
r#"error: [ERR_PACKAGE_PATH_NOT_EXPORTED] Package subpath './test' is not defined by "exports" in '[WILDLINE]package.json' imported from '[WILDLINE]main.ts'
at file:///[WILDLINE]/main.ts:1:8
"#,
);
output.assert_exit_code(1);
}
#[test]
fn byonm_npm_workspaces() {
let test_context = TestContextBuilder::for_npm().use_temp_cwd().build();

View file

@ -1,4 +1,3 @@
⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
[UNORDERED_START]
Download http://localhost:4261/@denotest/basic
Download http://localhost:4262/@denotest2/basic

View file

@ -1,4 +1,3 @@
⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
Add @denotest/esm-basic - npm:@denotest/esm-basic@^1.0.0
Download http://localhost:4260/@denotest/esm-basic
Download http://localhost:4260/@denotest/esm-basic/1.0.0.tgz

View file

@ -1,4 +1,3 @@
⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
Add @denotest/esm-basic - npm:@denotest/esm-basic@^1.0.0
Download http://localhost:4260/@denotest/esm-basic
Download http://localhost:4260/@denotest/esm-basic/1.0.0.tgz

View file

@ -1,4 +1,3 @@
⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
[UNORDERED_START]
Download http://localhost:4545/v1/extensionless
Download http://localhost:4545/subdir/mod1.ts

View file

@ -1,3 +1,2 @@
[WILDCARD]
error: Integrity check failed for package: "npm:@denotest/esm-basic@1.0.0".[WILDCARD]
Use the --lock-write flag to regenerate the lockfile at [WILDCARD]

View file

@ -1,4 +1,3 @@
⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
Download http://localhost:4260/@denotest/esm-basic
Download http://localhost:4260/@denotest/esm-basic/1.0.0.tgz
Initialize @denotest/esm-basic@1.0.0

View file

@ -1,2 +1 @@
⚠️ `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

View file

@ -1,4 +1,3 @@
⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
error: The lockfile is out of date. Run `deno cache --frozen=false`, `deno install --frozen=false`, or rerun with `--frozen=false` to update it.
changes:
5 | - "npm:@denotest/add@1": "npm:@denotest/add@1.0.0"

View file

@ -1,4 +1,3 @@
⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
[UNORDERED_START]
Download http://localhost:4260/@denotest/transitive-bin
Download http://localhost:4260/@denotest/bin

View file

@ -0,0 +1,52 @@
{
"tempDir": true,
"tests": {
"future_not_installed": {
"envs": {
"DENO_FUTURE": "1"
},
"steps": [{
"args": "run -A not_installed.ts",
"output": "future_not_installed.out",
"exitCode": 1
}]
},
"future_invalid_sub_path": {
"envs": {
"DENO_FUTURE": "1"
},
"steps": [{
"args": "install",
"output": "[WILDCARD]"
}, {
"args": "run -A invalid_sub_path.ts",
"output": "invalid_sub_path.out",
"exitCode": 1
}]
},
"not_installed": {
"envs": {
"DENO_UNSTABLE_BYONM": "1"
},
"steps": [{
"args": "run -A not_installed.ts",
"output": "not_installed.out",
"exitCode": 1
}]
},
"invalid_sub_path": {
"envs": {
"DENO_UNSTABLE_BYONM": "1"
},
"steps": [{
"args": "install",
"commandName": "npm",
"output": "[WILDCARD]"
}, {
"args": "run -A invalid_sub_path.ts",
"output": "invalid_sub_path.out",
"exitCode": 1
}]
}
}
}

View file

@ -0,0 +1,2 @@
error: [ERR_PACKAGE_PATH_NOT_EXPORTED] Package subpath './test' is not defined by "exports" in '[WILDLINE]package.json' imported from '[WILDLINE]invalid_sub_path.ts'
at file:///[WILDLINE]/invalid_sub_path.ts:1:8

View file

@ -0,0 +1,2 @@
error: Could not find "chalk" in a node_modules folder. Deno expects the node_modules/ directory to be up to date. Did you forget to run `deno install`?
at file:///[WILDCARD]/not_installed.ts:1:19

View file

@ -0,0 +1,2 @@
error: [ERR_PACKAGE_PATH_NOT_EXPORTED] Package subpath './test' is not defined by "exports" in '[WILDLINE]package.json' imported from '[WILDLINE]invalid_sub_path.ts'
at file:///[WILDLINE]/invalid_sub_path.ts:1:8

View file

@ -0,0 +1 @@
import "npm:@denotest/conditional-exports-strict/test";

View file

@ -0,0 +1,2 @@
error: Could not find "chalk" in a node_modules folder. Deno expects the node_modules/ directory to be up to date. Did you forget to run `npm install`?
at file:///[WILDCARD]/not_installed.ts:1:19

View file

@ -0,0 +1,2 @@
import chalk from "npm:chalk";
console.log(chalk.green("hi"));

View file

@ -0,0 +1,6 @@
{
"dependencies": {
"chalk": "4",
"@denotest/conditional-exports-strict": "1"
}
}

View file

@ -1,4 +1,3 @@
⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
preinstall
deno preinstall.js
node preinstall.js

View file

@ -1,4 +1,3 @@
⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
[UNORDERED_START]
Download http://localhost:4260/@denotest/node-lifecycle-scripts
Download http://localhost:4260/@denotest/bin

View file

@ -1,4 +1,3 @@
⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
[UNORDERED_START]
Download http://localhost:4261/@denotest/basic
Download http://localhost:4262/@denotest2/basic

View file

@ -1,4 +1,3 @@
⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
Download http://localhost:4261/@denotest/basic
error: Error getting response at http://localhost:4261/@denotest/basic for package "@denotest/basic": Bad response: 401
[WILDCARD]

View file

@ -1,4 +1,3 @@
⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
Download http://localhost:4261/@denotest/basic
error: Error getting response at http://localhost:4261/@denotest/basic for package "@denotest/basic": Bad response: 401
[WILDCARD]

View file

@ -1,4 +1,3 @@
⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
[UNORDERED_START]
Download http://localhost:4261/@denotest/basic
Download http://localhost:4262/@denotest2/basic

View file

@ -1,4 +1,3 @@
⚠️ `deno install` behavior will change in Deno 2. To preserve the current behavior use the `-g` or `--global` flag.
[UNORDERED_START]
Download http://localhost:4261/@denotest/basic
Download http://localhost:4262/@denotest2/basic