自动部署模块所需环境依赖--bat批处理

首发:https://juejin.im/post/5c999c07e51d456d246deebf

nvm

什么是nvm-windows

nvm就是Node Version Manager(Node版本管理器)的简称,很方便的在一台机器上安装多个版本的node并在多个node版本间自由切换。nvm-windows就是安装在windows平台上的nvm。

下载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,若出现下图则表示成功。

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,打开cmd

  • 查看可用的node版本:nvm list,
  • 切换指定node版本:nvm use 10.15.0
  • 检查是否切换成功:node -v
nvm使用.png

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中,此后所安装的模块都会安装到改路径下
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脚本

#!/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 /m "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

目录结构

目录.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 /m "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%"
)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容