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.pswp.cn/news/536063.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536063.shtml
英文地址,請注明出處:http://en.pswp.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…