我的工具:

打包工具:

var fs = require('fs');
var path = require('path');

// npm i zip-local
var zipper = require('zip-local');

var filePath = path.resolve('./wechatgame/res/raw-assets');

//調用文件遍歷方法  
fileDisplay(filePath);

/** 
 * 文件遍歷方法 
 * @param filePath 需要遍歷的文件路徑 
 */

fs.mkdir('./wechatgame/res/assets1', () => {
    fs.mkdir('./wechatgame/res/assets1/assets1', () => {
        fs.writeFile('./wechatgame/res/assets1/game.js', "", () => {
        })
    });
});

fs.mkdir('./wechatgame/res/assets2', () => {
    fs.mkdir('./wechatgame/res/assets2/assets2', () => {
        fs.writeFile('./wechatgame/res/assets2/game.js', "", () => {
            console.log('sucess');
        })
    });
});

let fileSize = 0;
let maxSize = 4000000;

function fileDisplay(filePath) {
    //根據文件路徑讀取文件,返回文件列表  
    fs.readdir(filePath, function (err, files) {
        if (err) {
            console.warn(err)
        } else {
            //遍歷讀取到的文件列表  
            files.forEach(function (filename) {
                //獲取當前文件的絕對路徑  
                var filedir = path.join(filePath, filename);
                //根據文件路徑獲取文件信息,返回一個fs.Stats對象  
                fs.stat(filedir, function (eror, stats) {
                    if (eror) {
                        console.warn('獲取文件stats失敗');
                    } else {
                        var isFile = stats.isFile();           // 是文件  
                        var isDir = stats.isDirectory();       // 是文件夾  
                        if (isFile) {
                            fs.stat(filedir, (error, stats) => {
                                if (fileSize < maxSize) {
                                    fileSize += stats.size;
                                    let fsNames = filedir.split('\\');
                                    let fsName = fsNames[fsNames.length - 1];
                                    let DirName = fsNames[fsNames.length - 2];
                                    let destDir = './wechatgame/res/assets1/assets1/' + DirName;
                                    fs.mkdir(destDir, () => {
                                        fs.writeFile(destDir + '/' + fsName, "", () => {
                                            fs.copyFile(filedir, destDir + '/' + fsName, () => {
                                            });
                                        })
                                    });
                                }
                                else {
                                    let fsNames = filedir.split('\\');
                                    let fsName = fsNames[fsNames.length - 1];
                                    let DirName = fsNames[fsNames.length - 2];
                                    let destDir = './wechatgame/res/assets2/assets2/' + DirName;
                                    fs.mkdir(destDir, () => {
                                        fs.writeFile(destDir + '/' + fsName, "", () => {
                                            fs.copyFile(filedir, destDir + '/' + fsName, () => {
                                            });
                                        })
                                    });
                                }
                            })
                        }
                        if (isDir) {
                            fileDisplay(filedir);  // 遞歸,如果是文件夾,就繼續遍歷該文件夾下面的文件
                        }
                    }
                })
            });
        }
    });
}

fs.readFile('./wechatgame/main.js', 'utf-8', function (err, data) {
    let data2 = data.replace("rawAssetsBase: 'res/raw-',", "rawAssetsBase: wx.env.USER_DATA_PATH + '/raw-',");
    fs.writeFile('./wechatgame/main.js', data2, () => {
    });
})

fs.readFile('./wechatgame/game.json', 'utf-8', function (err, data) {
    let data2 = data.replace(" \"subpackages\": []", "\"subpackages\": [  {\"name\": \"assets1\",\"root\": \"res/assets1\"}, {\"name\": \"assets2\",\"root\": \"res/assets2\"}]");
    fs.writeFile('./wechatgame/game.json', data2, () => {
    });
})

let data3 = "var fs = wx.getFileSystemManager(); let packageNum = 2; let unzip = (path) => { fs.unzip({ zipFilePath: path, targetPath: `${wx.env.USER_DATA_PATH}/raw-assets`, success: (res) => { console.log('success', res); packageNum--; if (packageNum == 0) { console.log('packageNum', packageNum); gameBoot(); } }, fail: (res) => { console.log(res); } }); }; fs.mkdir({ dirPath: `${wx.env.USER_DATA_PATH}/raw-assets`, success: () => { wx.loadSubpackage({ name: 'assets1', success: () => { unzip('/res/assets1/assets1.zip'); } }); wx.loadSubpackage({ name: 'assets2', success: () => { unzip('/res/assets2/assets2.zip'); } }) }, fail: () => { console.log('fail'); gameBoot(); } }); function gameBoot() { require('libs/weapp-adapter/index'); var Parser = require('libs/xmldom/dom-parser'); window.DOMParser = Parser.DOMParser; require('libs/wx-downloader.js'); require('src/settings'); var settings = window._CCSettings; require('main'); require('cocos/cocos2d-js-min.js'); require('./libs/engine/index.js'); cc.view._maxPixelRatio = 3; wxDownloader.REMOTE_SERVER_ROOT = ''; wxDownloader.SUBCONTEXT_ROOT = ''; var pipeBeforeDownloader = cc.loader.subPackPipe || cc.loader.md5Pipe || cc.loader.assetLoader; cc.loader.insertPipeAfter(pipeBeforeDownloader, wxDownloader); if (cc.sys.browserType === cc.sys.BROWSER_TYPE_WECHAT_GAME_SUB) { var _WECHAT_SUBDOMAIN_DATA = require('src/subdomain.json.js'); cc.game.once(cc.game.EVENT_ENGINE_INITED, function () { cc.Pipeline.Downloader.PackDownloader._doPreload('WECHAT_SUBDOMAIN', _WECHAT_SUBDOMAIN_DATA); }); require('./libs/sub-context-adapter'); } else { cc.macro.CLEANUP_IMAGE_CACHE = true; } wxDownloader.init(); window.boot(); }"

fs.writeFile('./wechatgame/game.js', data3, () => {
});



function deleteall(path) {
    var files = [];
    if (fs.existsSync(path)) {
        files = fs.readdirSync(path);
        files.forEach(function (file, index) {
            var curPath = path + "/" + file;
            if (fs.statSync(curPath).isDirectory()) { // recurse
                deleteall(curPath);
            } else { // delete file
                fs.unlinkSync(curPath);
            }
        });
        fs.rmdirSync(path);
    }
};


setTimeout(() => {
    zipper.sync.zip("./wechatgame/res/assets1/assets1").compress().save("./wechatgame/res/assets1/assets1.zip");
    zipper.sync.zip("./wechatgame/res/assets2/assets2").compress().save("./wechatgame/res/assets2/assets2.zip");
    deleteall("./wechatgame/res/assets1/assets1");
    deleteall("./wechatgame/res/assets2/assets2");
    deleteall("./wechatgame/res/raw-assets")

}, 2000);

壓縮工具:

// npm install zip-local
var zipper = require("zip-local");
zipper.sync.zip("./web-mobile").compress().save("./web-mobile.zip");

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章