设为首页 收藏本站
查看: 948|回复: 0

[经验分享] 【NodeCC】NodeJs开发的脚本压缩和combo工具

[复制链接]

尚未签到

发表于 2017-2-22 07:57:30 | 显示全部楼层 |阅读模式
对于Web前端的开发而言,为了降低文件大小,js文件和css文件的压缩和组合几乎是默认的规矩。

我们利用YUI Compressor 和 google Compiler 可以很容易的完成文件的压缩。 甚至 yui compressor 本身都已经支持 多文件的批量压缩。

但是,为了更好的处理这些机械化的事情,我们通常还是需要脚本来辅助,让这些工作可以更好的自动化,可配置化。

网上有很多类似的脚本工具,或者有的也已经编译成了可视化的工具来使用。

我自己以前也写过python版本的,也用过同事写的类似的脚本,基本也都是python版本的。鉴于大多数前端的攻城师们对js更为熟悉,所以,这里也提供一个简易的nodejs 版本的。下午花了3个小时写的。

NodeCC –> Node Compressor and Comboer

代码很简单,基本就是读文件,写文件,调用系统jar命令 使用 yuicompressor 压缩文件。
源码托管在:github.com/hongru/nodeCC 上,100行左右。

编码中需要注意的几个地方:

nodejs中fileSystem buffer的概念,简单的可以理解成文本数据流,所以,为了得到我们常见的文本,注意 readFile 后 toString的使用。
生成新文件时,路径是否存在的判断,如果不存在,生成指定目录时,由于node本身的mkdir不支持多级目录,所以这里需要自己来处理多级目录的递归生成。
有两种方式,一种是利用child_process 创建一个子进程调用系统命令 mkdir -p.
另一种就是分析路径,一级一级递归创建目录。代码参考 https://gist.github.com/2817910
双击选中源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/* mkdir -p for node */
var fs = require('fs'),
    path = require('path');

function mkdirpSync (pathes, mode) {
    mode = mode || 0777;
    var dirs = pathes.trim().split('/');
    if (dirs[0] == '.') {
        // ./aaa
        dirs.shift();
    }

    if (dirs[0] == '..') {
        // ../aaa
        dirs.splice(0, 2, dirs[0] + '/' + dirs[1]);
    }

    dirs.length && mkdir(dirs.shift());
    // mkdir
    function mkdir (d) {
        if (!path.existsSync(d)) {
            fs.mkdirSync(d, mode);
        }

        dirs.length && mkdir(d + '/' + dirs.shift());
    }
}

// eg
//mkdirpSync('hongru/me');
通过child_process 的spawn 来调用系统命令,比如 ls, java 等。然后通过stdout 和 stderr 来监听获得 命令所返回的log或者error信息。
【使用方法】

当然,因为是nodejs版本的,所以自然需要安装nodejs,官方有提供详细说明
因为用了jar包 yuicompressor.jar, 所以,需要安装 JAVA的sdk,安装过程也很简单,不会的搜一下即可。
最后,关于config.json 文件的配置,很简单,都是两个字段,“source”和“target”,source代表源路径文件,target表示压缩之后生成的文件路径。
支持目录级别。
另外,如果source字段为一个数组的话,会将这个数组里面的文件按照顺序合并,然后压缩生成到指定target的路径。所以,config.json看起来会像是这个样子:
双击选中源代码
{
    "css-test": {
        "source": "test/css/",
        "target": "test/public/css/"
    },
    "normal-file-compress": {
        "source": "test/test.js",
        "target": "test/test.min.js"
    },
    "normal-dir-compress": {
        "source": "test/js/",
        "target": "test/public/js/"
    },
    "compress-and-merge": {
        "source": [
            "test/js/a.js",
            "test/js/b.js"
        ],
        "target": "test/public/js/ab.js"
    }
}
将带有 yuicompressor.jar 的tools/ ,主脚本 nodecc.js, 以及配置好的config.json 放置在同一目录下,然后执行
双击选中源代码
1
node nodecc.js
即可。

好了,工具很简单,代码也很简单,希望能给有需要的同学提供一点点帮助


http://www.alloyteam.com/2012/05/nodecc-version-of-nodejs-script-compression-and-compo-tools/#more-1368

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-345400-1-1.html 上篇帖子: NodeJS模块格式在浏览器中的尝试 下篇帖子: nodejs和java中的des/3des加密解密
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表