GitBucket
4.6.0
Toggle navigation
Sign in
Files
Branches
1
Tags
Issues
Pull Requests
Labels
Milestones
Wiki
08335
/
hivui-platform-template
hivui平台项目模板
Browse code
add
master
1 parent
2725aac
commit
831c663b782bf6ef4fe337486b5973c468e7ec2f
caibinghong
authored
on 9 Mar 2022
Showing
5 changed files
build/bin/oper.sh
build/doc.txt
build/nginx配置说明.txt
build/webpack.base.conf.js
build/webpack.prod.conf.js
Ignore Space
Show notes
View
build/bin/oper.sh
#!/bin/bash ## 权限问题,用 chmod u+x *.sh ## eg: oper.sh # 用户名 # 项目名 # 操作 (create , restart , start , kill , stop , del , build , sync) # 部署路径 (upload) # 同步内容 (node_modules , build , cli) cmdDir=$( cd $(dirname "$0") pwd ) username=$1 #用户名 projectName=$2 #项目名 cmd=$3 #命令 port=$4 #端口 # *.pre2.hieap.cn==>http://192.168.4.192:8001 # *.pre.hieap.cn==>http://192.168.10.242:31167 ip=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"` tagIp="192.168.4.193" if [[ $ip == *$tagIp* ]]; then DEV_BASE_API='http://192.168.4.106:7777/' #传给配置 .env.development 的 VITE_APP_BASE_API 做后端请求数据 else DEV_BASE_API='http://e52.hieap.cn/' #传给配置 .env.development 的 VITE_APP_BASE_API 做后端请求数据 fi tagIp192="192.168.4.192" nginxStr='' function getNginx(){ nginxStr='' if [[ $ip == *$tagIp192* ]]; then # *.pre2.hieap.cn==>http://192.168.4.192:8001 nginxStr='"'${projectName}'.'${username}'.pre2.hieap.cn" "'${1}'";' elif [[ $ip == *$tagIp* ]]; then nginxStr='' else # *.pre.hieap.cn==>http://192.168.10.242:32467 nginxStr='"'${projectName}'.'${username}'.pre.hieap.cn" "'${1}'";' fi } #BASH_SOURCE[0]用户所在的目录到脚本的路径 ## 获取eap5.0 路径 # eap5Dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" eap5Dir="${cmdDir%/hiruntime*}" projectPath=${eap5Dir}/desktop/preview tmpPath=${eap5Dir}/hiruntime/project/desktop/project-template source='' source=$source'\t<% if(htmlWebpackPlugin.vite){%>\n\t<!--预览时 公共库-->' source=$source'\n\t<script src="\/'${projectName}'\/setting\/desktop\/development.js" type="text\/javascript"><\/script>' source=$source'\n\t<%}%>' source=$source'\n\t<% if(!htmlWebpackPlugin.vite){%>\n\t<!--发布时 公共库-->' source=$source'\n\t<script src="\/${serverName}\/render\/'${username}'\/'${projectName}'\/setting\/desktop\/appsetting.js" type="text\/javascript"><\/script>' source=$source'\n\t<%}%>\n' viteStr='' viteStr=$viteStr'let socketHost = `${__HMR_HOSTNAME__ || location.hostname}:${__HMR_PORT__}`;' viteStr=$viteStr'let socketHostSplit = socketHost.split(".");' viteStr=$viteStr'let reg=/^[0-9]*$/gi;' viteStr=$viteStr'if(reg.test(socketHostSplit[0])==false){socketHost = socketHost.substring(0,socketHost.indexOf(":"));}' nrm del zhc nrm add zhc http://npm.hieap.cn/ nrm use zhc case $cmd in "create") #创建 echo '正在创建桌面端应用...'$(date +%F%n%T) #参数个数判断,至少4个 if [ $# -lt 4 ];then echo "创建项目命令参数不对:$*" echo "创建项目命令正确参数:用户名 项目名 create 桌面预览端口" exit 1 fi # source ${cmdDir}/var_env.sh # echo ${DEV_BASE_API} echo eap5Dir: ${eap5Dir} echo projectPath: ${projectPath} if [ ! -d "${projectPath}/${username}" ];then mkdir "${projectPath}/${username}" #创用户工作空间 fi if [ -d "${projectPath}/${username}/${projectName}" ];then echo "项目名已经存在!" exit 1 fi echo "<1>git正在拉取web端项目基础文件" git clone http://192.168.4.105:8080/gitbucket/git/08335/hivui-platform-template.git "${projectPath}/${username}/${projectName}/deploy" echo "<2>初始化node环境..." # rsync -auz ${tmpPath}/node_modules ${projectPath}/${username}/${projectName}/deploy/ # cp这个命令在复制零碎文件的时候是很慢的 rsync -auz ${tmpPath}/node_modules ${projectPath}/${username}/${projectName}/deploy/ cd ${projectPath}/${username}/${projectName}/deploy/ rm -rf ./build/bin rm -rf ./build/doc.txt echo "<3>初始化相关配置..." ## 修改模板,重命项目名 mv project ${projectName} sed -i 's#\(VITE_APP_USERPATH \?= \?\).*#\1'"/e5/render/${username}"'#g' .env.production sed -i 's#\(VITE_APP_PN \?= \?\).*#\1'"${projectName}/${username}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.development sed -i 's#\(VITE_APP_BASE_API \?= \?\).*#\1'"${DEV_BASE_API}"'#g' .env.development ## 替换 package.json 的 name 值 author值 ,打包时候输出静态地址是这个 sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json sed -i 's#\("author": \?"\).*#\1'"${username}"'",#g' package.json ## 替换 processes.json 的 args 值 sed -i '4s#\("name": \?"\).*#\1'"vite-${username}-${projectName}"'",#g' processes.json sed -i '7s#\("args": \?"\).*#\1'"--host --port ${port}"'",#g' processes.json cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiLogin sed -i 's/<\/head>/'"${source}"'<\/head>/g' index.html cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiMain sed -i 's/<\/head>/'"${source}"'<\/head>/g' index.html cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiBirt sed -i 's/<\/head>/'"${source}"'<\/head>/g' index.html cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/setting/desktop/appsetting/js/1.0.0 sed -i 's#\(projectName \?= \?\).*#\1"'"${projectName}"'";#g' appsetting.js echo "<4>配置Nginx环境" # /usr/local/nginx/conf/nginx.conf cd /usr/local/nginx/conf getNginx $port sed -i "/${nginxStr}/d" nginx.conf sed -i "/map \$host \$proxy_port{/a ${nginxStr}" nginx.conf cd /usr/local/nginx/sbin # 清缓存 rm -rf /usr/local/nginx/proxy_temp ./nginx -s reload echo "<5>配置node_modules/vite环境" # node_modules/vite 环境 cd ${projectPath}/${username}/${projectName}/deploy/node_modules/vite/dist/client sed -i "s#const.*socketHost.*=.*#${viteStr}#g" client.js sed -i "s#case 'update':.*#case 'update':return;#g" client.js sed -i "s#case.*'full-reload':.*#case 'full-reload':return;#g" client.js echo "<6>正在启动服务..." cd ${projectPath}/${username}/${projectName}/deploy/ npm run pm2:start pm2 save echo "桌面端创建完毕!"$(date +%F%n%T) exit 1 ;; "delete") #删除 #参数个数判断,至少3个 if [ $# -lt 3 ];then echo "删除项目命令参数不对:$*" echo "删除项目命令正确参数:用户名 项目名 delete" exit 1 fi if [ $username = "admin" -a $projectName = "systpl" ] ; then echo "系统模板,不可删除!" exit 1 fi curPid=`pm2 pid vite-${username}-${projectName}` if [ ! -z "$curPid" ];then echo "vite-${username}-${projectName} 正在关闭服务..." pm2 delete "vite-${username}-${projectName}" fi # 删除配nginx #获取processes.json 的端口 portStr=$(cat ${projectPath}/${username}/${projectName}/deploy/processes.json | sed 's/,/\n/g' | grep "args" | sed 's/:/\n/g' | sed '1d' | sed 's/"//g') portNum=`echo $portStr | tr -cd "[0-9]"` # echo $portNum if [ $portNum = '' ];then echo '取不到端口信息!' exit 1; fi cd /usr/local/nginx/conf #设置相关配置 返回到nginxStr getNginx $portNum #删除 sed -i "/${nginxStr}/d" nginx.conf # 清缓存 rm -rf /usr/local/nginx/proxy_temp ./nginx -s reload ### 删除用户项目 rm -rf ${projectPath}/${username}/${projectName} echo "用户:${username} 项目:${projectName} 删除成功!" pm2 save exit 1 ;; "restart") #重启 echo "》》》正在重启服务..." curPid=`pm2 pid vite-${username}-${projectName}` if [ ! -z "$curPid" ];then echo "vite-${username}-${projectName} 正在关闭服务..." pm2 delete "vite-${username}-${projectName}" fi cd ${projectPath}/${username}/${projectName}/deploy/ npm run rm:vite npm run pm2:start pm2 save echo "已经重启服务!!" exit 1 ;; "build") #编译 uploadPath=$4 modules=$5 #参数个数判断,至少3个 # if [ $# -lt 4 ];then # echo "编译项目命令参数不对:$*" # echo "编译项目命令正确参数:用户名 项目名 build 上传服务器路径 [指定编译模块]" # exit 1 # fi ### 用pm2管理,用pm2 重启指定的 rm -rf "${projectPath}/${username}/${projectName}/deploy/dist" cd "${projectPath}/${username}/${projectName}/deploy" buildFlag="building.txt" # touch filename if [ ! -f "$buildFlag" ];then touch "$buildFlag" else echo "已经处于编译状态,请等待..." exit 1; fi if [ ! $modules ]; then echo "正在执行编译所有模块..."$(date +%F%n%T) npm run build ### 编译所有的时候要考相关配置 cd "${projectPath}/${username}/${projectName}/deploy/" if [[ ! -d "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}/funclib/desklib" ]]; then mkdir -p "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}/funclib/desklib" fi rsync -auz "${projectPath}/${username}/${projectName}/deploy/${projectName}/funclib/desklib" "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}/funclib/" else echo "正在执行编译【指定模块】..."$(date +%F%n%T) npm run build:modules $modules fi rm -rf "$buildFlag" ## 删除之前打包文件 rm -rf "${username}_${projectName}.zip" cd "${projectPath}/${username}/${projectName}/deploy/dist" mkdir -p "${projectPath}/${username}/${projectName}/deploy/dist/${username}/${projectName}" rsync -auz "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}" "${projectPath}/${username}/${projectName}/deploy/dist/${username}/" rm -rf "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}" zip -q -r "${username}_${projectName}.zip" ./* rsync -auz "${projectPath}/${username}/${projectName}/deploy/dist/${username}_${projectName}.zip" "${projectPath}/${username}/${projectName}/deploy/" rm -rf "${projectPath}/${username}/${projectName}/deploy/dist/${username}_${projectName}.zip" cd ${projectPath}/${username}/${projectName}/deploy/ if [ -z "$uploadPath" ]; then echo '未传服务器路径,请自行拷贝!' exit 1; fi if [[ ! -d "$uploadPath" ]]; then echo "编译命令: 上传文件夹不存在, 正在帮您创建目录..." mkdir -p "${uploadPath}" fi echo "正在拷到服务器目录:${uploadPath}" cp -fv "${username}_${projectName}.zip" "${uploadPath}" echo "(‐^▽^‐) 编译打包成功!"$(date +%F%n%T) ;; "sync") #同步环境 #参数个数判断,至少4个 if [ $# -lt 4 ];then echo "同步项目命令参数不对:$*" echo "同步项目命令正确参数:用户名 项目名 sync 同步方式" exit 1 fi way=$4 if [ $way = 'sysfunc' ];then #同步系统功能 sysfuncFlagPath="${projectPath}/${username}/${projectName}/hc-birt-platf-更新中" if [[ ! -d "${sysfuncFlagPath}" ]]; then mkdir -p "${sysfuncFlagPath}" else echo "已经相关人员同步中,请稍候..."; exit 1; fi echo "》》》同步系统功能..."$(date +%F%n%T) git clone http://192.168.4.105:8080/gitbucket/git/js-team2/zhc-birt-platf.git ${eap5Dir}/hiruntime/project/desktop/__zhc-birt-platf rm -rf ${eap5Dir}/hiruntime/project/desktop/zhc-birt-platf rsync -auz ${eap5Dir}/hiruntime/project/desktop/__zhc-birt-platf/project/* ${eap5Dir}/hiruntime/workspace/${username}/${projectName}/ rm -rf ${eap5Dir}/hiruntime/project/desktop/__zhc-birt-platf echo "》》》系统功能已同步!"$(date +%F%n%T) # 删除临时文件标识,以准备下次更新判断 rm -rf "${sysfuncFlagPath}" exit fi if [ $way = 'nginx' ];then #nginx环境 #获取processes.json 的端口 portStr=$(cat ${projectPath}/${username}/${projectName}/deploy/processes.json | sed 's/,/\n/g' | grep "args" | sed 's/:/\n/g' | sed '1d' | sed 's/"//g') portNum=`echo $portStr | tr -cd "[0-9]"` # echo $portNum if [ $portNum = '' ];then echo '取不到端口信息!' exit 1; fi cd /usr/local/nginx/conf #设置相关配置 返回到nginxStr getNginx $portNum #删除 sed -i "/${nginxStr}/d" nginx.conf echo '删除nginx相关配置!' #添加 sed -i "/map \$host \$proxy_port{/a ${nginxStr}" nginx.conf echo ${nginxStr} echo '添加nginx相关配置!' cd /usr/local/nginx/sbin # 清缓存 rm -rf /usr/local/nginx/proxy_temp ./nginx -s reload echo "》》》nginx环境已同步!" exit 1; fi # 以下注释不能用,多人点击同步文件会缺失 # rm -rf ${eap5Dir}/hiruntime/project/desktop/project-template # rsync -auz ${eap5Dir}/hiruntime/project/desktop/__gittmp ${eap5Dir}/hiruntime/project/desktop/project-template # rm -rf ${eap5Dir}/hiruntime/project/desktop/__gittmp case $way in "build") #同步打包环境 echo "》》》正在同步打包环境..."$(date +%F%n%T) rsync -auz ${tmpPath}/build ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/babel.config.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.postcssrc.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.browserslistrc ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/vite-plugin ${projectPath}/${username}/${projectName}/deploy/ echo "》》》打包环境已同步!"$(date +%F%n%T) exit 1 ;; "hiui") #同步hiui资源库 echo "》》》正在同步hi-ui库..."$(date +%F%n%T) cd "${tmpPath}/" hiuiFlagPath="${projectPath}/${username}/${projectName}/hi-ui-更新中" if [[ ! -d "${hiuiFlagPath}" ]]; then mkdir -p "${hiuiFlagPath}" else echo "已经相关人员同步中,请稍候..."; exit 1; fi npm i hi-ui -S rm -rf ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-ui rsync -auz ${tmpPath}/node_modules/hi-ui ${projectPath}/${username}/${projectName}/deploy/node_modules/ ## 取hi-ui版本 并更新root package.json ## cd ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-ui/ ## sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json echo "hiui已同步!"$(date +%F%n%T) # 删除临时文件标识,以准备下次更新判断 rm -rf "${hiuiFlagPath}" ;; "taskcenter") #同步环境 echo "》》》正在同步任务中心..."$(date +%F%n%T) cd "${tmpPath}/" taskcenterFlagPath="${projectPath}/${username}/${projectName}/hi-taskcenter-更新中" if [[ ! -d "${taskcenterFlagPath}" ]]; then mkdir -p "${taskcenterFlagPath}" else echo "已经相关人员同步中,请稍候..."; exit 1; fi npm i hi-taskcenter -S rm -rf ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-taskcenter rsync -auz ${tmpPath}/node_modules/hi-taskcenter ${projectPath}/${username}/${projectName}/deploy/node_modules/ ## 取hi-taskcenter版本 并更新root package.json ## cd ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-taskcenter/ ## sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json echo "任务中心已同步!"$(date +%F%n%T) # 删除临时文件标识,以准备下次更新判断 rm -rf "${taskcenterFlagPath}" ;; "cli") #程序环境 echo "开始同步..."$(date +%F%n%T) if [[ ! -d "${eap5Dir}/hiruntime/project/desktop/__gittmp" ]]; then #可以更新 git clone http://192.168.4.105:8080/gitbucket/git/08335/hivui-platform-template.git ${eap5Dir}/hiruntime/project/desktop/__gittmp rsync -auz ${eap5Dir}/hiruntime/project/desktop/__gittmp/ ${tmpPath} else echo "已经相关人员同步中,请稍候..."; exit 1; fi rsync -auz ${tmpPath}/assets_platform ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/index.html ${projectPath}/${username}/${projectName}/deploy rsync -auz ${tmpPath}/template.html ${projectPath}/${username}/${projectName}/deploy/ echo "》》》静态共用库已同步!" rsync -auz ${tmpPath}/project/hivuiLogin ${projectPath}/${username}/${projectName}/deploy/${projectName}/ cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiLogin sed -i 's/<\/head>/'"${source}"'<\/head>/g' index.html echo "》》》登录模板已同步!" rsync -auz ${tmpPath}/project/hivuiMain ${projectPath}/${username}/${projectName}/deploy/${projectName}/ cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiMain sed -i 's/<\/head>/'"${source}"'<\/head>/g' index.html echo "》》》主页模板已同步!" rsync -auz ${tmpPath}/project/hivuiBirt ${projectPath}/${username}/${projectName}/deploy/${projectName}/ cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiBirt sed -i 's/<\/head>/'"${source}"'<\/head>/g' index.html echo "》》》报表模板同步!" cd "${tmpPath}/" npm i # npm rebuild rsync -auz ${tmpPath}/node_modules ${projectPath}/${username}/${projectName}/deploy/ echo "》》》node环境已同步!" cd "${tmpPath}/" npm i hi-ui -S rm -rf ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-ui rsync -auz ${tmpPath}/node_modules/hi-ui ${projectPath}/${username}/${projectName}/deploy/node_modules/ echo "》》》hi-ui库已同步!" rsync -auz ${tmpPath}/build ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/babel.config.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.postcssrc.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.browserslistrc ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/vite-plugin ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.env.development ${projectPath}/${username}/${projectName}/deploy/.env.development rsync -auz ${tmpPath}/.env.production ${projectPath}/${username}/${projectName}/deploy/.env.production rsync -auz ${tmpPath}/.env.staging ${projectPath}/${username}/${projectName}/deploy/.env.staging rsync -auz ${tmpPath}/vite.config.js ${projectPath}/${username}/${projectName}/deploy/vite.config.js echo "》》》已同步程序环境(build、babel.config.js、.postcssrc.js、.browserslistrc、vite-plugin、.env.development、.env.production、.env.staging、vite.config.js)..." # source ${cmdDir}/var_env.sh ### 设置环境变量 cd ${projectPath}/${username}/${projectName}/deploy/ sed -i 's#\(VITE_APP_USERPATH \?= \?\).*#\1'"/e5/render/${username}"'#g' .env.production sed -i 's#\(VITE_APP_BASE_API \?= \?\).*#\1'"${DEV_BASE_API}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.development sed -i 's#\(VITE_APP_PN \?= \?\).*#\1'"${projectName}/${username}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.development sed -i 's#\(VITE_APP_PN \?= \?\).*#\1'"${projectName}/${username}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.staging ### node_modules/vite 环境 cd ${projectPath}/${username}/${projectName}/deploy/node_modules/vite/dist/client # sed 's/要替换的内容/新的内容/' # 将所有的数字替换成内容 # sed 's/[0-9]/好的/g' testFile2.txt sed -i "s#const.*socketHost.*=.*#${viteStr}#g" client.js sed -i "s#case 'update':.*#case 'update':return;#g" client.js sed -i "s#case.*'full-reload':.*#case 'full-reload':return;#g" client.js echo "》》》程序环境已同步!"$(date +%F%n%T) # 删除临时文件标识,以准备下次更新判断 rm -rf ${eap5Dir}/hiruntime/project/desktop/__gittmp ;; esac rsync -auz ${tmpPath}/package.json ${projectPath}/${username}/${projectName}/deploy/package.json cd ${projectPath}/${username}/${projectName}/deploy/ ## 替换 package.json 的 name 值 sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json sed -i 's#\("author": \?"\).*#\1'"${username}"'",#g' package.json #获取processes.json 的端口 portStr=$(cat ${projectPath}/${username}/${projectName}/deploy/processes.json | sed 's/,/\n/g' | grep "args" | sed 's/:/\n/g' | sed '1d' | sed 's/"//g') portNum=`echo $portStr | tr -cd "[0-9]"` # echo $portNum sed -i 's#\("dev": \?"\).*#\1'"vite --host --port ${portNum}"'",#g' package.json echo "》》》正在重启服务..."$(date +%F%n%T) pm2 stop "vite-${username}-${projectName}" pm2 delete "vite-${username}-${projectName}" npm run rm:vite npm run pm2:start pm2 save echo "》》》已经重启服务!!"$(date +%F%n%T) ;; esac
#!/bin/bash ## 权限问题,用 chmod u+x *.sh ## eg: oper.sh # 用户名 # 项目名 # 操作 (create , restart , start , kill , stop , del , build , sync) # 部署路径 (upload) # 同步内容 (node_modules , build , cli) cmdDir=$( cd $(dirname "$0") pwd ) username=$1 #用户名 projectName=$2 #项目名 cmd=$3 #命令 port=$4 #端口 # *.pre2.hieap.cn==>http://192.168.4.192:8001 # *.pre.hieap.cn==>http://192.168.10.242:31167 ip=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"` tagIp="192.168.4.193" if [[ $ip == *$tagIp* ]]; then DEV_BASE_API='http://192.168.4.106:7777/' #传给配置 .env.development 的 VITE_APP_BASE_API 做后端请求数据 else DEV_BASE_API='http://e52.hieap.cn/' #传给配置 .env.development 的 VITE_APP_BASE_API 做后端请求数据 fi tagIp192="192.168.4.192" nginxStr='' function getNginx(){ nginxStr='' if [[ $ip == *$tagIp192* ]]; then # *.pre2.hieap.cn==>http://192.168.4.192:8001 nginxStr='"'${projectName}'.'${username}'.pre2.hieap.cn" "'${1}'";' elif [[ $ip == *$tagIp* ]]; then nginxStr='' else # *.pre.hieap.cn==>http://192.168.10.242:32467 nginxStr='"'${projectName}'.'${username}'.pre.hieap.cn" "'${1}'";' fi } #BASH_SOURCE[0]用户所在的目录到脚本的路径 ## 获取eap5.0 路径 # eap5Dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" eap5Dir="${cmdDir%/hiruntime*}" projectPath=${eap5Dir}/desktop/preview tmpPath=${eap5Dir}/hiruntime/project/desktop/project-template source='' source=$source'\t<% if(htmlWebpackPlugin.vite){%>\n\t<!--预览时 公共库-->' source=$source'\n\t<script src="\/'${projectName}'\/setting\/desktop\/development.js" type="text\/javascript"><\/script>' source=$source'\n\t<%}%>' source=$source'\n\t<% if(!htmlWebpackPlugin.vite){%>\n\t<!--发布时 公共库-->' source=$source'\n\t<script src="\/${serverName}\/render\/'${username}'\/'${projectName}'\/setting\/desktop\/appsetting.js" type="text\/javascript"><\/script>' source=$source'\n\t<%}%>\n' viteStr='' viteStr=$viteStr'let socketHost = `${__HMR_HOSTNAME__ || location.hostname}:${__HMR_PORT__}`;' viteStr=$viteStr'let socketHostSplit = socketHost.split(".");' viteStr=$viteStr'let reg=/^[0-9]*$/gi;' viteStr=$viteStr'if(reg.test(socketHostSplit[0])==false){socketHost = socketHost.substring(0,socketHost.indexOf(":"));}' nrm del zhc nrm add zhc http://npm.hieap.cn/ nrm use zhc case $cmd in "create") #创建 echo '正在创建桌面端应用...'$(date +%F%n%T) #参数个数判断,至少4个 if [ $# -lt 4 ];then echo "创建项目命令参数不对:$*" echo "创建项目命令正确参数:用户名 项目名 create 桌面预览端口" exit 1 fi # source ${cmdDir}/var_env.sh # echo ${DEV_BASE_API} echo eap5Dir: ${eap5Dir} echo projectPath: ${projectPath} if [ ! -d "${projectPath}/${username}" ];then mkdir "${projectPath}/${username}" #创用户工作空间 fi if [ -d "${projectPath}/${username}/${projectName}" ];then echo "项目名已经存在!" exit 1 fi echo "<1>git正在拉取web端项目基础文件" git clone http://192.168.4.105:8080/gitbucket/git/08335/hivui-platform-template.git "${projectPath}/${username}/${projectName}/deploy" echo "<2>初始化node环境..." # rsync -auz ${tmpPath}/node_modules ${projectPath}/${username}/${projectName}/deploy/ # cp这个命令在复制零碎文件的时候是很慢的 rsync -auz ${tmpPath}/node_modules ${projectPath}/${username}/${projectName}/deploy/ cd ${projectPath}/${username}/${projectName}/deploy/ rm -rf ./build/bin rm -rf ./build/doc.txt echo "<3>初始化相关配置..." ## 修改模板,重命项目名 mv project ${projectName} sed -i 's#\(VITE_APP_USERPATH \?= \?\).*#\1'"/e5/render/${username}"'#g' .env.production sed -i 's#\(VITE_APP_PN \?= \?\).*#\1'"${projectName}/${username}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.development sed -i 's#\(VITE_APP_BASE_API \?= \?\).*#\1'"${DEV_BASE_API}"'#g' .env.development ## 替换 package.json 的 name 值 author值 ,打包时候输出静态地址是这个 sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json sed -i 's#\("author": \?"\).*#\1'"${username}"'",#g' package.json ## 替换 processes.json 的 args 值 sed -i '4s#\("name": \?"\).*#\1'"vite-${username}-${projectName}"'",#g' processes.json sed -i '7s#\("args": \?"\).*#\1'"--host --port ${port}"'",#g' processes.json cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiLogin sed -i 's/<\/head>/'"${source}"'<\/head>/g' index.html cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiMain sed -i 's/<\/head>/'"${source}"'<\/head>/g' index.html cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiBirt sed -i 's/<\/head>/'"${source}"'<\/head>/g' index.html cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/setting/desktop/appsetting/js/1.0.0 sed -i 's#\(projectName \?= \?\).*#\1"'"${projectName}"'";#g' appsetting.js echo "<4>配置Nginx环境" # /usr/local/nginx/conf/nginx.conf cd /usr/local/nginx/conf getNginx $port sed -i "/${nginxStr}/d" nginx.conf sed -i "/map \$host \$proxy_port{/a ${nginxStr}" nginx.conf cd /usr/local/nginx/sbin # 清缓存 rm -rf /usr/local/nginx/proxy_temp ./nginx -s reload echo "<5>配置node_modules/vite环境" # node_modules/vite 环境 cd ${projectPath}/${username}/${projectName}/deploy/node_modules/vite/dist/client sed -i "s#const.*socketHost.*=.*#${viteStr}#g" client.js sed -i "s#case 'update':.*#case 'update':return;#g" client.js sed -i "s#case.*'full-reload':.*#case 'full-reload':return;#g" client.js echo "<6>正在启动服务..." cd ${projectPath}/${username}/${projectName}/deploy/ npm run pm2:start pm2 save echo "桌面端创建完毕!"$(date +%F%n%T) exit 1 ;; "delete") #删除 #参数个数判断,至少3个 if [ $# -lt 3 ];then echo "删除项目命令参数不对:$*" echo "删除项目命令正确参数:用户名 项目名 delete" exit 1 fi if [ $username = "admin" -a $projectName = "systpl" ] ; then echo "系统模板,不可删除!" exit 1 fi curPid=`pm2 pid vite-${username}-${projectName}` if [ ! -z "$curPid" ];then echo "vite-${username}-${projectName} 正在关闭服务..." pm2 delete "vite-${username}-${projectName}" fi # 删除配nginx #获取processes.json 的端口 portStr=$(cat ${projectPath}/${username}/${projectName}/deploy/processes.json | sed 's/,/\n/g' | grep "args" | sed 's/:/\n/g' | sed '1d' | sed 's/"//g') portNum=`echo $portStr | tr -cd "[0-9]"` # echo $portNum if [ $portNum = '' ];then echo '取不到端口信息!' exit 1; fi cd /usr/local/nginx/conf #设置相关配置 返回到nginxStr getNginx $portNum #删除 sed -i "/${nginxStr}/d" nginx.conf # 清缓存 rm -rf /usr/local/nginx/proxy_temp ./nginx -s reload ### 删除用户项目 rm -rf ${projectPath}/${username}/${projectName} echo "用户:${username} 项目:${projectName} 删除成功!" pm2 save exit 1 ;; "restart") #重启 echo "》》》正在重启服务..." curPid=`pm2 pid vite-${username}-${projectName}` if [ ! -z "$curPid" ];then echo "vite-${username}-${projectName} 正在关闭服务..." pm2 delete "vite-${username}-${projectName}" fi cd ${projectPath}/${username}/${projectName}/deploy/ npm run rm:vite npm run pm2:start pm2 save echo "已经重启服务!!" exit 1 ;; "build") #编译 uploadPath=$4 modules=$5 #参数个数判断,至少3个 # if [ $# -lt 4 ];then # echo "编译项目命令参数不对:$*" # echo "编译项目命令正确参数:用户名 项目名 build 上传服务器路径 [指定编译模块]" # exit 1 # fi ### 用pm2管理,用pm2 重启指定的 rm -rf "${projectPath}/${username}/${projectName}/deploy/dist" cd "${projectPath}/${username}/${projectName}/deploy" buildFlag="building.txt" # touch filename if [ ! -f "$buildFlag" ];then touch "$buildFlag" else echo "已经处于编译状态,请等待..." exit 1; fi if [ ! $modules ]; then echo "正在执行编译所有模块..."$(date +%F%n%T) npm run build ### 编译所有的时候要考相关配置 cd "${projectPath}/${username}/${projectName}/deploy/" if [[ ! -d "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}/funclib/desklib" ]]; then mkdir -p "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}/funclib/desklib" fi rsync -auz "${projectPath}/${username}/${projectName}/deploy/${projectName}/funclib/desklib" "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}/funclib/" else echo "正在执行编译【指定模块】..."$(date +%F%n%T) npm run build:modules $modules fi rm -rf "$buildFlag" ## 删除之前打包文件 rm -rf "${username}_${projectName}.zip" cd "${projectPath}/${username}/${projectName}/deploy/dist" mkdir -p "${projectPath}/${username}/${projectName}/deploy/dist/${username}/${projectName}" rsync -auz "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}" "${projectPath}/${username}/${projectName}/deploy/dist/${username}/" rm -rf "${projectPath}/${username}/${projectName}/deploy/dist/${projectName}" zip -q -r "${username}_${projectName}.zip" ./* rsync -auz "${projectPath}/${username}/${projectName}/deploy/dist/${username}_${projectName}.zip" "${projectPath}/${username}/${projectName}/deploy/" rm -rf "${projectPath}/${username}/${projectName}/deploy/dist/${username}_${projectName}.zip" cd ${projectPath}/${username}/${projectName}/deploy/ if [ -z "$uploadPath" ]; then echo '未传服务器路径,请自行拷贝!' exit 1; fi if [[ ! -d "$uploadPath" ]]; then echo "编译命令: 上传文件夹不存在, 正在帮您创建目录..." mkdir -p "${uploadPath}" fi echo "正在拷到服务器目录:${uploadPath}" cp -fv "${username}_${projectName}.zip" "${uploadPath}" echo "(‐^▽^‐) 编译打包成功!"$(date +%F%n%T) ;; "sync") #同步环境 #参数个数判断,至少4个 if [ $# -lt 4 ];then echo "同步项目命令参数不对:$*" echo "同步项目命令正确参数:用户名 项目名 sync 同步方式" exit 1 fi way=$4 if [ $way = 'sysfunc' ];then #同步系统功能 sysfuncFlagPath="${projectPath}/${username}/${projectName}/hc-birt-platf-更新中" if [[ ! -d "${sysfuncFlagPath}" ]]; then mkdir -p "${sysfuncFlagPath}" else echo "已经相关人员同步中,请稍候..."; exit 1; fi echo "》》》同步系统功能..."$(date +%F%n%T) git clone http://192.168.4.105:8080/gitbucket/git/js-team2/zhc-birt-platf.git ${eap5Dir}/hiruntime/project/desktop/__zhc-birt-platf rm -rf ${eap5Dir}/hiruntime/project/desktop/zhc-birt-platf rsync -auz ${eap5Dir}/hiruntime/project/desktop/__zhc-birt-platf/project/* ${eap5Dir}/hiruntime/workspace/${username}/${projectName}/ rm -rf ${eap5Dir}/hiruntime/project/desktop/__zhc-birt-platf echo "》》》系统功能已同步!"$(date +%F%n%T) # 删除临时文件标识,以准备下次更新判断 rm -rf "${sysfuncFlagPath}" exit fi if [ $way = 'nginx' ];then #nginx环境 #获取processes.json 的端口 portStr=$(cat ${projectPath}/${username}/${projectName}/deploy/processes.json | sed 's/,/\n/g' | grep "args" | sed 's/:/\n/g' | sed '1d' | sed 's/"//g') portNum=`echo $portStr | tr -cd "[0-9]"` # echo $portNum if [ $portNum = '' ];then echo '取不到端口信息!' exit 1; fi cd /usr/local/nginx/conf #设置相关配置 返回到nginxStr getNginx $portNum #删除 sed -i "/${nginxStr}/d" nginx.conf echo '删除nginx相关配置!' #添加 sed -i "/map \$host \$proxy_port{/a ${nginxStr}" nginx.conf echo ${nginxStr} echo '添加nginx相关配置!' cd /usr/local/nginx/sbin # 清缓存 rm -rf /usr/local/nginx/proxy_temp ./nginx -s reload echo "》》》nginx环境已同步!" exit 1; fi # 以下注释不能用,多人点击同步文件会缺失 # rm -rf ${eap5Dir}/hiruntime/project/desktop/project-template # rsync -auz ${eap5Dir}/hiruntime/project/desktop/__gittmp ${eap5Dir}/hiruntime/project/desktop/project-template # rm -rf ${eap5Dir}/hiruntime/project/desktop/__gittmp case $way in "build") #同步打包环境 echo "》》》正在同步打包环境..."$(date +%F%n%T) rsync -auz ${tmpPath}/build ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/babel.config.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.postcssrc.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.browserslistrc ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/vite-plugin ${projectPath}/${username}/${projectName}/deploy/ echo "》》》打包环境已同步!"$(date +%F%n%T) exit 1 ;; "hiui") #同步hiui资源库 echo "》》》正在同步hi-ui库..."$(date +%F%n%T) cd "${tmpPath}/" hiuiFlagPath="${projectPath}/${username}/${projectName}/hi-ui-更新中" if [[ ! -d "${hiuiFlagPath}" ]]; then mkdir -p "${hiuiFlagPath}" else echo "已经相关人员同步中,请稍候..."; exit 1; fi npm i hi-ui -S rm -rf ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-ui rsync -auz ${tmpPath}/node_modules/hi-ui ${projectPath}/${username}/${projectName}/deploy/node_modules/ ## 取hi-ui版本 并更新root package.json ## cd ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-ui/ ## sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json echo "hiui已同步!"$(date +%F%n%T) # 删除临时文件标识,以准备下次更新判断 rm -rf "${hiuiFlagPath}" ;; "taskcenter") #同步环境 echo "》》》正在同步任务中心..."$(date +%F%n%T) cd "${tmpPath}/" taskcenterFlagPath="${projectPath}/${username}/${projectName}/hi-taskcenter-更新中" if [[ ! -d "${taskcenterFlagPath}" ]]; then mkdir -p "${taskcenterFlagPath}" else echo "已经相关人员同步中,请稍候..."; exit 1; fi npm i hi-taskcenter -S rm -rf ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-taskcenter rsync -auz ${tmpPath}/node_modules/hi-taskcenter ${projectPath}/${username}/${projectName}/deploy/node_modules/ ## 取hi-taskcenter版本 并更新root package.json ## cd ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-taskcenter/ ## sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json echo "任务中心已同步!"$(date +%F%n%T) # 删除临时文件标识,以准备下次更新判断 rm -rf "${taskcenterFlagPath}" ;; "cli") #程序环境 echo "开始同步..."$(date +%F%n%T) if [[ ! -d "${eap5Dir}/hiruntime/project/desktop/__gittmp" ]]; then #可以更新 git clone http://192.168.4.105:8080/gitbucket/git/08335/hivui-platform-template.git ${eap5Dir}/hiruntime/project/desktop/__gittmp rsync -auz ${eap5Dir}/hiruntime/project/desktop/__gittmp/ ${tmpPath} else echo "已经相关人员同步中,请稍候..."; exit 1; fi rsync -auz ${tmpPath}/assets_platform ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/index.html ${projectPath}/${username}/${projectName}/deploy rsync -auz ${tmpPath}/template.html ${projectPath}/${username}/${projectName}/deploy/ echo "》》》静态共用库已同步!" rsync -auz ${tmpPath}/project/hivuiLogin ${projectPath}/${username}/${projectName}/deploy/${projectName}/ cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiLogin sed -i 's/<\/head>/'"${source}"'<\/head>/g' index.html echo "》》》登录模板已同步!" rsync -auz ${tmpPath}/project/hivuiMain ${projectPath}/${username}/${projectName}/deploy/${projectName}/ cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiMain sed -i 's/<\/head>/'"${source}"'<\/head>/g' index.html echo "》》》主页模板已同步!" rsync -auz ${tmpPath}/project/hivuiBirt ${projectPath}/${username}/${projectName}/deploy/${projectName}/ cd ${projectPath}/${username}/${projectName}/deploy/${projectName}/hivuiBirt sed -i 's/<\/head>/'"${source}"'<\/head>/g' index.html echo "》》》报表模板同步!" cd "${tmpPath}/" npm i # npm rebuild rsync -auz ${tmpPath}/node_modules ${projectPath}/${username}/${projectName}/deploy/ echo "》》》node环境已同步!" cd "${tmpPath}/" npm i hi-ui -S rm -rf ${projectPath}/${username}/${projectName}/deploy/node_modules/hi-ui rsync -auz ${tmpPath}/node_modules/hi-ui ${projectPath}/${username}/${projectName}/deploy/node_modules/ echo "》》》hi-ui库已同步!" rsync -auz ${tmpPath}/build ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/babel.config.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.postcssrc.js ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.browserslistrc ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/vite-plugin ${projectPath}/${username}/${projectName}/deploy/ rsync -auz ${tmpPath}/.env.development ${projectPath}/${username}/${projectName}/deploy/.env.development rsync -auz ${tmpPath}/.env.production ${projectPath}/${username}/${projectName}/deploy/.env.production rsync -auz ${tmpPath}/.env.staging ${projectPath}/${username}/${projectName}/deploy/.env.staging rsync -auz ${tmpPath}/vite.config.js ${projectPath}/${username}/${projectName}/deploy/vite.config.js echo "》》》已同步程序环境(build、babel.config.js、.postcssrc.js、.browserslistrc、vite-plugin、.env.development、.env.production、.env.staging、vite.config.js)..." # source ${cmdDir}/var_env.sh ### 设置环境变量 cd ${projectPath}/${username}/${projectName}/deploy/ sed -i 's#\(VITE_APP_USERPATH \?= \?\).*#\1'"/e5/render/${username}"'#g' .env.production sed -i 's#\(VITE_APP_BASE_API \?= \?\).*#\1'"${DEV_BASE_API}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.development sed -i 's#\(VITE_APP_PN \?= \?\).*#\1'"${projectName}/${username}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.development sed -i 's#\(VITE_APP_PN \?= \?\).*#\1'"${projectName}/${username}"'#g' ${projectPath}/${username}/${projectName}/deploy/.env.staging ### node_modules/vite 环境 cd ${projectPath}/${username}/${projectName}/deploy/node_modules/vite/dist/client # sed 's/要替换的内容/新的内容/' # 将所有的数字替换成内容 # sed 's/[0-9]/好的/g' testFile2.txt sed -i "s#const.*socketHost.*=.*#${viteStr}#g" client.js sed -i "s#case 'update':.*#case 'update':return;#g" client.js sed -i "s#case.*'full-reload':.*#case 'full-reload':return;#g" client.js echo "》》》程序环境已同步!"$(date +%F%n%T) # 删除临时文件标识,以准备下次更新判断 rm -rf ${eap5Dir}/hiruntime/project/desktop/__gittmp ;; esac rsync -auz ${tmpPath}/package.json ${projectPath}/${username}/${projectName}/deploy/package.json cd ${projectPath}/${username}/${projectName}/deploy/ ## 替换 package.json 的 name 值 sed -i 's#\("name": \?"\).*#\1'"${projectName}"'",#g' package.json sed -i 's#\("author": \?"\).*#\1'"${username}"'",#g' package.json echo "》》》正在重启服务..."$(date +%F%n%T) pm2 stop "vite-${username}-${projectName}" pm2 delete "vite-${username}-${projectName}" npm run rm:vite npm run pm2:start pm2 save echo "》》》已经重启服务!!"$(date +%F%n%T) ;; esac
Show notes
View
build/doc.txt
100644 → 0
node webpack 多config 编译执行 https://cloud.tencent.com/developer/section/1477277 parallel-webpack 多config 并行执行编译,这样提高速度 192.168.4.194 项目文件:/filesdisk2/eap5/web/workspace/project/deploy /filesdisk2/eap5/studio/workspace/project/deploy/ 192.168.4.193 项目文件: /opt/eap5/desktop/preview/ deploy最终的项目部署目录 http://192.168.4.194:3000/project/01521/mokuai/shitu/abc/dtv/1.0.0/index.html 让npm run dev在Linux后台 持久运行 nohup npm run dev >/dev/null 2>&1 & exit 杀端口进程 netstat -apn|grep 3000 kill -9 18164 下面几个版本组合(有些版本没有列出来)。 npm install -g node-gyp https://github.com/webpack-contrib/sass-loader/blob/v6.0.7/package.json node-sass 对环境的要求 Node 12 的话要 node-sass 4.12+ 然页sass-loader 版本8的, 配对 node-sass版本4 npm i sass-loader@8.0.2 node-sass@4.13.0 -D npm rebuild node-sass npm i less@4.1.1 less-loader@3.0.0 -D npm cache clean -f rimraf node_modules npm shrinkwrap // npm-shrinkwrap.json 锁定包版本环境 1:npm install webpack -g 2: npm install webpack-cli -g 3: npm init -y 4: npm install webpack --save-dev 5: npm install html-webpack-plugin (html编译插件) 6:npm install clean-webpack-plugin 6.1: npm install webpack-dev-server (服务插件) 6.2: npm install style-loader css-loader (css打包插件) 6.3: npm install file-loader url-loader (文件图片打包插件) 6.4: npm install less-loader (less打包插件) 6.5: npm install sass scss --save-dev (sass scss打包插件) 6.6: npm install sass-loader nade-sass (sass打包插件) 7新建一个src文件夹 和 less文件夹 和webpack.config.js //以element 方式打包各各组件,做为按需导出使用 ElementUI/babel-plugin-component .babelrc "plugins": ["transform-vue-jsx", "transform-runtime", [ "component", { "libraryName": "hi-ui", "style":false } ]], vue2 使用 vite 所需求的步骤: 1、相关包安装 npm i '@vitejs/plugin-vue' '@vue/compiler-sfc' vite vite-plugin-vue2 -D 2、添加vite.confing.js import { createVuePlugin } from "vite-plugin-vue2"; 在配置项中,转vue plugins: [createVuePlugin()], 3、修改vite/dist/client/client.js case 'error': //判断当前出错的页面 let locPath = location.pathname.split('/'); locPath.pop(); if(err.id.indexOf(locPath.join('/'))==-1)break; case 'update': return;//让用户手动去刷新 08335 case 'full-reload': return;//让用户手动去刷新 08335 报类似这样的错误: Current process list running is not in sync with saved list. App BookStack differs. Type ‘pm2 save’ to synchronize. 按先后顺序,执行如下操作: pm2 update pm2 save pm2 list //当dock重新部署时这个重启服务 pm2 resurrect npm i vite@2.3.7 --save-dev //fonticon这个版本才可以有图标显示 webpack5 https://blog.csdn.net/j178202798/category_11141799.html npm run build:debug ./project/zhuomianduanyanshi/biaozhundanju/view/biaodan/dtv/1.0.0 npm run build:modules ./project/WangGeShu/view/ShuWangGe/dtv/1.0.0/desktop webpack 2 vite https://github.com/tnfe/wp2vite/blob/master/README.zh-CN.md 自动化构建工具(三)Parcel https://blog.csdn.net/weixin_42580704/article/details/108378689 https://www.parceljs.cn/getting_started.html /eap5.0/hiruntime/project/desktop/oper.sh admin eap5csxm sync cli /eap5.0/hiruntime/project/desktop/project-template/build/bin/oper.sh cp -rf /eap5.0/hiruntime/project/desktop/project-template/build/bin/oper.sh /eap5.0/hiruntime/project/desktop/ chmod -R 777 /eap5.0/hiruntime/project/desktop /eap5.0/hiruntime/project/hicli.sh 项目类型 用户名 项目 操作 如:项目类型 用户名 项目名 创建操作 桌面端口 app端口 小程序端口 eap5 0000227 eapProject create 2022 2023 2024 如:项目类型 用户名 项目名 删除操作 eap5 0000227 eapProject delete 如:项目类型 用户名 项目名 同步操作 平台 同步方式 eap5 0000227 eapProject sync desktop hiui eap5 0000227 eapProject sync rn eap5 0000227 eapProject sync xcx 如:项目类型 用户名 项目名 重启操作 平台 端口 eap5 0000227 eapProject restart desktop eap5 0000227 eapProject restart rn 2025 eap5 0000227 eapProject restart xcx 2026 项目类型,工号,项目,命令 ,平台 ,命令参数(逗号分开) eap5 admin eaptpl build desktop 上传路径 模块路径列表(逗号分开) eap5 admin eaptpl build android 上传路径 部署名 eap5 admin eaptpl build xcx 上传路径 部署名 eap5 admin eaptpl build ios 上传路径 部署名 ================linux 命令============================= nginx.conf 中通配域名识别 map $host $proxy_pass{ "mflm.0000221.pre2.hieap.cn" "43447"; } server { listen 8001; server_name ~^(\w)*?\.(\w)*?\.pre2\.hieap\.cn$; location / { proxy_pass http://127.0.0.1:$proxy_pass; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-real-ip $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Origin ""; index index.html index.htm; } } /usr/local/nginx/sbin pm2 startup 端口查看进程 lsof -i :8081 杀端口进程 netstat -apn|grep 3000 kill -9 18164 lsof -i :38889 free -m 查看内存 查看用户进程的内存使用情况 ps auxw|head -1;ps auxw|sort -rn -k3|head -10 杀webpack 进程 ps -ef|grep webpack|grep -v grep|cut -c 9-15|xargs kill -9 使用指令sed -i 's/\r$//' xxxxxxx.sh,上面的指令会把 xxxxxxx.sh 中的\r 替换成空白! 内网: PC http://项目名.工号.pre2.hieap.cn 手机 http://项目名rn.工号.pre2.hieap.cn 小程序 http://项目名xcx.工号.pre2.hieap.cn 文档 http://项目名doc.工号.pre2.hieap.cn 外网: PC http://项目名.工号.pre.hieap.cn 手机 http://项目名rn.工号.pre.hieap.cn 小程序 http://项目名xcx.工号.pre.hieap.cn 文档 http://项目名doc.工号.pre.hieap.cn 【======编译问题 ======】 可能 parallel-webpack cpu太多 可能 happypack cpu太多 目前把 parallel-webpack 降到 1 cpu 结果可以跑的动
Show notes
View
build/nginx配置说明.txt
100644 → 0
以下的配置处于,多域名匹配 http { map $host $proxy_pass{ "mflm.0000221.pre2.hieap.cn" "43447"; "jwjx.0000206.pre2.hieap.cn" "38889"; "cpp.0000207.pre2.hieap.cn" "36639"; "erp.0000212.pre2.hieap.cn" "46153"; "dcp.0000220.pre2.hieap.cn" "33234"; "cms.0000221.pre2.hieap.cn" "41274"; "hccd.0000221.pre2.hieap.cn" "43837"; "alys.0000299.pre2.hieap.cn" "43785"; "eap5csxm.admin.pre2.hieap.cn" "39784"; } server { listen 8001; server_name ~^(\w)*?\.(\w)*?\.pre2\.hieap\.cn$; location / { proxy_pass http://127.0.0.1:$proxy_pass; proxy_buffer_size 1024k; proxy_buffers 16 1024k; proxy_busy_buffers_size 2048k; proxy_temp_file_write_size 2048k; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-real-ip $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Origin ""; index index.html index.htm; } } }
Ignore Space
Show notes
View
build/webpack.base.conf.js
const path = require('path'); var HtmlWebpackPlugin = require('html-webpack-plugin'); const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin');//------------ const CleanWebpackPlugin = require('clean-webpack-plugin'); const VueLoaderPlugin = require('vue-loader/lib/plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const ProgressBarPlugin = require('progress-bar-webpack-plugin'); const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin"); const webpack = require('webpack'); const threadLoader = require('thread-loader'); const packageConfig = require('../package.json'); const utils = require('./utils') const vueLoaderConfig = require('./vue-loader.conf') let evnConfig = require('./getEnvVar') // HappyPack // 原理:每次 webapck 解析一个模块时,HappyPack 会将它及它的依赖分配到worker线程中。 // 提示:由于HappyPack 对file-loader、url-loader 支持的不友好,所以不建议对该loader使用。 // 引入 Happpack 可以在 package.json 找到你下载的 const HappyPack = require('happypack'); // 安装 OS 模块 这个主要是拿到当前电脑的CPU核数 const os = require('os'); /* 这个是设置共享线程池中的数量 size 控制设置数量 类型 只能是 整数类型 */ const cpus = os.cpus().length; const happyThreadPool = HappyPack.ThreadPool({ size: cpus>1?cpus-1:1 });// os.cpus().length 不能开最大 // const happyThreadPool = HappyPack.ThreadPool({ size: 1 });//os.cpus().length 不能开最大 let threadCfg = { loader: "thread-loader", // 有同样配置的 loader 会共享一个 worker 池(worker pool) options: { // 产生的 worker 的数量,默认是 cpu 的核心数 // workers: Math.floor(cpus / 2) || 1, // 一个 worker 进程中并行执行工作的数量 // 默认为 20 workerParallelJobs: 50, // 额外的 node.js 参数 // workerNodeArgs: ['--max-old-space-size', '1024'], // 闲置时定时删除 worker 进程 // 默认为 500ms // 可以设置为无穷大, 这样在监视模式(--watch)下可以保持 worker 持续存在 poolTimeout: 2000, // 池(pool)分配给 worker 的工作数量 // 默认为 200 // 降低这个数值会降低总体的效率,但是会提升工作分布更均一 poolParallelJobs: 50, // 池(pool)的名称 // 可以修改名称来创建其余选项都一样的池(pool) // name: "my-pool" } }; let projectName = packageConfig.name == 'hi-vui-template' ? 'project' : packageConfig.name; module.exports = { // entry: { // 'login': ['babel-polyfill', './project/hivuiLogin/index.js'], // 'main': ['babel-polyfill','./project/hivuiMain/index.js'] // }, // output: { // filename: '[name].[contenthash].js', // chunkFilename: '[name].[contenthash].js', // path: path.resolve(__dirname, 'dist') // }, resolve: { extensions: ['.js', '.jsx', '.vue', '.json', '.dtvevt', '.dvue'], alias: { 'vue$': 'vue/dist/vue.esm.js', 'vuex$': 'vuex/dist/vuex.esm.js', '@': path.resolve(__dirname, `${projectName}`), '@main': path.resolve(__dirname, `../${projectName}/hivuiMain`), // '@': path.resolve(__dirname, 'src'), '@birt':path.resolve(__dirname, `../${projectName}/hivuiBirt`), 'pinyin': 'js-pinyin', } }, externals: { 'vue': 'Vue', 'vuex': 'Vuex', 'vue-router': 'VueRouter', "element-ui": "ELEMENT", }, module: { rules: [ ...(utils.styleLoaders({ sourceMap: false, extract: process.env.NODE_ENV === 'production', usePostCSS: true })), { test: /\.(js|jsx|dtvevt?|babel|es6)$/, loader: 'happypack/loader?id=happy_js_jsx', // use:[threadCfg,'babel-loader'] // loader: 'babel-loader', // exclude: [path.resolve(__dirname, 'node_modules')]//放开,里头有些也是 可选链操作符 }, { test: /\.(vue|dvue)$/, loader: 'vue-loader', // use:[{ // loader: "vue-loader", // options: vueLoaderConfig // }], }, { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, loader: 'url-loader', options: { limit: 10000, name: '[name].[hash:7].[ext]', publicPath: "../img/", //替换CSS引用的图片路径 可以替换成爱拍云上的路径 outputPath: "static/img/" //生成之后存放的路径 } }, { test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, loader: 'url-loader', options: { limit: 10000, name: '[name].[hash:7].[ext]', publicPath: "../img/", //替换CSS引用的图片路径 可以替换成爱拍云上的路径 outputPath: "static/media/" //生成之后存放的路径 } }, { test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, loader: 'url-loader', options: { limit: 10000, name: '[name].[hash:7].[ext]', publicPath: "../fonts/", //替换CSS引用的图片路径 可以替换成爱拍云上的路径 outputPath: "static/fonts/" //生成之后存放的路径 } } ] }, optimization: { minimizer: [ new UglifyJsPlugin({ cache: true, parallel: true, sourceMap: true }), new OptimizeCSSAssetsPlugin({ cssProcessor: require('cssnano'), cssProcessorPluginOptions: { preset: ['default', { discardComments: { removeAll: true } }], }, canPrint: false }) ], runtimeChunk: { "name": "manifest" }, splitChunks: { cacheGroups: { default: false, vendors: false, vendor: { test: /[\\/]node_modules[\\/]/, name: 'vendors', chunks: 'all' } } } }, plugins: [ new VueLoaderPlugin(), new HappyPack({ id: 'happy_js_jsx', //共享进程池 threadPool: happyThreadPool, loaders: ['babel-loader'] }), new webpack.HashedModuleIdsPlugin(), new ProgressBarPlugin(), // new CleanWebpackPlugin(['dist']), //注入全局变量的插件,通常使用该插件来判别代码运行的环境变量 new webpack.DefinePlugin({ 'process.env': evnConfig }), new webpack.DllReferencePlugin({ context: path.resolve(__dirname), manifest: require('../assets_platform/vendor_dll/vendor-manifest.json') }), //这个主要是将生成的vendor.dll.js文件加上hash值插入到页面中。[也可以手动写到html这里不做处理] // new AddAssetHtmlPlugin([{ // filepath: path.resolve(__dirname, 'js_dll/comm_vendors.dll.js'), // outputPath: 'js_dll/', // publicPath: 'js_dll/', // includeSourcemap: false, // hash: true, // }]), // new CopyWebpackPlugin([ // { // from: path.resolve(__dirname, 'assets_platform'), // to: path.resolve(__dirname, 'dist/assets_platform') // }, // // { // // from: path.resolve(__dirname, 'js_dll'), // // to: path.resolve(__dirname, 'dist') // // } // ]) ] };
const path = require('path'); var HtmlWebpackPlugin = require('html-webpack-plugin'); const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin');//------------ const CleanWebpackPlugin = require('clean-webpack-plugin'); const VueLoaderPlugin = require('vue-loader/lib/plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const ProgressBarPlugin = require('progress-bar-webpack-plugin'); const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin"); const webpack = require('webpack'); const packageConfig = require('../package.json'); const utils = require('./utils') const vueLoaderConfig = require('./vue-loader.conf') let evnConfig = require('./getEnvVar') // HappyPack // 原理:每次 webapck 解析一个模块时,HappyPack 会将它及它的依赖分配到worker线程中。 // 提示:由于HappyPack 对file-loader、url-loader 支持的不友好,所以不建议对该loader使用。 // 引入 Happpack 可以在 package.json 找到你下载的 const HappyPack = require('happypack'); // 安装 OS 模块 这个主要是拿到当前电脑的CPU核数 const os = require('os'); /* 这个是设置共享线程池中的数量 size 控制设置数量 类型 只能是 整数类型 */ const cpus = os.cpus().length; const happyThreadPool = HappyPack.ThreadPool({ size: Math.floor(cpus/2)||1 });// os.cpus().length 不能开最大 // const happyThreadPool = HappyPack.ThreadPool({ size: 1 });//os.cpus().length 不能开最大 let projectName = packageConfig.name == 'hi-vui-template' ? 'project' : packageConfig.name; module.exports = { // entry: { // 'login': ['babel-polyfill', './project/hivuiLogin/index.js'], // 'main': ['babel-polyfill','./project/hivuiMain/index.js'] // }, // output: { // filename: '[name].[contenthash].js', // chunkFilename: '[name].[contenthash].js', // path: path.resolve(__dirname, 'dist') // }, resolve: { extensions: ['.js', '.jsx', '.vue', '.json', '.dtvevt', '.dvue'], alias: { 'vue$': 'vue/dist/vue.esm.js', 'vuex$': 'vuex/dist/vuex.esm.js', '@': path.resolve(__dirname, `${projectName}`), '@main': path.resolve(__dirname, `../${projectName}/hivuiMain`), // '@': path.resolve(__dirname, 'src'), '@birt':path.resolve(__dirname, `../${projectName}/hivuiBirt`), 'pinyin': 'js-pinyin', } }, externals: { 'vue': 'Vue', 'vuex': 'Vuex', 'vue-router': 'VueRouter', "element-ui": "ELEMENT", }, module: { rules: [ ...(utils.styleLoaders({ sourceMap: false, extract: process.env.NODE_ENV === 'production', usePostCSS: true })), { test: /\.(js|jsx|dtvevt?|babel|es6)$/, loader: 'happypack/loader?id=happy_js_jsx', // loader: 'babel-loader', // exclude: [path.resolve(__dirname, 'node_modules')]//放开,里头有些也是 可选链操作符 }, { test: /\.(vue|dvue)$/, // loader: 'happypack/loader?id=happy-vue-loader' ???不行,Make sure the rule matching .vue files include vue-loader in its use. loader: 'vue-loader', options: vueLoaderConfig }, { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, loader: 'url-loader', options: { limit: 10000, name: '[name].[hash:7].[ext]', publicPath: "../img/", //替换CSS引用的图片路径 可以替换成爱拍云上的路径 outputPath: "static/img/" //生成之后存放的路径 } }, { test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, loader: 'url-loader', options: { limit: 10000, name: '[name].[hash:7].[ext]', publicPath: "../img/", //替换CSS引用的图片路径 可以替换成爱拍云上的路径 outputPath: "static/media/" //生成之后存放的路径 } }, { test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, loader: 'url-loader', options: { limit: 10000, name: '[name].[hash:7].[ext]', publicPath: "../fonts/", //替换CSS引用的图片路径 可以替换成爱拍云上的路径 outputPath: "static/fonts/" //生成之后存放的路径 } } ] }, optimization: { minimizer: [ new UglifyJsPlugin({ cache: true, parallel: true, sourceMap: true }), new OptimizeCSSAssetsPlugin({ cssProcessor: require('cssnano'), cssProcessorPluginOptions: { preset: ['default', { discardComments: { removeAll: true } }], }, canPrint: false }) ], runtimeChunk: { "name": "manifest" }, splitChunks: { cacheGroups: { default: false, vendors: false, vendor: { test: /[\\/]node_modules[\\/]/, name: 'vendors', chunks: 'all' } } } }, plugins: [ new VueLoaderPlugin(), new HappyPack({ id: 'happy_js_jsx', //共享进程池 threadPool: happyThreadPool, loaders: ['babel-loader'] }), // new HappyPack({ // id: 'happy-vue-loader', // loaders: [{ // loader: 'vue-loader', // options:vueLoaderConfig // }], // threadPool: happyThreadPool // }), new webpack.HashedModuleIdsPlugin(), new ProgressBarPlugin(), // new CleanWebpackPlugin(['dist']), //注入全局变量的插件,通常使用该插件来判别代码运行的环境变量 new webpack.DefinePlugin({ 'process.env': evnConfig }), new webpack.DllReferencePlugin({ context: path.resolve(__dirname), manifest: require('../assets_platform/vendor_dll/vendor-manifest.json') }), //这个主要是将生成的vendor.dll.js文件加上hash值插入到页面中。[也可以手动写到html这里不做处理] // new AddAssetHtmlPlugin([{ // filepath: path.resolve(__dirname, 'js_dll/comm_vendors.dll.js'), // outputPath: 'js_dll/', // publicPath: 'js_dll/', // includeSourcemap: false, // hash: true, // }]), // new CopyWebpackPlugin([ // { // from: path.resolve(__dirname, 'assets_platform'), // to: path.resolve(__dirname, 'dist/assets_platform') // }, // // { // // from: path.resolve(__dirname, 'js_dll'), // // to: path.resolve(__dirname, 'dist') // // } // ]) ] };
Ignore Space
Show notes
View
build/webpack.prod.conf.js
// 多进程 编译所有 //parallel-webpack允许您并行运行多个Webpack构建,从而将工作分散到各个处理器上,从而有助于显着加快构建速度 // const os = require('os'); // const cpus = os.cpus().length; // console.log(cpus, ' Math.floor(cpus/2)||1', Math.floor(cpus / 2) || 1) const chalk = require('chalk') let webpack = require('webpack') let argvs = (process.argv[2] || "").replace(/\s*$/g, ""); let moduleList = argvs != "" ? argvs.split(',') : []; let len = moduleList.length; let startTime = new Date().valueOf(); //----------- 【一般编译,按参数,一个接一个的】 --------------- function DoWebpackBuild(list, i, l) { let wpkCfg, step = 1, isAll = false; if (i == null && l == null) { //------------ 【webpack 一口气编译指定的所有功能】 -------------- isAll = true; wpkCfg = list; } else { wpkCfg = list[i]; if (wpkCfg == null) { console.log(chalk.green(`消耗 ${(new Date().valueOf() - startTime) / 1000} 秒`)); return; } console.log(chalk.yellow(`进度 ${i + 1}/${l} ,正在编译${wpkCfg.output.path}\n`)); } webpack(wpkCfg, (err, stats) => { //这个回调一定要写,不然打包不出来 if (err || stats.hasErrors()) {//编译错误不在 err 对象内,而是需要使用 stats.hasErrors() 单独处理 let info = {}; try { info = stats.toJson(); } catch (e) { info = { errors: [] }; console.log('stats.toJson()', err, stats) } // console.error(info.errors); for (let i = 0, l = info.errors.length; i < l; i++) { // console.log(chalk.red(info.errors[i].message)); // console.error(info.errors[i].message) console.error(info.errors[i]) } } // 处理完成 if (isAll) { console.log(chalk.green(`消耗 ${(new Date().valueOf() - startTime) / 1000} 秒`)); } isAll == false && DoWebpackBuild(list, i + step, l); }); } if (len == 0) { //-------- 【用parallel-webpack,全部编译情况下】 ------------ /* moduleList = require('./webpack.get-module').moduleList || []; console.log(`=========进入全模块编译状态(${moduleList.length})模块...=============`) var run = require('parallel-webpack').run; run( require.resolve('./webpack.get-list.js'), { watch: false, maxRetries: 1, stats: false, // defaults to false maxConcurrentWorkers: 1,// use 2 workers cup个数 argv: [argvs] }, ()=>{ //多打包时,如果其中一个模块出错,不知道是哪个模块 console.log('\n--------编译完成------- \n'); }); */ console.log(`【编译所有】=====================\n`) let webpackList = require('./webpack.get-list.js'); len = webpackList.length; DoWebpackBuild(webpackList);//, 0, len //以上两种时间上差不多 20s } else { console.log(`【按需编译】=====================\n`) let webpackList = require('./webpack.get-list.js'); len = webpackList.length; DoWebpackBuild(webpackList)//, 0, len }
// 多进程 编译所有 //parallel-webpack允许您并行运行多个Webpack构建,从而将工作分散到各个处理器上,从而有助于显着加快构建速度 // const os = require('os'); // const cpus = os.cpus().length; // console.log(cpus, ' Math.floor(cpus/2)||1', Math.floor(cpus / 2) || 1) const chalk = require('chalk') let webpack = require('webpack') let argvs = (process.argv[2] || "").replace(/\s*$/g, ""); let moduleList = argvs != "" ? argvs.split(',') : []; let len = moduleList.length; let startTime = new Date().valueOf(); //----------- 【一般编译,按参数,一个接一个的】 --------------- function DoWebpackBuild(list, i, l) { let wpkCfg, step = 1, isAll = false; if (i == null && l == null) { //------------ 【webpack 一口气编译指定的所有功能】 -------------- isAll = true; wpkCfg = list; console.log(`【编译所有】=====================\n`) } else { wpkCfg = list[i]; if (wpkCfg == null) { console.log(chalk.green(`消耗 ${(new Date().valueOf() - startTime) / 1000} 秒`)); return; } console.log(chalk.yellow(`进度 ${i + 1}/${l} ,正在编译${wpkCfg.output.path}\n`)); } webpack(wpkCfg, (err, stats) => { //这个回调一定要写,不然打包不出来 if (err || stats.hasErrors()) {//编译错误不在 err 对象内,而是需要使用 stats.hasErrors() 单独处理 let info = {}; try { info = stats.toJson(); } catch (e) { info = { errors: [] }; console.log('stats.toJson()', err, stats) } // console.error(info.errors); for (let i = 0, l = info.errors.length; i < l; i++) { // console.log(chalk.red(info.errors[i].message)); // console.error(info.errors[i].message) console.error(info.errors[i]) } } // 处理完成 if (isAll) { console.log(chalk.green(`消耗 ${(new Date().valueOf() - startTime) / 1000} 秒`)); } isAll == false && DoWebpackBuild(list, i + step, l); }); } if (len == 0) { //-------- 【用parallel-webpack,全部编译情况下】 ------------ /* moduleList = require('./webpack.get-module').moduleList || []; console.log(`=========进入全模块编译状态(${moduleList.length})模块...=============`) var run = require('parallel-webpack').run; run( require.resolve('./webpack.get-list.js'), { watch: false, maxRetries: 1, stats: false, // defaults to false maxConcurrentWorkers: 1,// use 2 workers cup个数 argv: [argvs] }, ()=>{ //多打包时,如果其中一个模块出错,不知道是哪个模块 console.log('\n--------编译完成------- \n'); }); */ let webpackList = require('./webpack.get-list.js'); len = webpackList.length; DoWebpackBuild(webpackList, 0, len);// //以上两种时间上差不多 20s } else { let webpackList = require('./webpack.get-list.js'); len = webpackList.length; DoWebpackBuild(webpackList, 0, len) }
Show line notes below