问题

  1. 接手项目时,不知道项目所用的Node版本
  2. 同一个项目,不同人用不同的Node版本,引起编译后的未知问题

方案

一、锁定Node版本

  1. 在package.json中配置 engines,限定项目使用的Node版本
    在这里插入图片描述

  2. 在项目根目录下增加 .npmrc 文件(第一步配置 engines 只对 yarn生效,对npm无效)
    在 .npmrc 文件中添加如下配置:

engine-strict = true

以上配置完成后,执行 npm install时(在npm run 阶段无效),若当前使用Node版本与工程package.json中的不一致,会直接报错退出。

二、自动切换Node版本

使用nvm对Node进行多版本管理,在项目下打开terminal时,自动切换Node版本。若对应Node版本未安装,会自动安装。

  1. 在项目根目录下增加 .nvmrc 配置文件
    nvm会在当前项目下查找 .nvmrc 文件,在此文件中写入Node版本号:

例:14.6.0

  1. 进行 ~/.zshrc 或 bash 配置
    官方示例: https://github.com/nvm-sh/nvm#deeper-shell-integration

zsh配置
在 ~/.zshrc 中添加如下配置:

# place this after nvm initialization!
autoload -U add-zsh-hookload-nvmrc() {
  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"!="$(nvm version)" ];then
      nvm use
    fi
  elif [ -n"$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)"!="$(nvm version default)" ];then
    echo"Reverting to nvm default version"
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

bash配置
在$HOME/.bashrc添加如下配置:

cdnvm() {
    commandcd"$@"||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'cd"$PWD"

注:增加上述配置后,重新打开terminal 或 cd 进入项目目录,会自动切换Node版本

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐