• 使用node.js,实现简单的JS文件合并小工具


    最近在学node.js,之前由于实验室项目需要,用C#写了个JS代码压缩合并的小插件,想想正好可以用node重构,来练练手。本人node新手,大神止步O(∩_∩)O

    上代码:

    /*符合CommonJs规范*/
    var writePath = 'min.js',/*默认输出到本目录min.js文件里*/
        fs = require('fs'),
        r1 = /^(.+)$/mg,/*分行*/
        r2 = /s{2,}/g,/*去空格*/
        r3 = /([^\])//.*/g,/*去行注释*/
        r4 = //*.*?*//g,/*去块注释*/
        str = '';
    
    module.exports.run = function(input){
        
        input.forEach(function(item){
            /*合并对顺序有需求,所以同步读取文件*/
            var data = fs.readFileSync(item, 'utf8'),
                lines = data.match(r1);/*行数组*/
             /*拼成一串*/
            lines.forEach(function(item){
                item = item.replace(r3, function($1, $2){return $2;});
                str = str + item;
    
            });
        });
        
        str = str.replace(r2,' ').replace(r4, '');   
        /*异步写入到目标文件*/
        fs.appendFile(writePath, str, {encoding: 'utf8'}, function(err){
            if(err) {throw err};
            console.log('complete........');
        });
    };

    内容虽少,不过还是想借此适应一下commomJS的模块化编程,所以就分出上面这个模块了^_^,文件名:compress.js。

    下面是引用它的代码:

    var a = require('./compress.js');/*加载compress模块 ‘./’表示相同目录下查找本地文件*/
    
    var input = process.argv;/*获取控制台输入数组(process引用当前进程)*/
    
    a.run(input.slice(2)/*忽略前数组前两个*/);

    文件名:run.js

    控制台运行:

    $ node run a.js b.js c.js....

    即可把a.js b.js c.js (相对路径,也可使用绝对路径,路径定位和其他语言相似)压缩到默认的min.js里了。

    当然,这个压缩还不够完善,空格去的不够完全,也没有基于流(还好压缩的JS文件都不大^_^),和专业的压缩插件如:uglify.js没法比╮(╯▽╰)╭不过练练手还是可以的......

  • 相关阅读:
    javascript:void(0)是什么意思 天高地厚
    C#开发 WinForm中窗体显示和窗体传值相关知识
    c#在WinForm中重写ProgressBar控件(带%的显示)
    flash在C#中的应用
    c# winform 关于DataGridView的一些操作
    winform中输入数据的验证
    RadioButton和CheckBox
    Manifest文件的配置
    简单程序用于熟悉Activity生命周期
    Activity的生命周期
  • 原文地址:https://www.cnblogs.com/liubingblog/p/4341767.html
Copyright © 2020-2023  润新知