最近项目使用 UMI + react 实现前端,代码编写好后都需要运行 yarn build 打包。打包后需要将打包好的 dist 目录内容拷贝发包和部署,感觉很麻烦!于是就打算编写一个 bat 脚本实现自动编译和打包。
脚本主要完成下面几件事情:
创建发包目录
判断发包目录是否存在。如果存在,则删除历史包;如果不存在,则创建一个空目录;
执行 yarn 编译项目,下载依赖等
执行 yarn build 构建项目,项目构建完成后将在项目目录多出一个 dist 目录,该目录就是项目的发包内容
利用 xcopy 将 dist 内容拷贝到发包目录
利用 xcopy 将项目的其他资源也拷贝到发包目录
批处理脚本内容如下:
@echo off set bastPath=%~dp0 set relasePath=%bastPath:~0,-1%\fclient if not exist %relasePath% ( mkdir %relasePath% goto envi_ok ) rem 删除历史目录 rd /s/q %relasePath% :envi_ok cd %bastPath:~0,-1%\fclient-web echo 开始编译项目... call yarn echo. echo 开始构建项目... call yarn build echo. echo 开始打包... cd %bastPath:~0,-1% xcopy /e /h /q /y %bastPath:~0,-1%\fclient-web\dist %bastPath:~0,-1%\fclient xcopy /e /h /q /y %bastPath:~0,-1%\vgsax %bastPath:~0,-1%\fclient\vgsax echo finished. pause
执行脚本的结果如下图:
你会发现,在执行脚本 xcopy 时抛出了 “目标 F:\IDEASpace\fclient-demo\fclient 是文件还是目录名 (F=文件,D=目录)?” 导致出现这个原因是因为我们在 xcopy 命令的目标路径最后面没有添加 “\”,如果你添加了 “\” 则系统将会自动识别出该路径是目录。修改如下:
xcopy /e /h /q /y %bastPath:~0,-1%\fclient-web\dist %bastPath:~0,-1%\fclient\ xcopy /e /h /q /y %bastPath:~0,-1%\vgsax %bastPath:~0,-1%\fclient\vgsax\
搞定了!点击查看更多批处理知识……