全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

微信小程序 devtool隐藏的秘密

微信小程序 devtool

笔者参与的小程序项目开发也进入尾声了,坑也踩得七七八八,对于哪些没有涵盖和深入使用的功能笔者就不班门弄斧了。

前几篇文章讲了那么多细节也好,策略也好,都是应用层面的东西。自微信小程序公布以来就有先行者不断的探索小程序背后的运行机制。小程序的开发语法和API与前端工程师熟悉的html/js/css非常相似,所以会令很多人疑惑小程序与普通的HTML5应用到底有什么区别。这篇文章其实将小程序的基本运行机制剖析的差不多了,简单概括就是:

  • 大部分内容会转化为常规的html/css/js,并使用webview渲染;
  • 部分组件调用native实现功能。

既然已经有先行者得出了结论,为啥还要写这篇文章呢?当然是为了凑齐七篇啦,哈哈哈...

开玩笑!这篇文章的目的不是重复别人的结论,而是将笔者研究小程序开发工具源码的一些心得和结论记录下来,以方便大家后续更深入的探索。

看看devtool的源码有什么

第一步是找到小程序devtool的源码,以mac系统为例,源码的打开方式如下图:

其他的文件不用理会,我们要研究的主要代码在Content/Resources/app.nw/dist目录下,这个目录包括devtool的功能代码以及对小程序进行执行、编译、打包、上传等功能的代码。当然,这些代码都是经过混淆的,读起来还挺费劲(摊手~

需要着重注意的是Content/Resources/app.nw/dist/weapp目录,以及commit和trans两个子目录:

从文件的命名上大致可以猜到每个文件对应的功能:

  • trans目录下的文件负责将小程序源码进行一系列的转换,最终被转换为浏览器可识别的html、css以及js;
  • commit目录下的文件负责执行小程序的构建、打包、上传等功能。

既然我们知道小程序会进行构建打包流程,想得知小程序运行机制最好的办法就是研究构建完毕之后的代码。有了这个目标之后,下一步就是查看devtool的日志获取小程序构建之后的代码存放位置。

找到日志文件

Content/Resources/app.nw/dist/common/log/log.js是负责管理devtool日志功能的文件,其中有这样一段代码:

const a = require('fs'),
  b = require('log'),
  c = require('path'),
  d = require('../../config/dirConfig.js'),
  e = d.WeappLog;

其中e便是日志文件的存放目录,然后我们追溯到config/dirConfig.js中发现目录路径是由nw.App.getDataPath()生成的,这个函数是node-webkit提供的API,生成结果的规则在不同的操作系统下有差异,可惜笔者并没有找到相关的说明(沮丧)。

但是此次代码的探索并非没有收获,起码我们知道了日志文件存放的目录名为“WeappLog”,我们可以使用强大的命令行从硬盘中搜索此目录:

mdfind WeappLog

大家可以参考这篇文章了解mdfind命令的用法

从输出结果可以得知日志文件在Mac系统的存放目录为/Users/<用户名>/Library/Application Support/微信web开发者工具/WeappLog。进入目录后就会发现很多以.log为后缀的日志文件:

上传小程序的流程打包后的小程序在哪里

找到日志文件后便可以从devtool的执行日志中获取小程序被构建后的代码存放位置。当然,第一步是要讲小程序进行构建,操作方法是在小程序开发工具的“项目”菜单”中点击”预览“:

成功后再日志文件中会出现这么一行记录:

[Wed Jan 18 2017 15:20:24 GMT+0800 (CST)] INFO pack.js create /Users/
<用户名>/Library/Application Support/微信web开发者工具/Weappdest/1484724024071.wx success!

/Users/<用户名>/Library/Application Support/微信web开发者工具/Weappdest/1484724024071.wx就是构建完成的小程序代码!赶紧去看看!

兴致勃勃的找到/Users/<用户名>/Library/Application Support/微信web开发者工具/Weappdest/目录,然后发现:空空如也!

看来微信团队还是很谨慎的,在将小程序源码上传之后便会删除构建产出的文件。但是这点小伎俩难不倒程序员!任何行为都是程序执行的,我们直接修改相关的程序代码就可以了嘛!

做点小手脚,看看打包后的代码

Content/Resources/app.nw/dist/weapp/commit/upload.js中有一段这样的代码:

const a = require('fs'),
  j = require('rmdir');
  //省略无关代码
 _exports.uploadForTest = (l, m, n) => {
  //省略无关代码
  c(l, {
   noCompile: !0
  }, (s, t) => {
   if (s) return void n(s.toString());
   let u = d.join(k, `${+new Date}.wx`);
   b(t, u, (v, w) => {
    j(t, (A, B, C) => {});
    //省略无关代码
    if (y > q) return a.unlink(u, () => {}), void n(`代码包大小为 ${y} kb,超出限制 ${y-q} kb,请删除文件后重试`);
    //省略无关代码
})

上述代码省略了一些与我们当前讨论内容无关的代码,感兴趣的读者可以自行研究。

上述代码有两个删除文件的行为:

rmdir:删除构建完成但是并未打包的代码目录;

fs.unlink:删除打包完成的文件。

将执行删除的代码注释以后,再通过小程序开发者工具进行预览上传操作后,在上文中我们得到的目录中便会留下构建以及打包后的文件了。如下:

其中以.wx为后缀的文件是经过打包后的文件,也就是上传到微信服务器的文件。其同名的目录文件夹是构建完成且打包之前的源文件。

config.js为例,构建后的代码如下:

'use strict';
Object.defineProperty(exports, '__esModule', {
 value: true
});
exports.default = {
 basePath: 'https://djtest.cn',
 fileBasePath: 'https://djtest.cn'
};

其实仅仅将ES6的语法转译成了ES5语法。其余的wxml、wxss以及js文件基本也是这样的状态,所以可以推断源码上传至微信服务器后会执行真正的构建动作,开发工具只执行了一些简单地构建行为。

虽然笔者并未从这份代码中得到全部的真相,但希望这篇文章能够给后续的探索者提供一些微薄的帮助。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# 微信小程序  # devtool  # devtool详解  # 小程序  # 分享vue.js devtools遇到一系列问题  # vue开发调试神器vue-devtools使用详解  # 解决Intellij IDEA 使用Spring-boot-devTools无效的问题  # 详解vue.js的devtools安装  # 详解SpringBoot配置devtools实现热部署  # springboot + devtools(热部署)实例教程  # 利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)  # Vue.js devtool插件安装后无法使用的解决办法  # 都是  # 这篇文章  # 上传  # 开发工具  # 运行机制  # 为例  # 便会  # 等功能  # 目录下  # 的是  # 有什么  # 就会  # 是在  # 班门弄斧  # 最好的  # 就有  # 就不  # 是由  # 那么多  # 很多人 


相关文章: 如何在云主机上快速搭建多站点网站?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  实现虚拟支付需哪些建站技术支撑?  开心动漫网站制作软件下载,十分开心动画为何停播?  制作销售网站教学视频,销售网站有哪些?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  广德云建站网站建设方案与建站流程优化指南  图册素材网站设计制作软件,图册的导出方式有几种?  如何用免费手机建站系统零基础打造专业网站?  金*站制作公司有哪些,金华教育集团官网?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  淘宝制作网站有哪些,淘宝网官网主页?  ,巨量百应是干嘛的?  网站制作壁纸教程视频,电脑壁纸网站?  建站之星安装提示数据库无法连接如何解决?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何在景安服务器上快速搭建个人网站?  如何选择高效便捷的WAP商城建站系统?  股票网站制作软件,网上股票怎么开户?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  制作营销网站公司,淘特是干什么用的?  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  建站主机功能解析:服务器选择与快速搭建指南  如何用已有域名快速搭建网站?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  建站之星后台管理如何实现高效配置?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  建站之星云端配置指南:模板选择与SEO优化一键生成  建站主机选购指南与交易推荐:核心配置解析  建站OpenVZ教程与优化策略:配置指南与性能提升  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  建站之星24小时客服电话如何获取?  智能起名网站制作软件有哪些,制作logo的软件?  定制建站流程解析:需求评估与SEO优化功能开发指南  如何选购建站域名与空间?自助平台全解析  建站主机服务器选购指南:轻量应用与VPS配置解析  建站主机数据库如何配置才能提升网站性能?  建站之星代理费用多少?最新价格详情介绍  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  建站主机默认首页配置指南:核心功能与访问路径优化  如何用腾讯建站主机快速创建免费网站?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  西安大型网站制作公司,西安招聘网站最好的是哪个?  如何选择适合PHP云建站的开源框架?  如何通过虚拟主机快速完成网站搭建?  如何快速生成专业多端适配建站电话?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。