Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fall back to .node-version if it exists #3351

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from
Draft
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
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
- [Set default node version](#set-default-node-version)
- [Use a mirror of node binaries](#use-a-mirror-of-node-binaries)
- [.nvmrc](#nvmrc)
- [.node-version](#node-version)
- [Deeper Shell Integration](#deeper-shell-integration)
- [Calling `nvm use` automatically in a directory with a `.nvmrc` file](#calling-nvm-use-automatically-in-a-directory-with-a-nvmrc-file)
- [bash](#bash)
Expand Down Expand Up @@ -565,6 +566,16 @@ Now using node v5.9.1 (npm v3.7.3)

The contents of a `.nvmrc` file **must** be the `<version>` (as described by `nvm --help`) followed by a newline. No trailing spaces are allowed, and the trailing newline is required.

### .node-version

For a little compatability with other node version managers, nvm will also sniff for `.node-version` files, defaulting to `.nvmrc` if both are found in the same folder.

```
$ echo "5.9" > .node-version
```

Unlike `.nvmrc`, `.node-version` cannot contain a "versionish" (an alias, like `node`, `iojs`, or a custom alias you’ve defined). `.node-version` can only have versions in the format of v1, v1.2, or v1.2.3 (the `v` is optional).

### Deeper Shell Integration

You can use [`avn`](https://github.com/wbyoung/avn) to deeply integrate into your shell and automatically invoke `nvm` when changing directories. `avn` is **not** supported by the `nvm` maintainers. Please [report issues to the `avn` team](https://github.com/wbyoung/avn/issues/new).
Expand Down
31 changes: 20 additions & 11 deletions nvm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -452,19 +452,27 @@ nvm_find_project_dir() {
# Traverse up in directory tree to find containing folder
nvm_find_up() {
local path_
local file
path_="${PWD}"
while [ "${path_}" != "" ] && [ "${path_}" != '.' ] && [ ! -f "${path_}/${1-}" ]; do
path_=${path_%/*}

# Iterate through the multiple files
while [ $# -ne 0 ]; do
# Look for files in turn in this path_
while [ "${path_}" != "" ] && [ "${path_}" != '.' ]; do
# Is the file here?
if [ -f "${path_}/${1-}" ]; then
file="${path_}/${1-}"
echo "${file}"
break 2
fi
path_=${path_%/*}
done
shift
done
nvm_echo "${path_}"
}

nvm_find_nvmrc() {
local dir
dir="$(nvm_find_up '.nvmrc')"
if [ -e "${dir}/.nvmrc" ]; then
nvm_echo "${dir}/.nvmrc"
fi
nvm_echo "$(nvm_find_up '.nvmrc' '.node-version')"
}

# Obtain nvm version from rc file
Expand All @@ -474,19 +482,20 @@ nvm_rc_version() {
NVMRC_PATH="$(nvm_find_nvmrc)"
if [ ! -e "${NVMRC_PATH}" ]; then
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
nvm_err "No .nvmrc file found"
nvm_err "No .nvmrc or .node-version file found"
fi
return 1
fi
NVMRC_BASENAME="$(command basename "$NVMRC_PATH")"
NVM_RC_VERSION="$(command head -n 1 "${NVMRC_PATH}" | command tr -d '\r')" || command printf ''
if [ -z "${NVM_RC_VERSION}" ]; then
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
nvm_err "Warning: empty .nvmrc file found at \"${NVMRC_PATH}\""
nvm_err "Warning: empty '${NVMRC_BASENAME}' file found at \"${NVMRC_PATH}\""
fi
return 2
fi
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
nvm_echo "Found '${NVMRC_PATH}' with version <${NVM_RC_VERSION}>"
nvm_echo "Found '${NVMRC_BASENAME}' with version <${NVM_RC_VERSION}>"
fi
}

Expand Down
4 changes: 4 additions & 0 deletions test/slow/nvm exec/setup_dir
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,7 @@ nvm install --lts
if [ -f ".nvmrc" ]; then
mv .nvmrc .nvmrc.bak
fi

if [ -f ".node-version" ]; then
mv .node-version .node-version.bak
fi
5 changes: 5 additions & 0 deletions test/slow/nvm exec/teardown_dir
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,12 @@ nvm uninstall v1.0.0
nvm uninstall --lts

rm .nvmrc
rm .node-version

if [ -f ".nvmrc.bak" ]; then
mv .nvmrc.bak .nvmrc
fi

if [ -f ".node-version.bak" ]; then
mv .node-version.bak .node-version
fi
15 changes: 15 additions & 0 deletions test/slow/nvm run/Running 'nvm run' should pick up .nvmrc version
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,21 @@ echo "0.10.7" > .nvmrc
[ "$(nvm run --version | head -1)" = "Found '$PWD/.nvmrc' with version <0.10.7>" ] || die "\`nvm run\` failed to print out the \"found in .nvmrc\" message"


echo "0.12.0" > .node-version

[ "$(nvm run --version | tail -1)" = "v0.10.7" ] || die "\`nvm run\` failed to run with the .nvmrc version"

[ "$(nvm run --version | head -1)" = "Found '$PWD/.nvmrc' with version <0.10.7>" ] || die "\`nvm run\` failed to print out the \"found in .nvmrc\" message"

rm .nvmrc

[ "$(nvm run --version | tail -1)" = "v0.12.0" ] || die "\`nvm run\` failed to run with the .node-version version"

[ "$(nvm run --version | head -1)" = "Found '$PWD/.node-version' with version <0.12.0>" ] || die "\`nvm run\` failed to print out the \"found in .node-version\" message"

rm .node-version


echo "foo" > .nvmrc

# running nvm run with .nvmrc should not print the version information when not installed
Expand Down
Loading