@dcloudio/uni-debugger
Version:
uni-app debugger
97 lines (83 loc) • 2.94 kB
JavaScript
const chalk = require('chalk')
const boxen = require('boxen')
const detect = require('detect-port')
const headless = require('./server/headless')
const config = require('./config')
const debugServer = require('./server')
const mlink = require('./link')
// const { launcher } = require('./util')
const Router = mlink.Router
const { logger, util } = require('./util')
function resolveConnectUrl (config) {
const host = config.ip + ':' + config.port
util.setConnectUrl(
config.connectUrl ||
`http://${host}/devtool_fake.html?_wx_devtool=ws://${host}/debugProxy/native/{channelId}`
)
}
process.env.PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = true
// process.on('unhandledRejection', (err, p) => {
// if (err && err.message && err.message.indexOf('Chromium revision is not downloaded') !== -1) {
// console.error('uni-app 真机调试缺少 Google Chrome,请手动下载安装:https://www.google.cn/intl/zh-CN/chrome/')
// process.exit()
// }
// })
exports.startServerAndLaunch = function (config, cb) {
this.startServer(config).then(() => {
cb && cb()
if (!config.manual) this.launch(config.ip, config.port)
})
}
exports.startServer = function (config) {
return new Promise((resolve, reject) => {
const inUse = config.inUse
let message = `${chalk.green('Start debugger server!')}${inUse ? `\n${chalk.red(`(on port ${inUse.open}, because ${inUse.old} is already in use)`)}` : ''}
${chalk.bold('Websocket Address For Native: ')}
${chalk.grey(`ws://${config.ip}:${config.port}/debugProxy/native/${config.CHANNELID}`)}
${chalk.bold('Debug Server:')} ${chalk.grey(`http://${config.ip}:${config.port}/`)}
`
debugServer.start(config.port, function () {
logger.log(
boxen(message, {
padding: 1,
borderColor: 'green',
margin: 1
})
)
resolve()
})
})
}
exports.launch = function (ip, port) {
// const debuggerURL = 'http://' + (ip || 'localhost') + ':' + port + '/'
logger.info('Launching Dev Tools...')
if (config.ENABLE_HEADLESS) {
// Check whether the port is occupied
detect(config.REMOTE_DEBUG_PORT).then(function (open) {
if (+config.REMOTE_DEBUG_PORT !== open) {
headless.closeHeadless()
logger.info(
`Starting inspector on port ${open}, because ${
config.REMOTE_DEBUG_PORT
} is already in use`
)
}
else {
logger.info(`Starting inspector on port ${open}`)
}
config.REMOTE_DEBUG_PORT = open
headless.launchHeadless(`${config.ip}:${config.port}`, open)
})
}
// launcher.launchChrome(debuggerURL, config.REMOTE_DEBUG_PORT || 9222)
}
exports.reload = function () {
Router.get('debugger').pushMessage('proxy.native', {
method: 'WxDebug.reload'
})
}
exports.start = function (bundles, config, cb) {
config.bundles = bundles
resolveConnectUrl(config)
this.startServerAndLaunch(config, cb)
}