CopyPastor

Detecting plagiarism made easy.

Score: 1; Reported for: Exact paragraph match Open both answers

Possible Plagiarism

Plagiarized on 2023-09-25
by fmotion1

Original Post

Original - Posted on 2019-09-11
by Simba



            
Present in both answers; Present only in the new answer; Present only in the old answer;

THe culprit was an alias and corresponding function in `.bashrc`:
```sh cdnvm() { command cd "$@" || return $? nvm_path=$(nvm_find_up .nvmrc | tr -d '\n')
# If there are no .nvmrc file, use the default nvm version if [[ ! $nvm_path = *[^[:space:]]* ]]; then
declare default_version; default_version=$(nvm version default);
# If there is no default version, set it to `node` # This will use the latest version on your machine if [[ $default_version == "N/A" ]]; then nvm alias default node; default_version=$(nvm version default); fi
# If the current version is not the default version, set it to use the default version if [[ $(nvm current) != "$default_version" ]]; then nvm use default; fi
elif [[ -s $nvm_path/.nvmrc && -r $nvm_path/.nvmrc ]]; then declare nvm_version nvm_version=$(<"$nvm_path"/.nvmrc)
declare locally_resolved_nvm_version # `nvm ls` will check all locally-available versions # If there are multiple matching versions, take the latest one # Remove the `->` and `*` characters and spaces # `locally_resolved_nvm_version` will be `N/A` if no local versions are found locally_resolved_nvm_version=$(nvm ls --no-colors "$nvm_version" | tail -1 | tr -d '\->*' | tr -d '[:space:]')
# If it is not already installed, install it # `nvm install` will implicitly use the newly-installed version if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then nvm install "$nvm_version"; elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then nvm use "$nvm_version"; fi fi }
alias cd='cdnvm' cdnvm "$PWD" || exit ```
I think I must have added it when I installed NVM and forgot about it. Deleting the function and alias solved the issue.
Check the [README](https://github.com/nvm-sh/nvm#deeper-shell-integration) from nvm's repo on GitHub. Solutions have been given there.
## Shell Integraton
For **bash**, put the following at the end of your `$HOME/.bashrc`, the shell will change the node version according to the `.nvmrc` file under the dir.
``` find-up () { path=$(pwd) while [[ "$path" != "" && ! -e "$path/$1" ]]; do path=${path%/*} done echo "$path" }
cdnvm(){ cd "$@"; nvm_path=$(find-up .nvmrc | tr -d '[:space:]')
# If there are no .nvmrc file, use the default nvm version if [[ ! $nvm_path = *[^[:space:]]* ]]; then
declare default_version; default_version=$(nvm version default);
# If there is no default version, set it to `node` # This will use the latest version on your machine if [[ $default_version == "N/A" ]]; then nvm alias default node; default_version=$(nvm version default); fi
# If the current version is not the default version, set it to use the default version if [[ $(nvm current) != "$default_version" ]]; then nvm use default; fi
elif [[ -s $nvm_path/.nvmrc && -r $nvm_path/.nvmrc ]]; then declare nvm_version nvm_version=$(<"$nvm_path"/.nvmrc)
declare locally_resolved_nvm_version # `nvm ls` will check all locally-available versions # If there are multiple matching versions, take the latest one # Remove the `->` and `*` characters and spaces # `locally_resolved_nvm_version` will be `N/A` if no local versions are found locally_resolved_nvm_version=$(nvm ls --no-colors "$nvm_version" | tail -1 | tr -d '\->*' | tr -d '[:space:]')
# If it is not already installed, install it # `nvm install` will implicitly use the newly-installed version if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then nvm install "$nvm_version"; elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then nvm use "$nvm_version"; fi fi } alias cd='cdnvm' ```
Cause there's no hook support in Bash, the solution above is ugly.
For **zsh**, put this into your `$HOME/.zshrc`
```shell # place this after nvm initialization! autoload -U add-zsh-hook load-nvmrc() { local node_version="$(nvm version)" local nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then nvm install elif [ "$nvmrc_node_version" != "$node_version" ]; then nvm use fi elif [ "$node_version" != "$(nvm version default)" ]; then echo "Reverting to nvm default version" nvm use default fi } add-zsh-hook chpwd load-nvmrc load-nvmrc ```
## A Better Solution A better solution is to use [nodenv](https://github.com/nodenv/nodenv). I'm not kidding, `nodenv` is very different from nvm, and n.
`nodenv` is a member of the `rbenv` family. These version managers have big advantages over the others.
1. It changes node version without modifying environment variable `PATH` time by time, because it uses **shim executables**. This makes it having a builtin support to **switch node version automatically**. 2. Auto version switch in `nodenv` doesn't have to be hooked on `chpwd` to do periodical check for directory change. The version selection is delayed to when `node` command is executed. 3. The commands in `nodenv` are implemented in scripts. While, commands from `nvm` are implemented in functions, which means all the 4000+ line of code have to be parsed on shell startup and increases the shell init time dramatically. `nodenv` initializes much faster.
References
- [nodenv/nodenv](https://github.com/nodenv/nodenv)

        
Present in both answers; Present only in the new answer; Present only in the old answer;