打包工具:
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");