sh 使用package.json(engines.node)中指定的节点版本。使用jq和nvm。如果要安装版本,则会在缺少版本时提示。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sh 使用package.json(engines.node)中指定的节点版本。使用jq和nvm。如果要安装版本,则会在缺少版本时提示。相关的知识,希望对你有一定的参考价值。

#!/usr/bin/env bash
#
# Switches to node version with nvm to the one defined in package.json
# Dependencies: nvm, jq
# Usage: Alias this by sourcing with ".", e.g. alias nnn='~/bin/use-pkg-node-version.sh'

if [ ! -e package.json ]; then
	echo "Missing package.json file"
	return 1
fi

PKG_VERSION=$(jq '.engines.node' package.json)
VERSION=$(echo $PKG_VERSION | sed -E 's/"[<>=]*([0-9]([\.0-9a-z]+)?)*.*"/\1/')
NVM_VERSION=$(node -v)

verlte() {
    [  "$1" = "`echo -e "$1\n$2" | sort -V | head -n1`" ]
}

verlt() {
    [ "$1" = "$2" ] && return 1 || verlte $1 $2
}

if [ $VERSION == "null" ]; then
	echo "There is no version defined in package.json"
	return 1
fi

echo $(echo "Version found $PKG_VERSION") $(echo "Currently $NVM_VERSION")

if verlt v$VERSION $NVM_VERSION; then
	echo "Current node version ($NVM_VERSION) is newer than the project's ($VERSION)"
	return
fi

if ! nvm use $VERSION ; then
	while true; do
		read -p "Would you like to install version $VERSION?" yn
		case $yn in
			[Yy]* ) nvm install $VERSION && nvm use $VERSION; break;;
			[Nn]* ) return;;
			* ) echo "Please answer yes or no.";;
		esac
	done
fi


以上是关于sh 使用package.json(engines.node)中指定的节点版本。使用jq和nvm。如果要安装版本,则会在缺少版本时提示。的主要内容,如果未能解决你的问题,请参考以下文章

sh 创建package.json

sh 将模块添加到package.json

sh 生成样板npm package.json

使用 shell 脚本提取 package.json 版本

package.json 中的节点引擎 8.x 或 10.x

sh 报告在更深层目录中找到的所有package.json文件中包含未发布的模块。