美文网首页Node.js专题
自动部署模块所需环境依赖--bat批处理

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

作者: 谭瞎 | 来源:发表于2019-03-26 11:38 被阅读1次

    首发掘金: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 node_home=%axDir%node
    set node_modules=%node_home%\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
    
    :: 二、设置node、cnpm环境变量
    wmic ENVIRONMENT where "name='node_home' and username='%computername%\\%username%'" delete
    wmic ENVIRONMENT create name='node_home',username='%computername%\\%username%',VariableValue="%node_home%"
    wmic ENVIRONMENT where "name='Path' and username='%computername%\\%username%'" set VariableValue="%PATH%%node_home%" 
    
    set "path=%PATH%%node_home%"
    
    :: 三、将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%
    

    目录结构

    目录.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%"
    
    • 使用wmic设置系统环境变量无效
      使用 wmic 命令与使用 set 命令来修改环境变量的区别是,使用 wmic 命令修改环境变量是永久性的,而使用 set 命令修改环境变量是只针对当前命令行环境的临时修改。
    wmic ENVIRONMENT where "name='Path' and username='%computername%\\%username%'" set VariableValue="%node_home%;%PATH%" 
    set "path=%node_home%;%PATH%"
    

    相关文章

      网友评论

        本文标题:自动部署模块所需环境依赖--bat批处理

        本文链接:https://www.haomeiwen.com/subject/nzcgvqtx.html