VueCli番外之recast
初次见面:
![](/assets/blank.gif)
这个文件用来合并JS中的导出对象:
![](/assets/blank.gif)
例如以上内容会被转化成:
![](/assets/blank.gif)
看上去是不是只是将exports的值做了合并,似乎我们有另外一种方法可行:即将该文件读取并将module.exports的值用对象合并再重新写入文件。
recast
recast的魅力在于它能帮助你拆分代码并改造任意位置和结构的代码,在很多流行框架中均有用到如:webpack、vue-cli这类前端自动化的工具等。
还是以上代码,假如它是这样的:
![](/assets/blank.gif)
我们的任务是修改config.css.modules为false:
const value = {foo: true}transform(value,source)
transform即开头处的文件主体
简单使用
const recast = require("recast");
const ast = recast.parse(source)recast.types.visit(ast, {visitAssignmentExpression (path) {const { node } = pathconsole.log(node)this.traverse(path)}
})
以上代码展示了查找定义表达式并打印在控制台
this.traverse(path); 必要-用于结束执行
想要加深对recast了解,必须要先熟悉AST(抽象语法树),只有深入AST,你才能用好recast,因为recast就是操作AST的工具,如果你都不知道这个工具是用来干嘛的,你怎么能用好它呢?
关于AST,网上有很多文章,在此就不赘述了。
源码
打开开头部分的源码,相信此时你已经知道这个文件的大概了
module.exports = function extendJSConfig (value, source) {const recast = require('recast')const stringifyJS = require('./stringifyJS')let exportsIdentifier = nullconst ast = recast.parse(source)recast.types.visit(ast, {visitAssignmentExpression (path) {const { node } = pathif (node.left.type === 'MemberExpression' &&node.left.object.name === 'module' &&node.left.property.name === 'exports') {if (node.right.type === 'ObjectExpression') {augmentExports(node.right)} else if (node.right.type === 'Identifier') {// do a second passexportsIdentifier = node.right.name}return false}this.traverse(path)}})......
}
VueCli番外之recast相关推荐
- Android开发:第五日番外——过时的函数和被横杠的函数
零.... 好吧,估计以后每篇都会来个零开头进行吐槽了.话说第五日正番依旧难产中,先把番外给写了.番外嘛都是一些小的知识点,未免遗忘,特此记录.今天发现关于设计模式,本人零概念啊,这是什么概念啊,虽然 ...
- 多线程番外之真假*程
多线程番外之真假*程 //写在之前 "有没有同学心里有疑问的,多线程才涉及那么很浅显的一点,为什么会惊现番外这一说呢,所谓番外,就是对正文做的补充,通常不录入正文,是作者主动在题材中加入的部 ...
- java优先队列的入队函数,算法与数据结构番外(1):优先队列
这是算法与数据结构番外系列的第一篇,这个系列未来的主要内容是补充一些与算法与数据结构相关的知识,这些知识比较零碎,同时也与正传关系密切,往往需要阅读了正传的相关内容以后,才能较好的理解这部分内容.如果 ...
- python的类和对象——类的静态字段番外篇
什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是它.后面大多数情况可能会简称为类变量.): 我们看上面的例子,这里的money就是静态字段,首 ...
- [zt]数学之美番外篇:平凡而又神奇的贝叶斯方法
数学之美番外篇:平凡而又神奇的贝叶斯方法 Tags: 数学, 机器学习与人工智能, 计算机科学 save it69 saved tags: 贝叶斯 math bayesian algorithm 数学 ...
- 『中级篇』docker之wordpress容器SSL(番外篇)(78)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』docker之wordpress容器SSL(番外篇)(78) 搞了2天终于搞定了,现在分享给大家. apache2 ...
- 『中级篇』docker之虚拟机创建vagrant技巧(番外篇)(81)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』docker之虚拟机创建vagrant技巧(番外篇)(81) 之前一直用的原生的centos7的源镜像安装虚拟机,然 ...
- yxy和志愿者小姐姐番外篇之大宝宝123追番记(补题,淘汰赛)
1264: yxy和志愿者小姐姐番外篇之大宝宝123追番记 时间限制: 1 Sec 内存限制: 64 MB ...
- 转:数学之美番外篇:平凡而又神奇的贝叶斯方法 收藏
为什么80%的码农都做不了架构师?>>> 转自:http://blog.csdn.net/pongba/archive/2008/09/21/2958094.aspx 数学之美 ...
最新文章
- linux 笔记 一
- vue实现多个元素或多个组件之间动画效果
- 远程办公时,有哪些提高沟通效率的技巧?
- arcgis server for flex中文乱码问题(转)
- AI发展进入2.0时代!英特尔在落地中总结4大经验、分享7个案例
- 【pmcaff】搞清楚产品经理的6大问题,街边卖煎饼也能火
- iOS自定义弹出视图、收音机APP、图片涂鸦、加载刷新、文件缓存等源码
- ECS开放批量创建实例接口RunInstances
- GetModuleHandle
- RMQ_第一弹_Sparse Table
- Linux——常用命令
- mongovue mysql_MongoDB 客户端 MongoVue
- golang tailf日志组件的基本使用
- 腾讯云即时通讯im之获取userSig
- 2020 年第一届辽宁省大学生程序设计竞赛
- 【毕业设计】基于单片机的手势检测识别系统 - arduino 物联网嵌入式
- nginx启动时指定prefix(覆盖编译时的 --prefix)
- 【BZOJ 1305】[CQOI2009]dance跳舞
- 手机屏幕弹幕纵向滚动,添加弹幕实时滚动html demo
- 抖音爆款小游戏《我飞刀玩得贼6》性能优化案例分享
热门文章
- 【hexo系列】02.hexo和obsidian实现笔记丝滑
- 老年祝福短视频微信小程序源码下载支持流量主
- [视频]学打羽毛球41-45
- 震惊:广东最破烂学校是什么样?!
- 速腾聚创32线雷达雷达,RVIZ显示激光点云
- 学生如何掌握学习诀窍?这招很实用
- 吓得我抱起了抱着我的小鲤鱼的我(递归思想)C语言
- 网吧40台无盘服务器的配置,带80-120台的网咖无盘服务器配置 | 专业网吧维护
- Linux 查看目录下的文件数量
- protobuf3 import的使用和多proto代码生成和cmake中引用protobuf