uglify2之TreeTransformer

所有的节点的transform方法都对应同一个函数:

        node.DEFMETHOD("transform", function(tw, in_list){
            var x, y;
            tw.push(this);
            if (tw.before) x = tw.before(this, descend, in_list);
            if (x === undefined) {
                if (!tw.after) {
                    x = this;
                    descend(x, tw);
                } else {
                    tw.stack[tw.stack.length - 1] = x = this.clone();
                    descend(x, tw);
                    y = tw.after(x, in_list);
                    if (y !== undefined) x = y;
                }
            }
            tw.pop();
            return x;
        });

不同的是每个节点可以有不同的descend方法

AST_Node的descend方法为一个空函数

以下节点有自定义的descend方法

AST_LabeledStatement,AST_SimpleStatement,AST_Block,AST_DWLoop,AST_For,AST_ForIn,

AST_With,AST_Exit,AST_LoopControl,AST_If,AST_Switch,AST_Case,AST_Try,AST_Catch,

AST_Definitions,AST_VarDef,AST_Lambda,AST_Call,AST_Seq,AST_Dot,AST_Sub,

AST_Unary,AST_Binary,AST_Conditional,AST_Array,AST_Object,AST_ObjectProperty

时间: 2024-10-10 10:50:37

uglify2之TreeTransformer的相关文章

AngularJS分别RequireJS做文件合并压缩的那些坑

小心!AngularJS合并RequireJS做文件离开压缩的那些坑 小心!AngularJS合并RequireJS做文件离开压缩的那些坑,各人正在做文件离开压缩的时辰一定要注意,感乐趣的网友可以参考一下正在项目运用了AngularJS框架,用RequireJS做异步模块加载(AMD),正在做文件离开压缩时,遇到了一些坑,有些只是搞定了,但不大白原因. 那些坑1. build.js内里的paths必须跟main.js内里的保持等同. 这个build.js便是r.js运用的设置文件,而main.j

uglifyjs压缩JS的

一.故事总有其背景 年末将至,很多闲适的时间,于是刷刷微博,接触各种纷杂的信息——美其名曰“学习”.运气不错,遇到了一个新名词,uglifyjs. 据说是用来压缩JS文件的,据说还能优化JS,据说是基于node的,还据说比Google Closure Compiler更带感,哦?激起了我的好奇心.百之谷之,哟,相关的介绍还不少.然后折腾了个把小时,基本上知道了是个怎么回事. 我觉得吧,还是有些用的,即使是不是从事node开发的人,抽个小空,share之,于是就有了本文.人总有浮躁的时候,我也不例

玩转JS系列之代码加载篇

从前我们这样写js <script type="text/javascript"> function a(){ console.log('a init');}function b(){ console.log('b init'); a(); } </script> 随着功能越来越多,我们开始把js分离,使用单独的js文件来写,然后使用下面的方式引入js <script src="a.js" type="text/javascr

AMD and CMD are dead之KMDjs内核之依赖分析

有人说js中有三座大三:this.原型链和scope tree,搞懂了他们就算是js成人礼.当然还有其他不同看法的js成人礼,如熟悉js的:OOP.AP.FP.DOP.AOP.当然还听说一种最牛B的js成人礼:熟悉jQuery--=   =!因为$里面可以放下全世界,比如$("全世界")- 这篇文章主要讲KMDjs利用Uglify2去分析出一个函数的所有依赖,之后才能正确地加载相关的js文件.该文涉及到js中三座大山中的scope tree-.先看下面这段程序: function te

谈谈JavaScript代码混淆

概述: 案例:Cesium打包流程,相关技术点和大概流程 原理:代码优化的意义:压缩 优化 混淆 优化:如何完善Cesium打包流程 关键字:Cesium gulp uglifyjs 字数:2330 | 阅读时间:7min+ 1 Cesium打包流程 如果没有记错,Cesium从2016年初对代码构建工具做了一次调整,从grunt改为gulp.作为一名业余选手,就不揣测两者的差别了.个人而言,gulp和Ant的思路很相似,通过管道连接,都是基于流的构建风格,而且gulp更像是JS的编码风格,自带

【转载】【grunt整合版】30分钟学会使用grunt打包前端代码

[grunt整合版]30分钟学会使用grunt打包前端代码 grunt 是一套前端自动化工具,一个基于nodeJs的命令行工具,一般用于:① 压缩文件② 合并文件③ 简单语法检查 对于其他用法,我还不太清楚,我们这里简单介绍下grunt的压缩.合并文件,初学,有误请包涵 准备阶段 1.nodeJs环境 因为grunt是基于nodeJs的,所以首先各位需要安装nodeJS环境,这块我们便不管了http://www.cnblogs.com/yexiaochai/p/3527418.html 2.安装

requerjs 合并 优化配置

/* * This is an example build file that demonstrates how to use the build system for * require.js. * * THIS BUILD FILE WILL NOT WORK. It is referencing paths that probably * do not exist on your machine. Just use it as a guide. * * */   ({     //The

【grunt整合版】30分钟学会使用grunt打包前端代码

grunt 是一套前端自动化工具,一个基于nodeJs的命令行工具,一般用于:① 压缩文件② 合并文件③ 简单语法检查 对于其他用法,我还不太清楚,我们这里简单介绍下grunt的压缩.合并文件,初学,有误请包涵 准备阶段 1.nodeJs环境 因为grunt是基于nodeJs的,所以首先各位需要安装nodeJS环境,这块我们便不管了http://www.cnblogs.com/yexiaochai/p/3527418.html 2.安装grunt 有了nodeJs环境后,我们便可以开始搞grun

angularjs requeirjs配置相关

尝试了网上的yeoman generator 生成的脚手架项目不甚理想 npm install -g generator-angular-require yo angular-require 就不用那个了,现在在github上找来一个仔细研究下. 目录结构: 符合yeoman脚手架的基本目录结构 重点看一下 script下的目录结构 main.js /*jshint unused: vars */ require.config({ baseUrl: '../scripts', paths: {