jdists 强大的代码块预处理工具
jopen
9年前
背景
软件发布流程
通常软件发布时会将源文件做一次「预处理」再编译成可执行文件,才发布到市场。
「预处理」的目的主要是出于以下几点
- 配置线上运行环境,如调试服务地址需变更为实现线上地址;
- 减少执行程序的大小,移除没有使用的代码或资源并压缩;
- 增加逆向工程的成本,给代码做混淆(包括改变标识符和代码结构),降低可读性;
- 移除或增加调试功能,关闭或开启一些特权后门。
一些 IDE 已在「编译」时集成了「预处理」功能。
什么是 jdists
jdists 是一款强大的代码块预处理工具。
什么是「代码块」(code block)?
通常就是注释或注释包裹的代码片段,用于表达各种各样的含义。
举个栗子
- TODO 注释,表示代码中待完善的地方
/* TODO 功能待开发 */
- wiredep 注释,表示引入 bower 组件依赖的 css 资源
<!-- bower:css --> <link rel="stylesheet" href="bower_components/css/bootstrap.css" /> <!-- endbower -->
jshint.js 顶部注释,表示版权声明
/*! * JSHint, by JSHint Community. * * This file (and this file only) is licensed under the same slightly modified * MIT license that JSLint is. It stops evil-doers everywhere: * * Copyright (c) 2002 Douglas Crockford (www.JSLint.com) * ......... */
- jshint.js 另一部分注释,表示代码检查配置项
/*jshint quotmark:double */ /*global console:true */ /*exported console */
总之,本文所指「代码块」就是有特殊意义的注释。
什么是「代码块预处理」?
指在代码编译之前,将代码文件按代码块粒度做一次编码或解析。
举个栗子,原本无效的代码片段,经过编码后变成了有效代码。
预处理前:
/*<jdists> console.log('Hello World!'); </jdists>*/
预处理后:
console.log('Hello World!');