自動部署模塊所需環境依賴--bat批處理

nvm

什麼是nvm-windows

nvm就是Node Version Manager(Node版本管理器)的簡稱,很方便的在一臺機器上安裝多個版本的node並在多個node版本間自由切換。nvm-windows就是安裝在windows平臺上的nvm。node

下載nvm-windows

安裝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%;

環境變量.png

驗證nvm windows安裝是否成功

win+R,打開cmd,輸入 nvm -v,若出現下圖則表示成功。git

nvm版本.png

node.js

下載node.js

安裝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的快捷鍵

node版本.png

使用nvm加載指定版本的node

win+R,打開cmdgithub

  • 查看可用的node版本:nvm list,
  • 切換指定node版本:nvm use 10.15.0
  • 檢查是否切換成功:node -v

nvm使用.png

npm

在以前安裝node的時候,自帶下載了npm。shell

查看npm版本號

查看npm版本號:npm -v,安裝正確的話,會出現版本號。express

改變npm原有的環境變量

首先咱們要先配置npm全局模塊的存放路徑以及cache的路徑:npm

  • 在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中,此後所安裝的模塊都會安裝到改路徑下

node_modules環境變量.png

  • 在命令行輸入如下命令試着安裝express(注:「-g」這個參數意思是裝到global目錄下,也就是上面說設置的「D:\nodejs\node_global」裏面。)
npm install express -g
複製代碼
  • 安裝完畢後能夠看到D:\nodejs\node_global\node_modules\express 已經有內容
  • 在命令行輸入node進入編輯模式,輸入如下代碼測試是否能正常加載模塊
require('express')
複製代碼

nodea全局安裝.png

安裝cnpm(淘寶cnpm)

  • 輸入如下命令
npm install -g cnpm --registry=https://registry.npm.taobao.org
複製代碼
  • 添加系統變量path的內容,新建CNPM_HOME,輸入 D:\nodejs\node_global
  • 注意cnpm的環境變量必定要設置,不然cnpm -v 時會包報錯

cnpm_path.png

  • 輸入cnpm -v輸入是否正常
cnpm -v
複製代碼

bat批處理自動部署

批處理基礎

  • %cd%表示執行命令時所在的目錄,%~dp0表示批處理文件所在的目錄。
  • %cd%是能夠改變的,由於它表示的是當前目錄,若是在批處理中使用了cd命令就會改變他的值。
  • %~dp0是在執行某個批處理結束以前是不會改變的,由於表明的是腳本文件在磁盤的位置。
  • %computername%:計算機名
  • %username%:當前用戶名

所需資源

  • 1.在任意位置新建文件夾axTool
  • 2.將node-v10.15.0-win-x86解壓,並更名爲node,子目錄中包含node.exe
  • 3.將拉完node_modules全部依賴的AX放入其中
  • 4.新建scripts文件夾,放入ax、ax.cmd兩個文件,可將下文代碼分別複製保存
  • 5.新建ax.bat文件,可將下文代碼複製保存

其中ax爲shell腳本windows

#!/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.batbash

@ECHO OFF

:: 1、設置變量
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

:: 2、把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%"
)

:: 3、刪除臨時文件
del temp.txt

:: 4、將AX項目軟鏈接進node_modules中
cd /d %node_modules%
mklink /D ax %ax_home%

:: 5、將ax.sh、ax.cmd拷貝進node全局環境
copy %src_ax_sh% %dest_ax_sh%
copy %src_ax_cmd% %dest_ax_cmd%

pause
複製代碼

目錄結構

目錄.png

具體步驟

  • 設置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%"
)
複製代碼
相關文章
相關標籤/搜索