在下面引见的dooring任务流中,我们知道为了实理想时打包,我们需求一个H5 Template项目,作为打包的母版,当用户点击下载时,会将页面的json schema数据传给node效劳器, node效劳器再将json schema停止数据清洗最后生成template.json文件并移动到H5 Template母版中,此时母版拿到数据源并停止打包编译,最后生成可执行文件。
以上的进程很关键, 这里笔者画个大致的流程图:
H5-Dooring
为了完成以上进程,我们需求两个关键环节: 1. 将用户配置的数据停止处置并生成json文件,然后移动到H5 Template母版中 2. 在母版中自动执行打包编译脚本
第一个环节很好完成,我们只需求用nodejs的fs模块生成文件到指定目录即可,这里笔者重点引见第二个环节的完成。
当我们将json数据生成到H5 Template中之后,就可以停止打包了,但是这个进程需求自动化地去处置,不能像我们之前启动项目一样,手动执行npm start或许yarn start。我们需求顺序自动帮我们执行这个命令行指令,笔者在查nodejs API突然发现了child_process的exec办法,可以用来解析指令,这个刚好能完成我们的需求,所以我们末尾完成它。代码如下:
import { exec } from 'child_process'
const outWorkDir = resolve(__dirname, '../h5_landing')
const fid = uuid(8, 16)
const cmdStr = `cd ${outWorkDir} && yarn build ${fid}`
// ...exec相关代码
const filePath = resolve(__dirname, '../h5_landing/src/assets/config.json')
const res = WF(filePath, data)
exec(cmdStr, function(err,stdout,stderr){
if(err) {
// 错误处置
} else {
// 成功处置
}
})
以上代码我们不难了解,我们只需求定义好打包的指令字符串(方式和命令行操作简直分歧),然后传入给exec的第一个参数,他就会帮我们解析字符串并执行对应的命令行指令。在执行完成之后,我们可以依据回调函数(第二个参数)里的参数值来判别执行结果。整个进程是异步的,所以我们不用担忧阻塞成绩,为了实时反应进度,我们可以用socket来将进度信息推送到阅读器端。
4.完成音讯实时推送在下面引见的 exec完成解析并执行命令行指令 中还有一些细节可以优化,比如代码执行进程的反应,执行形状的反应。由于我们用的是异步编程,所以央求不会不断等候,假设不采取任何优化措施,用户是不能够知道何时代码打包编译完成, 也不知道代码能否编译失败,所以这个时分会采取几种常用的方案: 客户端央求长轮询 postmessage音讯推送 * websocket双向通讯
很清楚运用websocket双向通讯会更适宜本项目。这里我们直接运用社区比较火的由于官网上有很多运用引见,这里笔者就不逐一阐明了。我们直接看业务里的代码运用:
// node端
exec(cmdStr, function(err,stdout,stderr){
if(err) {
console.log('api error:'+stderr);
io.emit('htmlFail', { result: 'error', message: stderr })
} else {
io.emit('htmlSuccess', { result: dest, message: stderr })
}
})
// 阅读器端
const socket = io(serverUrl);
// ...省略其他业务代码
useEffect(() => {
socket.on('connect', function(){
console.log('connect')
});
socket.on('htmlFail', function(data){
// ...
});
socket.on('disconnect', function(e){
console.log('disconnect', e)
});
}, [])
这样我们就能完成效劳器义务流的形状实时反应给阅读器端了。
5. 运用jszip完成效劳端紧缩文件并支持前端下载zip包 (责任编辑:admin)