[How-To]如何使用GNU Make 简化Google Closure Compiler的使用

漆雕和昶
2023-12-01

欢迎访问墙外地址:http://lzsblog.appspot.com/?p=299001

向StackOverflow.com的大牛致谢

这几天搞了个PHP的项目,为了节约服务器资源把大量的功能用前端的JavaScript代码实现。而你懂的,这些代码的内容是比较敏感的信息,最好不要让别人轻易的读出和理解。Google Closure Compiler在代码压缩和混淆方面做的很好,可以很好的隐藏代码逻辑。中文内容也会编码成不可读的文本。

那么,每次更改了原始JS代码之后,都要手动的更新传给前端的代码,而且要设定特定的访问规则让客户端不能访问原始JS代码。这是个很费事而且容易出错的工作。我就想能不能写一个Makefile脚本自动的更新被更改的JS代码。

说办就办

我的网站那用的是NginX + PHP,用Apache的同学只要适当的设置访问规则,问题是一样的。假设所有的前端代码存储在/js文件夹(你的HTML文件里的JS代码都从这里引用),这里我在/上创建一个/design文件夹用来存放原始代码。在NginX的配置文件里我们添加如下几行让design文件夹不能被访问。

1 location ~ ^/(design)/ {
2   deny all;
3 }
下面我们就可以在design文件中安全的编写JS代码和Makefile代码而不用担心被客户端读取到了。假设我们需要编译的代码包括thermometer.js logic.combat.js analyse.js logic.js,那么我们只需要在Makefile里写

1 filelist = thermometer.js logic.combat.js analyse.js logic.js
2 .PHONY: all
3 wp := $(foreach k, $(filelist), ../js/$(k))
4  
5 all : $(wp)
6 ../js/%.js : %.js
7     java -jar compiler.jar --js=$< --js_output_file=$@


然后把Google Closure Compiler拷贝到这个文件夹之下即可。每次更改一个或多个JS文件之后,只要在命令行输入make命令,或者在Vim的命令模式下输入:make,即可更新所有被更改过得原始JS文件对应的编译完的JS文件。

这里我是用的Google Closure Compiler,其实任意的代码混淆器都可一用这个模板,输入文件参数写$<,输出文件参数写$@即可。

转载请注明:http://lzsblog.appspot.com/?p=299001

PS:千万注意java前面是一个Tab,别直接从网页里拷过去就用了,会出错的


 类似资料: