1、背景
项目中使用一些字体是通过外网请求获取的(项目规定不允许跨域请求),这部分代码在node_modules依赖中,且无法通过样式覆盖解决。因此需要在编译好的代码中进行群替换。
2、解决方案
1)使用bat进行编译管理新建run_script.bat
@echo off
REM 声明采用UTF-8编码
chcp 65001
REM 当前目录 执行编译命令 %1%接收的第一个参数
cmd /c npm run-script build:%1%
2)新建security_check.vbs处理字符串替换
rem 获取传进来的参数
Set objArgs = WScript.Arguments
rem msgbox objArgs(0)
rem 接收传捡来的参数
url = objArgs(0)
rem 接收要替换的字符串
str = objArgs(1)
rem 定义文件对象
Set fileObj = Wscript.CreateObject("Scripting.FileSystemObject")
rem 打开文件
Set files = fileObj.opentextfile(url)
rem 替换css字符串
css = replace(files.ReadAll, str, "assets/font")
rem 文件关闭
files.close
rem 替换后的文件写入
Set r = fileObj.opentextfile(url,2,true)
r.write css
Wscript.quit
3)新建chubao.bat 调用run_script.bat 执行编译命令后再调用security_check.vbs进行字符串替换(特殊字符会有问题,建议使用python处理)
@echo off
REM 声明采用UTF-8编码
chcp 65001
REM 今日当前目录
cd /d %~dp0
REM 执行对应的出包命令 传递自己对应产品的参数
start /min "compress" run_script.bat "soc"
rem 等待200秒 待编译完成后进行字符串替换处理
@choice /t 200 /d y /n >nul
rem 关闭打包窗口
taskkill /f /fi "WINDOWTITLE eq compress"
REM 进入到打完的包路径下
cd /d dist
rem 循环遍历获取css文件名
for /f "delims=" %%A in ('dir /b *.css') do set "name=%%A"
rem 判断是否有外网连接 如果有则进行字符串替换
findstr https://at.alicdn.com/t %name%>nul && (
echo 存在外网请求 开始处理
cd ..
rem vsb处理字符串
WScript.exe security_check.vbs dist/%name% "https://at.alicdn.com/t"
rem phthon处理字符串
rem python security_check.py
)||echo 不存在外网请求
rem 打印成功消息
echo 编译成功
cmd.exe
4)有python环境的也可以使用python进行字符串替换(建议使用python处理)
#-*-coding:utf-8-*-
import os
filepath = "./dist/"
files = os.listdir(filepath)
for file in files:
if ".css" in file :
with open(filepath+file,'r+', encoding='UTF-8') as f:
text = f.read()
f.seek(0)
f.truncate()
text = str(text).replace("https://at.alicdn.com/t","assets/font")
f.write(text)
f.close()
备注:win10默认不支持vbs需要对注册表进行修改(复制粘贴到文件中,后缀给为.reg)双击即可
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.VBS]
@="VBSFile"
[HKEY_CLASSES_ROOT\VBSFile]
@="VBScript File"
[HKEY_CLASSES_ROOT\VBSFile\ScriptEngine]
@="VBScript"
[HKEY_CLASSES_ROOT\VBSFile\ScriptHostEncode]
@="{85131631-480C-11D2-B1F9-00C04F86C324}"
[HKEY_CLASSES_ROOT\VBSFile\Shell]
@=""
[HKEY_CLASSES_ROOT\VBSFile\Shell\Open]
@="打开(&O)"
[HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,57,00,53,00,\
63,00,72,00,69,00,70,00,74,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,00,31,\
00,22,00,20,00,25,00,2a,00,00,00
[HKEY_CLASSES_ROOT\VBSFile\ShellEx]
[HKEY_CLASSES_ROOT\VBSFile\ShellEx\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"
[HKEY_CLASSES_ROOT\VBSFile\ShellEx\PropertySheetHandlers]
[HKEY_CLASSES_ROOT\VBSFile\ShellEx\PropertySheetHandlers\WSHProps]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"