首發(fā):https://juejin.im/post/5c999c07e51d456d246deebf
nvm
什么是nvm-windows
nvm就是Node Version Manager(Node版本管理器)的簡(jiǎn)稱,很方便的在一臺(tái)機(jī)器上安裝多個(gè)版本的node并在多個(gè)node版本間自由切換。nvm-windows就是安裝在windows平臺(tái)上的nvm。
下載nvm-windows
- 地址:https://github.com/coreybutler/nvm-windows/releases
- 下載:免安裝版本nvm-noinstall.zip,本人下載1.1.6版本
安裝nvm-windows
- 解壓nvm-noinstall.zip-->nvm-noinstall,并改名為nvm
- 在D盤創(chuàng)建文件夾dev,把整個(gè)nvm文件夾拷貝到dev中
- 在nvm文件夾下創(chuàng)建settings.txt(如果settings.txt不存在),打開settings.txt并輸入以下內(nèi)容
root: D:\dev\nvm # nvm.exe所在位置的父路徑,也是環(huán)境變量NVM_HOME的值
path: D:\dev\nodejs # nodejs快捷方式的存放位置,也是環(huán)境變量NVM_SYMLINK的值
arch: 64 # 如果是32位系統(tǒng),則這里的64改為32
proxy: # 沒有使用代理,可以不寫
配置環(huán)境變量
- NVM_HOME:D:\dev\nvm
- NVM_SYMLINK:D:\dev\nodejs
- PATH:%NVM_HOME%;%NVM_SYMLINK%;

環(huán)境變量.png
驗(yàn)證nvm windows安裝是否成功
win+R,打開cmd,輸入 nvm -v,若出現(xiàn)下圖則表示成功。

nvm版本.png
node.js
下載node.js
- 地址:https://nodejs.org/zh-cn/download/releases/
- 下載:Windows Binary (.zip)免安裝版本,本人下載 node-v10.15.0-win-x64.zip
安裝node.js
- 如我下載的是node-v10.15.0-win-x64.zip,將其解壓,并改名為v8.11.1
- 拷貝到nvm的根目錄下。注意,node的文件名必須是以v開頭的,nvm才能正常的加載它。如果要添加其它node版本,也是一樣操作。
- 使用nvm use 10.15.0 指定版本之后,會(huì)在nvm同級(jí)生成一個(gè)v10.15.0版本node的快捷鍵

node版本.png
使用nvm加載指定版本的node
win+R,打開cmd
- 查看可用的node版本:nvm list,
- 切換指定node版本:nvm use 10.15.0
- 檢查是否切換成功:node -v

nvm使用.png
npm
在之前安裝node的時(shí)候,自帶下載了npm。
查看npm版本號(hào)
查看npm版本號(hào):npm -v,安裝正確的話,會(huì)出現(xiàn)版本號(hào)。
改變npm原有的環(huán)境變量
首先我們要先配置npm全局模塊的存放路徑以及cache的路徑:
- 在D盤下新建nodejs文件夾
- 在nodejs下新建node_global以及node_cache兩個(gè)文件夾
- 輸入以下命令,改變npm配置
npm config set prefix "D:\nodejs\node_global"
npm config set cache "D:\nodejs\node_cache"
- 新建環(huán)境變量NODE_MODULES_PATH,輸入路徑D:\nodejs\node_global\node_modules,然后將NODE_MODULES_PATH變量添加進(jìn)path中,此后所安裝的模塊都會(huì)安裝到改路徑下

node_modules環(huán)境變量.png
- 在命令行輸入以下命令試著安裝express(注:“-g”這個(gè)參數(shù)意思是裝到global目錄下,也就是上面說設(shè)置的“D:\nodejs\node_global”里面。)
npm install express -g
- 安裝完畢后可以看到D:\nodejs\node_global\node_modules\express 已經(jīng)有內(nèi)容
- 在命令行輸入node進(jìn)入編輯模式,輸入以下代碼測(cè)試是否能正常加載模塊
require('express')

nodea全局安裝.png
安裝cnpm(淘寶cnpm)
- 輸入以下命令
npm install -g cnpm --registry=https://registry.npm.taobao.org
- 添加系統(tǒng)變量path的內(nèi)容,新建CNPM_HOME,輸入 D:\nodejs\node_global
- 注意cnpm的環(huán)境變量一定要設(shè)置,否則cnpm -v 時(shí)會(huì)包報(bào)錯(cuò)

cnpm_path.png
- 輸入cnpm -v輸入是否正常
cnpm -v
bat批處理自動(dòng)部署
批處理基礎(chǔ)
- %cd%表示執(zhí)行命令時(shí)所在的目錄,%~dp0表示批處理文件所在的目錄。
- %cd%是可以改變的,因?yàn)樗硎镜氖钱?dāng)前目錄,如果在批處理中使用了cd命令就會(huì)改變他的值。
- %~dp0是在執(zhí)行某個(gè)批處理結(jié)束之前是不會(huì)改變的,因?yàn)榇淼氖悄_本文件在磁盤的位置。
- %computername%:計(jì)算機(jī)名
- %username%:當(dāng)前用戶名
所需資源
- 1.在任意位置新建文件夾axTool
- 2.將node-v10.15.0-win-x86解壓,并改名為node,子目錄中包含node.exe
- 地址:https://nodejs.org/zh-cn/download/releases/
- 下載:Windows Binary (.zip)免安裝版本,本人下載 node-v10.15.0-win-x64.zip
- 3.將拉完node_modules所有依賴的AX放入其中
- 4.新建scripts文件夾,放入ax、ax.cmd兩個(gè)文件,可將下文代碼分別復(fù)制保存
- 5.新建ax.bat文件,可將下文代碼復(fù)制保存
其中ax為shell腳本
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/ax/bin.js" "$@"
ret=$?
else
node "$basedir/node_modules/ax/bin.js" "$@"
ret=$?
fi
exit $ret
ax.cmd
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\ax\bin.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\ax\bin.js" %*
)
ax.bat
@ECHO OFF
:: 一、設(shè)置變量
set axDir=%~dp0
set ax_home=%axDir%ax
set nodeHome=%axDir%node
set node_modules=%nodeHome%\node_modules
set src_ax_sh=%axDir%script\ax
set src_ax_cmd=%axDir%script\ax.cmd
set dest_ax_sh=%axDir%node\ax
set dest_ax_cmd=%axDir%node\ax.cmd
:: 二、把path環(huán)境變量寫入臨時(shí)文件中,以備后續(xù)使用findstr命令進(jìn)行查找
echo %path% > temp.txt
:: 在臨時(shí)文件中查找有沒有可執(zhí)行node路徑
find "%nodeHome%" temp.txt
:: 若沒有添加指定目錄則不添加,否則添加
if %errorlevel% == 0 (
echo path環(huán)境變量中 已經(jīng)包含了 當(dāng)前路徑%nodeHome%
echo 程序返回碼:%errorlevel%
) else (
echo path環(huán)境變量中 沒有包含 當(dāng)前路徑%nodeHome%
echo 程序返回碼:%errorlevel%
setx /m "path" "%nodeHome%;%path%"
)
:: 三、刪除臨時(shí)文件
del temp.txt
:: 四、將AX項(xiàng)目軟連接進(jìn)node_modules中
cd /d %node_modules%
mklink /D ax %ax_home%
:: 五、將ax.sh、ax.cmd拷貝進(jìn)node全局環(huán)境
copy %src_ax_sh% %dest_ax_sh%
copy %src_ax_cmd% %dest_ax_cmd%
pause
目錄結(jié)構(gòu)

目錄.png
具體步驟
- 設(shè)置node環(huán)境變量
D:\axTool\node;
- 設(shè)置cnpm環(huán)境變量
D:\axTool\node\nodejs\node_global;
- 進(jìn)入到node全局模塊下
cd /d D:\axTool\node\nodejs\node_global\node_modules
- 將ax 項(xiàng)目軟連接進(jìn)node全局模塊
mklink /D ax D:\axTool\ax
- 將ax.sh、ax.cmd兩個(gè)文件復(fù)制到node全局模塊下
del D:\axTool\node\nodejs\node_global\ax
del D:\axTool\node\nodejs\node_global\ax.cmd
copy D:\axTool\script\ax D:\axTool\node\nodejs\node_global\ax
copy D:\axTool\script\ax.cmd D:\axTool\node\nodejs\node_global\ax.cmd
所遇問題
- 修改系統(tǒng)環(huán)境變量易誤刪,修改用戶環(huán)境變量較安全
wmic ENVIRONMENT create name='node_home',username='%computername%\\%username%',VariableValue="%node_home%"
- 使用set設(shè)置系統(tǒng)環(huán)境變量無效
使用 set 命令修改環(huán)境變量是只針對(duì)當(dāng)前命令行環(huán)境的臨時(shí)修改,改用setx。
setx /m "path" "%nodeHome%;%path%"
- 遇到的問題
追加一個(gè)路徑到永久的path環(huán)境變量中,但是可能運(yùn)行多次ax.bat,這樣就會(huì)造成ax.bat會(huì)寫入多個(gè)相同的路徑到path環(huán)境變量中。要解決這個(gè)問題,就需要在追加新路徑到path環(huán)境變量之前,先檢查path環(huán)境變量中是否已經(jīng)存在了該路徑,如果有了該路徑,那我就不需要再添加。如果沒有我再添加。不能一直無腦的添加。
echo %path% > temp.txt
:: 在臨時(shí)文件中查找有沒有可執(zhí)行node路徑
find "%nodeHome%" temp.txt
:: 若沒有添加指定目錄則不添加,否則添加
if %errorlevel% == 0 (
echo path環(huán)境變量中 已經(jīng)包含了 當(dāng)前路徑%nodeHome%
echo 程序返回碼:%errorlevel%
) else (
echo path環(huán)境變量中 沒有包含 當(dāng)前路徑%nodeHome%
echo 程序返回碼:%errorlevel%
setx /m "path" "%nodeHome%;%path%"
)