@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
107 lines (93 loc) • 6.36 kB
JavaScript
;var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");_Object$defineProperty(exports, "__esModule", { value: true });exports.bundleRouter = bundleRouter;exports.debugRouter = debugRouter;exports.indexRouter = indexRouter;exports.poststdbgRouter = poststdbgRouter;exports.startDebug = startDebug;var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
var _path = _interopRequireDefault(require("path"));
var _child_process = require("child_process");
var _qrImage = _interopRequireDefault(require("qr-image"));
var _openBrowser = require("./openBrowser.js");
var _index = require("../cli-shared-utils/index.js");
var _recordClient = require("./record-client.js");
function indexRouter(context) {
// 默认展示二维码
var image = _qrImage["default"].image("http://".concat(context.host), { size: 9, type: 'png', ec_level: 'H' });
context.type = 'image/png';
context.body = image;
}
function debugRouter(context) {
var str = context.request.querystring;
var ip = str.replace('ip=', '');
var url = "chrome-devtools://devtools/bundled/inspector.html?v8only=true&ws=".concat(ip, ":5086/00010002-0003-4004-8005-000600070008");
context.response.type = 'html';
context.response.body = "<p>\u8BF7\u590D\u5236\u4EE5\u4E0B\u5730\u5740\u5230\u5730\u5740\u680F\u91CC\u9762\u8BBF\u95EE\uFF08\u67D0\u4E9B\u9AD8\u7248\u672Cchorme\u53EF\u80FD\u4F1A\u5BFC\u81F4\u5730\u5740\u8BBF\u95EE\u4E0D\u4E86\uFF0C\u53BB\u6389\u201Cchorme-\u201D\u5C1D\u8BD5\u4E0B\uFF09</p><p>".concat(url, "</p>");
}
function poststdbgRouter(context) {
var params = (0, _recordClient.getDebugInfoFromRequest)(context.request);
var _context$request$body = context.request.body,ip = _context$request$body.ip,_context$request$body2 = _context$request$body.isPreviewDebug,isPreviewDebug = _context$request$body2 === void 0 ? false : _context$request$body2,_context$request$body3 = _context$request$body.supportNewDev,supportNewDev = _context$request$body3 === void 0 ? false : _context$request$body3;
var host = context.request.host;
var portRegex = /:(\d+)/;
var match = host.match(portRegex);
var port = match ? match[1] : '';
if (port) {
host = '127.0.0.1:' + port;
}
// ADB调试模式
if (params.linkMode === _recordClient.LINK_MODE.ADB) {
startDebug(context, params, supportNewDev);
return;
}
(0, _index.info)((0, _stringify["default"])(params));
// 使用本地的devtool来打开调试页面
var url = "http://".concat(host, "/front_end/inspector.html?ws=").concat(ip, ":").concat(params.devicePort, "/inspector&remoteFrontend=true&dockSide=undocked&panel=console");
if (isPreviewDebug) {
(0, _openBrowser.openBrowser)(url);
} else {
// OPPO、荣耀都是cocos的调试方式,可以直接使用chrome devtool来调试
// OPPO是 ${ip}:12348
url = "devtools://devtools/bundled/inspector.html?v8only=true&ws=".concat(ip, ":5086/00010002-0003-4004-8005-000600070008");
// 荣耀是 ${ip}:5086
// 小米是chrome://inspect/#devices的调试方式
(0, _openBrowser.openBrowser)(url);
}
}
/**
* 适配支持调试器的开始调试请求, 自动打开chrome进程
*/function
startDebug(_x, _x2, _x3) {return _startDebug.apply(this, arguments);}function _startDebug() {_startDebug = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(context, params, supportNewDev) {var sn, linkMode, devicePort, serverPort, _yield$context$adbDeb, localReversePort, err, newDevUrl;return _regenerator["default"].wrap(function _callee$(_context) {while (1) switch (_context.prev = _context.next) {case 0:
context.status = 200;
sn = params.sn, linkMode = params.linkMode, devicePort = params.devicePort;
serverPort = devicePort;
// ADB调试模式
if (!(linkMode === _recordClient.LINK_MODE.ADB)) {_context.next = 13;break;}_context.next = 6;return (
context.adbDebugger.forwardForWsChannel(sn, devicePort));case 6:_yield$context$adbDeb = _context.sent;localReversePort = _yield$context$adbDeb.localReversePort;err = _yield$context$adbDeb.err;if (!
err) {_context.next = 12;break;}
console.error("startDebug(): adb forward \u7AEF\u53E3\u6620\u5C04\u5931\u8D25: ".concat(err.message));return _context.abrupt("return");case 12:
serverPort = localReversePort;case 13:
// 生成调试url,并且向页面输出调试APP信息
newDevUrl = "http://127.0.0.1:".concat(serverPort, "/front_end/inspector.html?ws=127.0.0.1:").concat(devicePort, "/inspector&remoteFrontend=true&dockSide=undocked&panel=console");
(0, _openBrowser.openBrowser)(newDevUrl);case 15:case "end":return _context.stop();}}, _callee);}));return _startDebug.apply(this, arguments);}
function getProjectName() {
var str = _index.fs.readFileSync(_path["default"].resolve(_index.projectPath, './src/manifest.json'), 'utf8');
return JSON.parse(str)["package"];
}
function bundleRouter(context) {
var projectName = getProjectName();
var projectDist = _path["default"].join(_index.projectPath, "dist");
var files = _index.fs.readdirSync(projectDist);
var rpkFiles = files.map(function (file) {
if (file.endsWith('.rpk')) {
var fileName = file.split('.rpk')[0];
if (fileName.includes(projectName)) {
return file;
}
}
});
var projectRpk = _path["default"].join(projectDist, "".concat(projectName, ".rpk"));
if (rpkFiles && rpkFiles.length > 0) {
projectRpk = _path["default"].resolve(projectDist, rpkFiles[0]);
}
if (_index.fs.existsSync(projectRpk)) {
context.body = _index.fs.createReadStream(projectRpk);
context.set('Content-Type', 'text/plain');
} else {
(0, _index.info)("".concat(projectDist, "\u76EE\u5F55\u4E0B\u6CA1\u6709rpk\u6587\u4EF6\uFF0C\u73B0\u5728\u8FD0\u884Cnpm run build\u547D\u4EE4\u8FDB\u884C\u6253\u5305"));
(0, _child_process.execSync)('qg build', { cwd: _index.projectPath, stdio: 'inherit' });
}
}