nvm
什麼是nvm-windows
nvm就是Node Version Manager(Node版本管理器)的簡稱,很方便的在一臺機器上安裝多個版本的node並在多個node版本間自由切換。nvm-windows就是安裝在windows平臺上的nvm。
下載nvm-windows
- 地址:github.com/coreybutler…
- 下載:免安裝版本nvm-noinstall.zip,本人下載1.1.6版本
安裝nvm-windows
- 解壓nvm-noinstall.zip-->nvm-noinstall,並改名為nvm
- 在D盤建立資料夾dev,把整個nvm資料夾拷貝到dev中
- 在nvm資料夾下建立settings.txt(如果settings.txt不存在),開啟settings.txt並輸入以下內容
root: D:\dev\nvm # nvm.exe所在位置的父路徑,也是環境變數NVM_HOME的值
path: D:\dev\nodejs # nodejs快捷方式的存放位置,也是環境變數NVM_SYMLINK的值
arch: 64 # 如果是32位系統,則這裡的64改為32
proxy: # 沒有使用代理,可以不寫
複製程式碼
配置環境變數
- NVM_HOME:D:\dev\nvm
- NVM_SYMLINK:D:\dev\nodejs
- PATH:%NVM_HOME%;%NVM_SYMLINK%;
驗證nvm windows安裝是否成功
win+R,開啟cmd,輸入 nvm -v,若出現下圖則表示成功。
node.js
下載node.js
- 地址:nodejs.org/zh-cn/downl…
- 下載: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 指定版本之後,會在nvm同級生成一個v10.15.0版本node的快捷鍵
使用nvm載入指定版本的node
win+R,開啟cmd
- 檢視可用的node版本:nvm list,
- 切換指定node版本:nvm use 10.15.0
- 檢查是否切換成功:node -v
npm
在之前安裝node的時候,自帶下載了npm。
檢視npm版本號
檢視npm版本號:npm -v,安裝正確的話,會出現版本號。
改變npm原有的環境變數
首先我們要先配置npm全域性模組的存放路徑以及cache的路徑:
- 在D盤下新建nodejs資料夾
- 在nodejs下新建node_global以及node_cache兩個資料夾
- 輸入以下命令,改變npm配置
npm config set prefix "D:\nodejs\node_global"
npm config set cache "D:\nodejs\node_cache"
複製程式碼
- 新建環境變數NODE_MODULES_PATH,輸入路徑D:\nodejs\node_global\node_modules,然後將NODE_MODULES_PATH變數新增進path中,此後所安裝的模組都會安裝到改路徑下
- 在命令列輸入以下命令試著安裝express(注:“-g”這個引數意思是裝到global目錄下,也就是上面說設定的“D:\nodejs\node_global”裡面。)
npm install express -g
複製程式碼
- 安裝完畢後可以看到D:\nodejs\node_global\node_modules\express 已經有內容
- 在命令列輸入node進入編輯模式,輸入以下程式碼測試是否能正常載入模組
require('express')
複製程式碼
安裝cnpm(淘寶cnpm)
- 輸入以下命令
npm install -g cnpm --registry=https://registry.npm.taobao.org
複製程式碼
- 新增系統變數path的內容,新建CNPM_HOME,輸入 D:\nodejs\node_global
- 注意cnpm的環境變數一定要設定,否則cnpm -v 時會包報錯
- 輸入cnpm -v輸入是否正常
cnpm -v
複製程式碼
bat批處理自動部署
批處理基礎
- %cd%表示執行命令時所在的目錄,%~dp0表示批處理檔案所在的目錄。
- %cd%是可以改變的,因為它表示的是當前目錄,如果在批處理中使用了cd命令就會改變他的值。
- %~dp0是在執行某個批處理結束之前是不會改變的,因為代表的是指令碼檔案在磁碟的位置。
- %computername%:計算機名
- %username%:當前使用者名稱
所需資源
- 1.在任意位置新建資料夾axTool
- 2.將node-v10.15.0-win-x86解壓,並改名為node,子目錄中包含node.exe
- 地址:nodejs.org/zh-cn/downl…
- 下載:Windows Binary (.zip)免安裝版本,本人下載 node-v10.15.0-win-x64.zip
- 3.將拉完node_modules所有依賴的AX放入其中
- 4.新建scripts資料夾,放入ax、ax.cmd兩個檔案,可將下文程式碼分別複製儲存
- 5.新建ax.bat檔案,可將下文程式碼複製儲存
其中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
:: 一、設定變數
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環境變數寫入臨時檔案中,以備後續使用findstr命令進行查詢
echo %path% > temp.txt
:: 在臨時檔案中查詢有沒有可執行node路徑
find "%nodeHome%" temp.txt
:: 若沒有新增指定目錄則不新增,否則新增
if %errorlevel% == 0 (
echo path環境變數中 已經包含了 當前路徑%nodeHome%
echo 程式返回碼:%errorlevel%
) else (
echo path環境變數中 沒有包含 當前路徑%nodeHome%
echo 程式返回碼:%errorlevel%
setx path "%nodeHome%;%path%"
)
:: 三、刪除臨時檔案
del temp.txt
:: 四、將AX專案軟連線進node_modules中
cd /d %node_modules%
mklink /D ax %ax_home%
:: 五、將ax.sh、ax.cmd拷貝進node全域性環境
copy %src_ax_sh% %dest_ax_sh%
copy %src_ax_cmd% %dest_ax_cmd%
pause
複製程式碼
目錄結構
具體步驟
- 設定node環境變數
D:\axTool\node;
複製程式碼
- 設定cnpm環境變數
D:\axTool\node\nodejs\node_global;
複製程式碼
- 進入到node全域性模組下
cd /d D:\axTool\node\nodejs\node_global\node_modules
複製程式碼
- 將ax 專案軟連線進node全域性模組
mklink /D ax D:\axTool\ax
複製程式碼
- 將ax.sh、ax.cmd兩個檔案複製到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
複製程式碼
所遇問題
- 修改系統環境變數易誤刪,修改使用者環境變數較安全
wmic ENVIRONMENT create name='node_home',username='%computername%\\%username%',VariableValue="%node_home%"
複製程式碼
- 使用set設定系統環境變數無效 使用 set 命令修改環境變數是隻針對當前命令列環境的臨時修改,改用setx。
setx path "%nodeHome%;%path%"
複製程式碼
- 遇到的問題 追加一個路徑到永久的path環境變數中,但是可能執行多次ax.bat,這樣就會造成ax.bat會寫入多個相同的路徑到path環境變數中。要解決這個問題,就需要在追加新路徑到path環境變數之前,先檢查path環境變數中是否已經存在了該路徑,如果有了該路徑,那我就不需要再新增。如果沒有我再新增。不能一直無腦的新增。
echo %path% > temp.txt
:: 在臨時檔案中查詢有沒有可執行node路徑
find "%nodeHome%" temp.txt
:: 若沒有新增指定目錄則不新增,否則新增
if %errorlevel% == 0 (
echo path環境變數中 已經包含了 當前路徑%nodeHome%
echo 程式返回碼:%errorlevel%
) else (
echo path環境變數中 沒有包含 當前路徑%nodeHome%
echo 程式返回碼:%errorlevel%
setx /m "path" "%nodeHome%;%path%"
)
複製程式碼