linux一键安装node+npm

分享一个linux下一键安装node+npm脚本。

使用方式为: ./install-node.sh,然后输入版本号,node.js版本查询

切记不需要加 sudo 执行!!!

默认安装10.15.0。

#! /bin/bash############################################################
#                 此脚本为一键安装node-npm脚本                 #
#                        2018-08-24                        #
#       使用方式为:./install-node.sh                        #
############################################################nodeVersion="10.15.0"  # 安装的默认版本
VERSIONPATTERN="[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}"echo -n "Please input a  node version number (Enter 10.15.0): "
read customVersion # user custom version, eg. 10.15.0if [ ! -z $customVersion ]  # 如果输入的版本不为空
thenmacthResult=$(echo $customVersion | grep -E -x $VERSIONPATTERN )if [ -z $macthResult ]thenecho "Please input a  right version number. eg. 8.11.4 or 10.15.0"exit 1finodeVersion=$customVersion
fi
# 下载网址
downloadAddress="https://nodejs.org/download/release/v${nodeVersion}/node-v${nodeVersion}-linux-x64.tar.gz"
downloadPath="/opt/"  # 默认安装的路径nodePath="/opt/node/"
packageName="node.tar.gz"
sysPathFileForNode="/etc/profile.d/node.sh"  # system PATH file name for node.currentUser=$(whoami)if [[ $currentUser == "root" ]]
thenecho "please execute script by user! Not root!"exit
fiisReinstall="n"
# Check if node is already installed.
checkNodeIsExist() {# 1.Check whether the node command exists.if [[ $(checkCmd node) == "y" ]]thenecho -n "The node command already exists,whether to reinstall [y/n]? :"read isReinstallif [[ "${isReinstall}" == "y" ]] || [[ "{$isReinstall}" == "Y" ]]  # not reinstallthenechoelseexit 1fifiecho "Check local node has been completed."
}download() {echo "Download version is $nodeVersion"echosudo wget -O $packageName $downloadAddressif [ $? -ne "0" ]thenecho "The node package download faild !"exit 1fisudo mv ./$packageName $downloadPathecho "The node v${nodeVersion} has been downloaded."
}decompress() {sudo tar -zxf ${downloadPath}${packageName} -C $downloadPath# check isReinstallif [[ "$isReinstall" == "y" ]] || [[ "$isReinstall" == "Y" ]]then# update node binary filesudo mv ${downloadPath}node-v${nodeVersion}-linux-x64/bin/node ${downloadPath}node/bin/# update npmsudo rm -rf ${downloadPath}node/lib/node_modules/npmsudo mv ${downloadPath}node-v${nodeVersion}-linux-x64/lib/node_modules/npm/ ${downloadPath}node/lib/node_modules/sudo mv ${downloadPath}node-v${nodeVersion}-linux-x64/bin/npm ${downloadPath}node/bin/# update npx link filesudo mv ${downloadPath}node-v${nodeVersion}-linux-x64/bin/npx ${downloadPath}node/bin/# remove include/node foldersudo rm -rf ${downloadPath}node/include/node# update include/node flder sudo mv ${downloadPath}node-v${nodeVersion}-linux-x64/include/node ${downloadPath}node/include/# remove share foldersudo rm -rf ${downloadPath}node/share# update share foldersudo mv ${downloadPath}node-v${nodeVersion}-linux-x64/share ${downloadPath}node/# update CHANGELOG.md 、LICENSE 、README.md filesudo mv ${downloadPath}node-v${nodeVersion}-linux-x64/CHANGELOG.md ${downloadPath}node/sudo mv ${downloadPath}node-v${nodeVersion}-linux-x64/LICENSE ${downloadPath}node/sudo mv ${downloadPath}node-v${nodeVersion}-linux-x64/README.md ${downloadPath}node/sudo rm -rf ${downloadPath}node-v${nodeVersion}-linux-x64sudo rm -rf ${downloadPath}${packageName}elsesudo mv ${downloadPath}node-v${nodeVersion}-linux-x64 ${downloadPath}nodesudo rm ${downloadPath}${packageName}if [ $? -ne "0" ]thenecho "Faild to decompressed!"exit 1fifiecho "The node package has been decompressed."
}changePermission() {sudo chown ${currentUser}:${currentUser} ${nodePath} -Recho "The node folder permission has been changed."
}# Configure system environment variables and export executable paths of node and NPM.
configSysPath() {local tempFile="node.sh"touch $tempFileecho 'export NODE_HOME=/opt/node' > $tempFileecho 'export PATH=$PATH:$NODE_HOME/bin' >> $tempFileecho 'export NODE_PATH=$PATH:$NODE_HOME/lib/node_modules' >> $tempFilesudo mv ./$tempFile $sysPathFileForNode
}checkCmd() {local cmd=$1which $cmd > /dev/null 2>&1if [[ $? == 0 ]]thenecho 'y'elseecho 'n'fi
}npmCompletion() {local temp="/tmp/npm_completion"echo 'if type complete &>/dev/null; then_npm_completion () {local words cwordif type _get_comp_words_by_ref &>/dev/null; then_get_comp_words_by_ref -n = -n @ -n : -w words -i cwordelsecword="$COMP_CWORD"words=("${COMP_WORDS[@]}")filocal si="$IFS"IFS=$'\n' COMPREPLY=($(COMP_CWORD="$cword" \COMP_LINE="$COMP_LINE" \COMP_POINT="$COMP_POINT" \npm completion -- "${words[@]}" \2>/dev/null)) || return $?IFS="$si"if type __ltrim_colon_completions &>/dev/null; then__ltrim_colon_completions "${words[cword]}"fi}complete -o default -F _npm_completion npm
elif type compdef &>/dev/null; then_npm_completion() {local si=$IFScompadd -- $(COMP_CWORD=$((CURRENT-1)) \COMP_LINE=$BUFFER \COMP_POINT=0 \npm completion -- "${words[@]}" \2>/dev/null)IFS=$si}compdef _npm_completion npm
elif type compctl &>/dev/null; then_npm_completion () {local cword line point words siread -Ac wordsread -cn cwordlet cword-=1read -l lineread -ln pointsi="$IFS"IFS=$'\n' reply=($(COMP_CWORD="$cword" \COMP_LINE="$line" \COMP_POINT="$point" \npm completion -- "${words[@]}" \2>/dev/null)) || return $?IFS="$si"}compctl -K _npm_completion npm
fi' > $tempsudo mv $temp /etc/bash_completion.d/
}main() {echo "------------------------START-------------------------"# 1. check node installationcheckNodeIsExist# 2. download node packagedownload# 3. decompree node packagedecompress# 4. change node folder permissionchangePermission# 5. install npm completionnpmCompletion# 6. configure node configconfigSysPathsource $sysPathFileForNode # Enable the configuration to take effect immediately.echo "------------------------END-------------------------"echo -e "Successfully installed node and NPM.\nPlease try : node -v and npm -v"
}main

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Angular Material 阴影使用

Angular Material 阴影使用 依托于 Angular Material 库,可以直接使用通用的符合 Material Design 风格的阴影。 使用 使用方式有两种: 外联样式设定,即在css或scss中设定通过class名称设定,即 元素的class名称方式一:外联样式使用 在scss或css文件中导入@import ~@ang…

typescript或javascript深拷贝Object json

typescript或javascript深拷贝Object json Object的json对象很多时候我们需要深拷贝,我写了两个工具函数,供大家参考。 deepCopyObject 深拷贝一个Object对象,返回深复制的对象。 /** * method 深复制一个json对象 * param source 需要深复制的对象 * return 返…

linux安装zsh终端

linux安装zsh终端 ZSH 已经被收录到了 Ubuntu 18.04 LTS 的官方软件包存储库中了 sudo apt install zshZSH Shell 安装好之后,可以使用如下命令查看其版本: zsh --version取代bash,设为默认shell sudo usermod -s /bin/zsh username也可以…

HTML meta使用

HTML meta使用 meta标签是什么? meta标签是HTML语言head区的一个辅助性标签。 meta标签是干什么用的? meta标签用来描述一个HTML网页文档的属性,例如作者、日期和时间、网页描述、关键词、页面刷新等。它提供的信息虽然用户不可见&#x…

共享图片方案

共享图片方案 安装chrome插件 极简图床安装,链接地址 插件使用 使用阿里云 OSS 存储图片 阿里云 OSS 提供了安全、低成本、高可靠的云存储服务,极简图床针对阿里云 OSS 做了整合,通过简单的设置,即可方便地将图片上传到阿里…

javascript复制到黏贴板之完美兼容

javascript复制到黏贴板之完美兼容 很多时候我们需要给用户方便,提供一键复制的功能,但是在实现的过程中遇到各式各样的坑。 原生解决方案 document.execCommand()方法 MDN上的定义: which allows one to run commands to manipulate the contents of the edita…

制作windows启动盘-大于4GB镜像

制作windows启动盘-大于4GB镜像 制作一个 Windows 安装 U 盘是很容易的,使用 UltraISO 这样的刻录工具量产一个 iso 镜像文件到 U 盘即可。然而随着 Windows 10 版本号的提升,镜像变得越来越大,终于 FAT32 文件系统不再能够容纳得下安装镜像…

DIY 主机 所有AMD IntelCPU及主板

DIY 主机 所有AMD IntelCPU及主板 查看intel的cpu及amd的cpu或者对应的主板可以查看这个项目。diy-pc

PC介绍之电脑组成

电脑组成 CPU cpu就是中央处理器,英文为central processing unit。 CPU一般我们需要知道以下几点即可: 主频 CPU的主频,即CPU内核工作的时钟频率(CPU Clock Speed),通常所说的某某CPU是多少兆赫的&#xff…

PC介绍之PCIE、总线、内存、电源

PC介绍之PCIE、总线、内存、电源 PCIE降速 PCI-E的总线性能 目前我们所使用的显卡是x16 走 PCIE 3.0,有些显卡虽然插在x16的插槽上,但是速度只有x8的速度,总的来说好的显卡目前都是x16。 主板一般会提供一条x16,x8, x1三个插槽&#xff0c…

PC介绍之显卡

PC介绍之显卡 一、什么是显卡? 显示接口卡(Video card,Graphics card)、显示器配置卡简称为显卡,是个人电脑基本组成部分之一。 用途是将计算机系统所需要的显示信息进行转换驱动,并向显示器提供信号&…

Sublime Text 3 无法输入中文解决方案

Sublime Text 3 安装及无法输入中文解决方案 安装sublime-text 3 如果是ubuntu系统终端输入: wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add - sudo apt-get install apt-transport-https echo "deb https://download.…

Linux Server 安装 raid 1

Linux Server 安装 raid 1 两组以上的N个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于硬盘数量的倍数,与RAID 0相同。另外写入速度有微小的降低。只要一个磁盘正常即可维持运作,可靠性最高。其原…

0-安装Vagrant和使用

0-安装Vagrant和使用 Vagrant 是一款软件,可以自动化虚拟机的安装和配置流程。用来管理虚拟机,如 VirtualBox、VMware、AWS等,主要好处是可以提供一个可配置、可移植和复用的软件环境,可以使用shell、chef、puppet等工具部署。所以…

安装 Docker Machine

安装 Docker Machine Docker Machine 支持 Windows ,OS X ,和 Linux,并且被安装为一个独立的二进制文件。用于各平台架构的二进制文件链接如下: Windows - 32bitWindows - 64bitOSX - x86_64OSX - (老款 macs)Linux - x86_64Linux - i386 github地址 O…

什么是分布式系统的CAP理论?

什么是分布式系统的CAP理论? 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。 …

什么是分布式系统的BASE理论?

什么是分布式系统的BASE理论? BASE理论 eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency&a…

Docker教程介绍

Docker教程介绍 教程环境准备 linux 系统virtualbox 软件安装 教程介绍 0-安装Vagrant,安装 centos 系统。1-docker 介绍2-docker 安装3-docker 架构和底层技术简介4-什么是Image和container5-Dockerfile文件6-搭建一个私有registry7-深入练习Dockerfile8-容器操…

1-docker 介绍

1-docker 介绍 由PaaS到Container 2013年2月,前Gluster的CEO Ben Golub 和 dotCloud 的 CEO Solomon Hykes 坐在一起聊天时,Solomon谈到想把 dotCloud 内部使用的Container容器技术单独拿出来开源,然后围绕这个技术开一家新公司提供技术支持…

3-docker 架构和底层技术简介

3-docker 架构和底层技术简介 Docker Platform Docker 是一个平台。 提供了一个开发、打包、运行app的平台把app和底层 infrastructure 隔离开来 根据上图我们可以看出 Docker Engine 把上层的 app 应用程序和底层的物理设备或虚拟设备进行了隔离,然后我们在 doc…