小程序预览码怎么生成
本篇内容主要讲解"小程序预览码怎么生成",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"小程序预览码怎么生成"吧!
撸起袖子从后端开始
为了省事,直接把前后端的东西放在一起。
先看看入口文件index.js,从这里我们可以知道后端要做两件事情,第一要能访问到前端build出来的静态资源,第二要能与前端通过HTTP接口进行交互。见代码:
const path = require('path')const Koa = require('koa')const koaStatic = require('koa-static')const bodyParser = require('koa-bodyparser')const router = require('./router')const app = new Koa()const port = 9871app.use(bodyParser())// 处理静态资源 这里是前端build好之后的目录app.use(koaStatic( path.resolve(__dirname, '../dist')))// 路由处理接口app.use(router.routes()).use(router.allowedMethods())// 监听端口app.listen(9871)console.log(`[demo] start-quick is starting at port ${port}`)
静态资源方面的话使用koa-static即可,重点是怎样给前端提供接口,这就要看路由了。
server/router/index.js
const Router = require('koa-router')// 业务逻辑const wx = require('../controller/wx')const router = new Router({ // 接口前缀 比如open接口 请求路径就是/api/open prefix: '/api'})router.get('/open', wx.open) .get('/login', wx.login) .get('/preview', wx.preview) .get('/build', wx.build)module.exports = router
这里可以清晰看到,后端提供了四个接口,但具体每个接口的业务逻辑则封装在controller里的wx.js,如果以后还有别的业务逻辑,就在controller加相应的模块即可。
server/controller/wx.js
// 微信开发者工具接口调用逻辑const {open, login, preview, build} = require('../utli/wxToolApi')// 处理成功失败返回格式的工具const {successBody, errorBody} = require('../utli')class WxController { /** * 根据环境对mpvue项目进行打包 * @returns {Promise} */ static async build (ctx) { // 前端传过来的get参数 const query = ctx.request.query if (!query || !query.env) { ctx.body = errorBody(null, '构建项目失败') return } const [err, data] = await build(query.env) ctx.body = err ? errorBody(err, '构建项目失败') : successBody(data, '构建项目成功') } /** * 打开微信开发者工具 * @returns {Promise } */ static async open (ctx) { const [err, data] = await open() ctx.body = err ? errorBody(err, '打开微信开发者工具失败') : successBody(data, '打开微信开发者工具成功') } /** * 登录微信开发者工具 * @returns {Promise } */ static async login (ctx) { const [err, data] = await login() ctx.body = err ? errorBody(err, '登录二维码返回失败') : successBody(data, '登录二维码返回成功') } /** * 查看预览码 * @returns {Promise } */ static async preview (ctx) { const [err, data] = await preview() ctx.body = err ? errorBody(err, '预览二维码返回失败') : successBody(data, '预览二维码返回成功') }}module.exports = WxController
为了代码更加清晰,这里将具体操作微信开发者工具的接口逻辑抽到util/wxToolApi.js里去了,仅仅处理怎样以统一格式返回给前端。
util/wxToolApi.js
const {promiseWrap, successBody, errorBody} = require('../utli')const {INSTALL_PATH, PROJECT_PATH, PORT_PATH, PORT_FILE_NAME, HOST} = require('../const')const {readFile} = require('../utli/nodeApi')const shell = require('shelljs')const axios = require('axios')module.exports = { /** * 根据环境对mpvue项目进行打包 * @param env [doc, pre, prd] * @returns {*} */ build (env) { return promiseWrap(new Promise((resolve, reject) => { // 进入项目目录 shell.cd(PROJECT_PATH) // 执行打包命令 shell.exec(`npm run build:${env}`, function (code, stdout, stderr) { resolve(stdout) }) })) }, /** * 打开微信开发者工具 * @returns {*} */ open () { return promiseWrap(new Promise((resolve, reject) => { // 进入项目目录 shell.cd(INSTALL_PATH) // 执行微信开发者工具接口"命令行启动工具" shell.exec(`cli -o ${PROJECT_PATH}`, function (code, stdout, stderr) { if (stderr) return reject(stderr) resolve(stdout) }) })) }, /** * 获取微信开发者工具端口号 * @returns {Promise<*>} */ async getPort () { shell.cd(PORT_PATH) // http 服务在工具启动后自动开启,HTTP 服务端口号在用户目录下记录,可通过检查用户目录、检查用户目录下是否有端口文件及尝试连接来判断工具是否安装/启动。 const [err, data] = await readFile(PORT_FILE_NAME) return err ? errorBody(err, '读取端口号文件失败') : successBody(data, '读取端口号文件成功') }, /** * 微信开发者工具进行登录 * @returns {*} */ login () { return promiseWrap(new Promise(async (resolve, reject) => { // 获取端口号 const portData = await module.exports.getPort() if (portData.code !== 0) { reject(portData) return } const port = portData.data axios.get(`http://${HOST}:${port}/login?format=base64`) .then(res => { resolve(res.data) }) .catch(e => { reject(e) }) })) }, /** * 微信开发者工具获取预览码 * @returns {*} */ preview () { return promiseWrap(new Promise(async (resolve, reject) => { const portData = await module.exports.getPort() if (portData.code !== 0) { reject(portData) return } const port = portData.data axios.get(`http://${HOST}:${port}/preview?format=base64&projectpath=${encodeURIComponent(PROJECT_PATH)}`) .then(res => { resolve(res.data) }) .catch(e => { reject(e) }) })) }}
这里有一点需要注意,为什么只有open接口需要用命令行调用方式?那是因为HTTP调用方式必须加端口,比如open接口
# 打开工具http://127.0.0.1:端口号/open# 打开/刷新项目http://127.0.0.1:端口号/open?projectpath=项目全路径
如果你根本都没有打开微信开发者工具,在以下地方就会找不到端口:
端口号文件位置:macOS : ~/Library/Application Support/微信web开发者工具/Default/.ideWindows : ~/AppData/Local/微信web开发者工具/User Data/Default/.ide
所以作为一个全自动化打码工具,怎么可能还要自己去手动打开微信开发者工具呢!
前端
后端的东西基本就那么多,终于到前端了,前端十分简单,就不多说了:
点击预览 请先登录 预览二维码 这里有一个坑就是,login返回的base64是带了data:image/jpeg;base64,前缀的,所以可以直接放到img的src里,但是获取预览码的preview返回的却没有这个前缀!所以需要自己加上去,就是那个base64Prefix:_'data:image/png;base64,'
最后
其实到这里已经基本实现了整个打码功能,但如果真的要可以用还有很多事情没做。
部署到测试机器上。虽然可以直接用自己的机子作为部署这个工具的机器,但这实在是有点……如果要部署到测试机器上,有一个问题就是,微信开发者工具依赖图形界面,而服务器一般是命令行,虽然有 https://github.com/cytle/wech... 这样的项目移植微信开发者工具到linux,但这种部署方式似乎还是怪怪的。
假设完成了上述部署,进行小程序项目打包的环节需要修改一下,变成根据选择的环境,到相应的代码仓库(比如gitlab)拉取该环境的最新代码,然后进行安装依赖才能执行打包命令。
既然都做到这一步了,也不差把上传小程序也加上去,微信开发者工具接口也有提供,这样一来整个测试打码到上线的步骤都有了。
到此,相信大家对"小程序预览码怎么生成"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
工具 开发者 开发 接口 项目 前端 口号 二维 二维码 环境 登录 成功 文件 目录 程序 命令 就是 逻辑 代码 数据 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 大型数据库一定要有温控吗 中山大学数据库有哪些 计算机四级数据库难吗 sp软件开发工程师 绿盟科技大学网络安全研讨 计算机和网络技术的认识 淮南门店管理软件开发定制公司 软件开发自我介绍500字 北京上门软件开发多少钱 打开数据库安全性 服务器管理口夯死 个体工商户 网络技术 南通对日软件开发 饥荒联机服务器无应答为什么 系统数据库技术 像素工厂怎么搜索服务器 旅游定制行程数据库 软件开发人员岗位申请 多玩数据库 下载 数据库sql语句编写 我的世界服务器风云视频 相城区大数据软件开发服务电话 重庆超频服务器厂家直销 虚空之境服务器登录不进去 如何用服务器赚钱 联想中国移动国产服务器 动态添加数据库字段 校园网连接客户端服务器失败 k8s创建数据库 mycard服务器