<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0
    var path = require('path');
    var fs = require('fs');
    var vm = require('vm');
    var os = require('os');

    /**
     * 格式化縮進的個數
     
    */
    function toIndent(indent) {
        
    var s = [];
        
    for (var i = 0; i < indent; i++) {
            s.push('\t');
        }
        
    return s.join('');
    }

    /**
     * 將數組對象轉換成原始字符串
     
    */
    function array2string(arr, indent) {
        
    var s = ['[', os.EOL], hasProp = false;
        
    for (var i = 0; i < arr.length; i++) {
            
    if (!hasProp) {
                hasProp 
    = true;
            }

            s.push(toIndent(indent 
    + 1));

            
    var item = arr[i];
            
    var itemtp = typeof(item);
            
    if (itemtp === 'object') {
                
    if (item instanceof Array) {
                    s.push(array2string(item, indent 
    + 1));
                } 
    else {
                    s.splice(s.length 
    - 22);
                    s.push(object2strng(item, indent).trim());
                }
            } 
    else {
                s.push(JSON.stringify(item));
            }
            s.push(',');
            s.push(os.EOL);
        }
        
    if (hasProp) {
            s.splice(s.length 
    - 21);
        }
        s.push(toIndent(indent));
        s.push(']');
        
    return s.join('');
    }

    /**
     * 將對象轉換成原始字符串
     
    */
    function object2strng(obj, indent) {
        
    var s = ['{', os.EOL], hasProp = false;

        
    for (var o in obj) {
            
    if (!hasProp) {
                hasProp 
    = true;
            }
            s.push(toIndent(indent 
    + 1));
            s.push(JSON.stringify(o));
            s.push(':');

            
    var tp = typeof(obj[o]);
            
    if (tp === 'object') {
                
    if (obj[o] instanceof Array) {
                    s.push(array2string(obj[o], indent 
    + 1));
                } 
    else {
                    s.push(object2strng(obj[o], indent 
    + 1));
                }
            } 
    else if (tp === 'function') {
                s.push(obj[o].toString());
            } 
    else {
                s.push(JSON.stringify(obj[o]));
            }
            s.push(',');
            s.push(os.EOL);
        }
        
    if (hasProp) {
            s.splice(s.length 
    - 21);
        }
        s.push(toIndent(indent));
        s.push('}');
        
    return s.join('');
    }

    //提取正式代碼里的requirejs的配置字符串,并動態執行轉換成json對象; 修改相關的值信息為下邊的打包操作做準備; 并將配置信息再轉成字符串形式寫到臨時文件下
    var mainPath = path.resolve(process.cwd(), '../js/main.js');
    var mainContent = fs.readFileSync(mainPath, 'utf-8').replace(/(requirejs\.config\()?([^)]]*)(\);)?/gm, '$2');
    vm.runInThisContext('
    var mainCfg= ' + mainContent);//將提取的字符串轉成mainCfg對象
    mainCfg.baseUrl = '/static/js/dist/lib';
    var nMainCfgStr = 'requirejs.config(' + object2strng(mainCfg, 0+ ');';//重新生成main.js配置文件,為下邊的打包做準備
    var buildPath = path.resolve(process.cwd(), './main.js');
    fs.writeFileSync(buildPath, nMainCfgStr);
    console.log('write temp file main.js fininshed');

    //打包的配置信息
    var buildJson = {
        appDir: '..
    /js',
        baseUrl: 'lib',
        mainConfigFile: '.
    /main.js',
        dir: '..
    /js/dist',
        modules: [{
            'name': '..
    /main',
            include: []
        }]
    };
    for (var p in mainCfg.paths) {//這里提取所有的依賴模塊,打包時放到main.js文件下
        buildJson.modules[0].include.push(p);
    }

    var buildPath = path.resolve(process.cwd(), './build_main.json');
    fs.writeFileSync(buildPath, object2strng(buildJson, 
    0));//生成打包配置文件
    console.log('wirte temp file build_main.json fininshed');



    寫一批處理文件build.bat
    @echo off
    node build.js
    node r.js -o build_main.json
    @pause
    執行就可以了
    posted on 2016-11-01 16:24 SIMONE 閱讀(3896) 評論(0)  編輯  收藏 所屬分類: nodejs
    主站蜘蛛池模板: 18禁成年无码免费网站无遮挡 | 亚洲视频在线一区二区| 亚洲首页国产精品丝袜| 蜜臀AV免费一区二区三区| 久久亚洲AV成人出白浆无码国产| 国内精品免费久久影院| 亚洲av无码国产精品色午夜字幕 | 84pao强力永久免费高清| 无码欧精品亚洲日韩一区| 久草免费福利在线| a色毛片免费视频| 成人片黄网站色大片免费| 亚洲欧洲日产国码无码久久99| 精品人妻系列无码人妻免费视频| 亚洲综合国产精品第一页| 91视频免费观看| 亚洲蜜芽在线精品一区| 日本成年免费网站| 色天使亚洲综合一区二区| 久久亚洲精品无码播放| 久久成人免费电影| 亚洲精品在线免费看| 在线jyzzjyzz免费视频| 男女猛烈无遮掩视频免费软件| 亚洲熟女少妇一区二区| 久久免费看黄a级毛片| 亚洲夂夂婷婷色拍WW47| 亚洲精品tv久久久久| 亚洲国产精品免费视频| 亚洲日韩国产一区二区三区在线| 免费看一级做a爰片久久| baoyu122.永久免费视频| 亚洲国产成人久久综合一区| 精品国产一区二区三区免费看| 人碰人碰人成人免费视频| 中文字幕亚洲综合久久| 日韩免费电影在线观看| 成人性做爰aaa片免费看| 亚洲看片无码在线视频| 国产成人毛片亚洲精品| xxxxwww免费|