Skip to content

Commit

Permalink
Fall back to .node-version if it exists
Browse files Browse the repository at this point in the history
  • Loading branch information
Phil Sturgeon authored and ljharb committed Oct 5, 2017
1 parent 15eba7b commit 6aa2642
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 21 deletions.
14 changes: 13 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,19 @@ Please refer to the [README](README.md) for complete instructions how to install

Even if you don't have all of these items covered, please still feel free to submit a PR/issue! Someone else may be inspired and volunteer to complete it for you.

## Running the test suite

The most important part of any contribution is running the test suite to make sure the thing you did actually worked!

```
npm install
make test
```

You might be asked for your password for some tests that require a few extra privileges. If you don't want to enter it, feel free not to, but the related tests will fail.

Thanks again!

#### How to create a pull request

Create a new branch
Expand Down Expand Up @@ -107,7 +120,6 @@ Fixes #1234
Co-authored-by: Name Here <email@here>
```


# Code of Conduct
[Code of Conduct](https://github.com/nvm-sh/nvm/blob/HEAD/CODE_OF_CONDUCT.md)

Expand Down
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)
- [bash](#bash)
- [Automatically call `nvm use`](#automatically-call-nvm-use)
Expand Down Expand Up @@ -554,6 +555,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
43 changes: 23 additions & 20 deletions nvm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -451,43 +451,46 @@ nvm_find_project_dir() {

# Traverse up in directory tree to find containing folder
nvm_find_up() {
local path_
path_="${PWD}"
while [ "${path_}" != "" ] && [ "${path_}" != '.' ] && [ ! -f "${path_}/${1-}" ]; do
path_=${path_%/*}
local path
local file
path="${PWD}"

# Iterate through the multiple files
while [ $# -ne 0 ]; do
# Look for files in turn in this path
while [ "${path}" != "" ]; do
# Is the file here?
if [ ! -f "${path}/${1}" ]; then
file="${path}/${1}"
nvm_echo $file
break 2
fi
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
nvm_rc_version() {
export NVM_RC_VERSION=''
local NVMRC_PATH
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
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}\""
fi
NVMRC_BASENAME="$(command basename "$NVMRC_PATH")"
read -r NVM_RC_VERSION < "${NVMRC_PATH}" || printf ''
if [ ! -n "${NVM_RC_VERSION}" ]; then
nvm_err "Warning: empty \"${NVMRC_BASENAME}\" file found at \"${NVMRC_PATH}\""
return 2
fi
if [ "${NVM_SILENT:-0}" -ne 1 ]; then
nvm_echo "Found '${NVMRC_PATH}' with version <${NVM_RC_VERSION}>"
fi
nvm_echo "Found \"${NVMRC_BASENAME}\" with version <${NVM_RC_VERSION}>"
}

nvm_clang_version() {
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
24 changes: 24 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
@@ -0,0 +1,24 @@
#!/bin/sh


die () { echo "$@" ; exit 1; }

\. ../../../nvm.sh

echo "0.10.7" > .nvmrc

[ "$(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"

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"

0 comments on commit 6aa2642

Please sign in to comment.