<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
    主站蜘蛛池模板: 亚洲欧洲久久精品| 亚洲欧洲视频在线观看| 亚洲另类无码一区二区三区| 中文字幕免费高清视频| 亚洲国产二区三区久久| 久久精品视频免费播放| 67pao强力打造67194在线午夜亚洲| 成人性做爰aaa片免费看| 亚洲av日韩综合一区在线观看| 国产成人免费ā片在线观看老同学 | 亚洲av无码成h人动漫无遮挡| 国产高潮久久免费观看| 久久亚洲欧洲国产综合| 99精品视频免费| 久久亚洲一区二区| 97青青草原国产免费观看| 亚洲综合久久成人69| 91在线品视觉盛宴免费| 亚洲最大无码中文字幕| 免费**毛片在线播放直播| 亚洲免费日韩无码系列| 亚洲成AV人片在WWW色猫咪 | 日日狠狠久久偷偷色综合免费| 亚洲午夜福利精品无码| 国产成人一区二区三区视频免费| 亚洲一区中文字幕久久| 国产成人免费爽爽爽视频| 亚洲AV无码AV吞精久久| 国产a v无码专区亚洲av| 污污网站18禁在线永久免费观看| 亚洲a∨无码男人的天堂| 四虎免费久久影院| 免费高清国产视频| 亚洲影院天堂中文av色| 久久精品亚洲福利| 中文字幕免费在线观看| 国产91成人精品亚洲精品| 亚洲精品亚洲人成人网| 久久精品女人天堂AV免费观看| 青青草国产免费国产是公开| 久久久亚洲AV波多野结衣|