const os = require('os'); const fs = require('fire-fs'); const path = require('fire-path'); module.exports = { isVersion (str) { return (/^\d+\.\d+\.\d+$/).test(str); }, readFileSync (filePath, mode) { let data; try { data = fs.readFileSync(filePath, mode); } catch (error) { Editor.error('readFileSync error:', error); } return data; }, writeFileSync (filePath, data, mode) { fs.writeFile(filePath, data, mode, (error)=>{ if (error) { Editor.error('readFileSync error:', error); return false; } Editor.log(filePath + '写入成功'); }); }, isURL (str) { let strRegex = '(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]'; let re = new RegExp(strRegex); return str.match(re); }, getRelative (from, to) { return path.relative(from, to); }, accessPath (filePath, callback) { fs.access(filePath, callback); }, createProjectManifestAssets (assetdb, host, callback) { let manifestFmt = '{\n' + ' packageUrl: %s,\n' + ' remoteManifestUrl: \'%s/project.manifest\',\n' + ' remoteVersionUrl: \'%s/version.manifest\',\n' + ' version: \'100001\',\n' + ' assets: {},\n' + ' searchPaths: []\n' + '}\n'; host = host.replace(/\\/g, '/'); host = encodeURI(host); let manifest = manifestFmt.replace(new RegExp('%s', 'g'), host); Editor.Scene.callSceneScript('build-helper', 'createAssets', assetdb, manifest, callback); }, createVersionManifestAssets (assetdb, host, callback) { let manifestFmt = '{\n' + ' packageUrl: %s,\n' + ' remoteManifestUrl: \'%s/project.manifest\',\n' + ' remoteVersionUrl: \'%s/version.manifest\',\n' + ' version: \'100001\',\n' + '}\n'; host = host.replace(/\\/g, '/'); host = encodeURI(host); let manifest = manifestFmt.replace(new RegExp('%s', 'g'), host); Editor.Scene.callSceneScript('build-helper', 'createAssets', assetdb, manifest, callback); }, copyFolder (src, dst) { if (!fs.existsSync(dst)) { fs.mkdirSync(dst); } let paths = fs.readdirSync(src); // 同步读取当前目录 paths.forEach((aPath) => { let _src = path.join(src, aPath); let _dst = path.join(dst, aPath); let stats = fs.statSync(_src); if (stats.isFile()){ // 如果是个文件则拷贝 fs.copyFileSync(_src, _dst); } else { if (!fs.existsSync(_dst)) { fs.mkdirSync(_dst); } // 是目录则 递归 this.copyFolder(_src, _dst); } }); }, /** * 获取本机IP */ getIPAdress () { var interfaces = os.networkInterfaces(); for (var devName in interfaces) { var iface = interfaces[devName]; for (var i = 0; i < iface.length; i++) { var alias = iface[i]; if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) { return alias.address; } } } }, findFileSync (aPath, cb) { let dirs = fs.readdirSync(aPath); dirs.forEach((ele, index) => { let fullpath = path.join(aPath, ele); let info = fs.statSync(fullpath); if (info.isDirectory()) { this.findFileSync(fullpath, cb); } else { cb(fullpath); } }); }, rmdirSync (aPath) { let files = []; if (fs.existsSync(aPath)) { files = fs.readdirSync(aPath); files.forEach((file, index) => { let curPath = aPath + '/' + file; if (fs.statSync(curPath).isDirectory()) { this.rmdirSync(curPath); } else { fs.unlinkSync(curPath); } }); fs.rmdirSync(aPath); } } };