Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Node for local tools and CI
v20.18.0 # keep this comment
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "env-pin-nvmrc",
"private": true
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
[[case]]
name = "pin_and_unpin_existing_nvmrc"
vp = "global"
seed-runtime = false
steps = [
["vp", "env", "pin"],
["vp", "env", "pin", "22.13.0", "--no-install", "--force"],
{ argv = ["vpt", "print-file", ".nvmrc", "package.json"], comment = "update the existing version token and preserve the manifest and comment" },
["vpt", "stat-file", ".node-version", "--assert", "missing"],
["vp", "env", "pin"],
["vp", "env", "current", "node", "--json"],
["vp", "env", "unpin", "node"],
["vpt", "stat-file", ".nvmrc", "--assert", "missing"],
["vpt", "print-file", "package.json"],
]

[[case]]
name = "pin_nvmrc_without_manifest"
vp = "global"
seed-runtime = false
steps = [
{ argv = ["vpt", "rm", "package.json"], snapshot = false },
["vp", "env", "pin", "22.13.0", "--no-install", "--force"],
["vpt", "print-file", ".nvmrc"],
["vpt", "stat-file", ".node-version", "--assert", "missing"],
["vpt", "stat-file", "package.json", "--assert", "missing"],
]

[[case]]
name = "node_version_keeps_priority_over_nvmrc"
vp = "global"
seed-runtime = false
steps = [
{ argv = ["vpt", "write-file", ".node-version", "20.18.0\n"], snapshot = false },
["vp", "env", "pin", "22.13.0", "--no-install", "--force"],
["vpt", "print-file", ".node-version", ".nvmrc", "package.json"],
["vp", "env", "unpin", "node"],
["vpt", "stat-file", ".node-version", "--assert", "missing"],
["vpt", "stat-file", ".nvmrc", "--assert", "file"],
]

[[case]]
name = "dev_engines_keeps_priority_over_nvmrc"
vp = "global"
seed-runtime = false
steps = [
{ argv = ["vpt", "write-file", "package.json", "{\"devEngines\":{\"runtime\":{\"name\":\"node\",\"version\":\"20.18.0\",\"onFail\":\"warn\"}}}\n"], snapshot = false },
["vp", "env", "pin", "22.13.0", "--no-install", "--force"],
["vp", "env", "pin"],
["vpt", "print-file", ".nvmrc", "package.json"],
["vp", "env", "unpin", "node"],
["vpt", "stat-file", ".nvmrc", "--assert", "file"],
["vpt", "print-file", "package.json"],
]

[[case]]
name = "engines_node_does_not_make_pin_write_a_shadowed_nvmrc"
vp = "global"
seed-runtime = false
steps = [
{ argv = ["vpt", "write-file", "package.json", "{\"engines\":{\"node\":\">=20.18.0\"}}\n"], snapshot = false },
["vp", "env", "pin", "22.13.0", "--no-install", "--force"],
["vpt", "print-file", ".nvmrc", "package.json"],
["vp", "env", "current", "node", "--json"],
]

[[case]]
name = "explicit_targets_override_existing_nvmrc"
vp = "global"
seed-runtime = false
steps = [
["vp", "env", "pin", "22.13.0", "--target", "dev-engines", "--no-install", "--force"],
["vpt", "print-file", ".nvmrc", "package.json"],
{ argv = ["vp", "env", "pin", "24.11.0", "--target", "nvmrc", "--no-install", "--force"], comment = "an explicit .nvmrc target warns about the higher-priority manifest pin" },
["vpt", "print-file", ".nvmrc", "package.json"],
["vp", "env", "unpin", "--target", "nvmrc"],
["vpt", "stat-file", ".nvmrc", "--assert", "missing"],
["vpt", "print-file", "package.json"],
]

[[case]]
name = "explicit_nvmrc_target_can_create_a_pin"
vp = "global"
seed-runtime = false
steps = [
{ argv = ["vpt", "rm", ".nvmrc"], snapshot = false },
["vp", "env", "pin", "22.13.0", "--target", "nvmrc", "--no-install"],
["vpt", "print-file", ".nvmrc", "package.json"],
["vp", "env", "pin", "--unpin", "node", "--target", "nvmrc"],
["vpt", "stat-file", ".nvmrc", "--assert", "missing"],
]

[[case]]
name = "pin_in_child_does_not_overwrite_inherited_nvmrc"
vp = "global"
seed-runtime = false
steps = [
{ argv = ["vpt", "mkdir", "child"], snapshot = false },
{ argv = ["vpt", "write-file", "child/package.json", "{\"name\":\"child\"}\n"], snapshot = false },
{ argv = ["vp", "env", "pin"], cwd = "child" },
{ argv = ["vp", "env", "pin", "22.13.0", "--no-install", "--force"], cwd = "child" },
["vpt", "print-file", ".nvmrc", "package.json", "child/package.json"],
["vpt", "stat-file", "child/.nvmrc", "--assert", "missing"],
]

[[case]]
name = "declining_nvmrc_overwrite_keeps_the_existing_setup"
vp = "global"
seed-runtime = false
steps = [
["vpt", "pipe-stdin", "n\n", "--", "vp", "env", "pin", "22.13.0", "--no-install"],
["vpt", "print-file", ".nvmrc", "package.json"],
]

[[case]]
name = "engines_node_stops_inherited_pin_lookup"
vp = "global"
seed-runtime = false
steps = [
{ argv = ["vpt", "mkdir", "-p", "middle/leaf"], snapshot = false },
{ argv = ["vpt", "write-file", "middle/package.json", "{\"engines\":{\"node\":\"22.13.0\"}}\n"], snapshot = false },
{ argv = ["vp", "env", "pin"], cwd = "middle/leaf", comment = "the nearer engines.node prevents inheriting the root .nvmrc" },
{ argv = ["vp", "env", "current", "node", "--json"], cwd = "middle/leaf" },
{ argv = ["vp", "env", "pin"], cwd = "middle", comment = "a constraint in cwd also prevents reporting an ancestor pin" },
{ argv = ["vp", "env", "current", "node", "--json"], cwd = "middle" },
["vpt", "print-file", ".nvmrc", "middle/package.json"],
]

[[case]]
name = "nvmrc_target_rejects_package_manager_operations"
vp = "global"
seed-runtime = false
steps = [
{ argv = ["vp", "env", "pin", "pnpm@10.18.0", "--target", "nvmrc", "--no-install"], continue-on-failure = true },
{ argv = ["vp", "env", "pin", "22.13.0", "pnpm@10.18.0", "--target", "nvmrc", "--no-install"], continue-on-failure = true },
{ argv = ["vp", "env", "unpin", "pm", "--target", "nvmrc"], continue-on-failure = true },
{ argv = ["vpt", "print-file", ".nvmrc", "package.json"], continue-on-failure = true },
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# declining_nvmrc_overwrite_keeps_the_existing_setup

## `vpt pipe-stdin 'n
' -- vp env pin 22.13.0 --no-install`

```
VITE+ - The Unified Toolchain for the Web

.nvmrc already exists with version 20.18.0
Overwrite with 22.13.0? (Y/n): Cancelled.
```

## `vpt print-file .nvmrc package.json`

```
# Node for local tools and CI
<version> # keep this comment
{
"name": "env-pin-nvmrc",
"private": true
}
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# dev_engines_keeps_priority_over_nvmrc

## `vpt write-file package.json '{"devEngines":{"runtime":{"name":"node","version":"20.18.0","onFail":"warn"}}}
'`


## `vp env pin 22.13.0 --no-install --force`

```
VITE+ - The Unified Toolchain for the Web

✓ Pinned Node.js version to 22.13.0
Updated devEngines.runtime in <workspace>/package.json
note: Version will be downloaded on first use.
```

## `vp env pin`

```
VITE+ - The Unified Toolchain for the Web

Pinned version: 22.13.0
Source: <workspace>/package.json (devEngines.runtime)

No package manager pinned.
```

## `vpt print-file .nvmrc package.json`

```
# Node for local tools and CI
<version> # keep this comment
{
"devEngines": {
"runtime": {
"name": "node",
"version": "<version>",
"onFail": "warn"
}
}
}
```

## `vp env unpin node`

```
VITE+ - The Unified Toolchain for the Web

✓ Removed devEngines.runtime node entry from <workspace>/package.json
```

## `vpt stat-file .nvmrc --assert file`

```
.nvmrc: file
```

## `vpt print-file package.json`

```
{}
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# engines_node_does_not_make_pin_write_a_shadowed_nvmrc

## `vpt write-file package.json '{"engines":{"node":">=20.18.0"}}
'`


## `vp env pin 22.13.0 --no-install --force`

```
VITE+ - The Unified Toolchain for the Web

✓ Pinned Node.js version to 22.13.0
Updated devEngines.runtime in <workspace>/package.json
note: Version will be downloaded on first use.
```

## `vpt print-file .nvmrc package.json`

```
# Node for local tools and CI
<version> # keep this comment
{
"engines": {
"node": ">=20.18.0"
},
"devEngines": {
"runtime": {
"name": "node",
"version": "<version>",
"onFail": "download"
}
}
}
```

## `vp env current node --json`

```
{
"node": {
"version": "22.13.0",
"source": "devEngines.runtime",
"source_path": "<workspace>/package.json",
"project_root": "<workspace>",
"bin_path": "<home>/.vite-plus/js_runtime/node/<version>/bin/node",
"installed": false,
"mode": "managed"
}
}
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# engines_node_stops_inherited_pin_lookup

## `vpt mkdir -p middle/leaf`


## `vpt write-file middle/package.json '{"engines":{"node":"22.13.0"}}
'`


## `cd middle/leaf && vp env pin`

the nearer engines.node prevents inheriting the root .nvmrc

```
VITE+ - The Unified Toolchain for the Web

No version pinned.
Node.js constraint: 22.13.0 from <workspace>/middle/package.json (engines.node)

No package manager pinned.
```

## `cd middle/leaf && vp env current node --json`

```
{
"node": {
"version": "22.13.0",
"source": "engines.node",
"source_path": "<workspace>/middle/package.json",
"project_root": "<workspace>/middle",
"bin_path": "<home>/.vite-plus/js_runtime/node/<version>/bin/node",
"installed": false,
"mode": "managed"
}
}
```

## `cd middle && vp env pin`

a constraint in cwd also prevents reporting an ancestor pin

```
VITE+ - The Unified Toolchain for the Web

No version pinned.
Node.js constraint: 22.13.0 from <workspace>/middle/package.json (engines.node)

No package manager pinned.
```

## `cd middle && vp env current node --json`

```
{
"node": {
"version": "22.13.0",
"source": "engines.node",
"source_path": "<workspace>/middle/package.json",
"project_root": "<workspace>/middle",
"bin_path": "<home>/.vite-plus/js_runtime/node/<version>/bin/node",
"installed": false,
"mode": "managed"
}
}
```

## `vpt print-file .nvmrc middle/package.json`

```
# Node for local tools and CI
<version> # keep this comment
{"engines":{"node":"22.13.0"}}
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# explicit_nvmrc_target_can_create_a_pin

## `vpt rm .nvmrc`


## `vp env pin 22.13.0 --target nvmrc --no-install`

```
VITE+ - The Unified Toolchain for the Web

✓ Pinned Node.js version to 22.13.0
Updated .nvmrc in <workspace>
note: Version will be downloaded on first use.
```

## `vpt print-file .nvmrc package.json`

```
22.13.0
{
"name": "env-pin-nvmrc",
"private": true
}
```

## `vp env pin --unpin node --target nvmrc`

```
VITE+ - The Unified Toolchain for the Web

✓ Removed .nvmrc from <workspace>
```

## `vpt stat-file .nvmrc --assert missing`

```
.nvmrc: missing
```
Loading
Loading