UNPKG

@dcloudio/uni-debugger

Version:

uni-app debugger

150 lines (146 loc) 4.42 kB
const { api } = require('../index') const ip = require('ip').address() const exit = require('exit') const path = require('path') const uuid = require('uuid') const detect = require('detect-port') const pkg = require('../package.json') module.exports = { name: 'debug', description: 'Debug weex bundle', alias: 'd', run: async ({ logger, parameters, compile, meta }) => { const options = parameters.options const source = parameters.first const analyzer = options.__analyzer const showHelp = async () => { let params = { commandend: 'Debug Weex page, also can compile some \`.vue\` page', commands: [ { heading: ['Usage', 'Description'] }, { key: 'debug', type: '', description: 'Just open the devtool server.' }, { key: 'debug', type: '[source] --<options>', description: 'Compile source then open devtool server.' } ], options: { 'Base': [ { key: '-p, --port', description: 'set default extname for compiler', default: '8080' }, { key: '--host', description: 'specify host adress', }, { key: '--channelid', description: 'specify debug channel id' }, { key: '--manul', default: 'false', description: 'control open browser or not' }, { key: '--remote-debug-port', description: 'specify remote debug port for headless chromium', default: '9222' }, ], 'Miscellaneous:': [ { key:'-v, --version', description: 'Output the version number' }, { key:'-h, --help', description: 'Show help' } ] } } meta.generateHelp(params) } const transformOptions = async (options) => { let defaultPort = await detect(8089) return { ip: options.host, port: options.port || options.p || defaultPort, channelId: options.channelid || uuid(), manual: options.manual, remoteDebugPort: options.remoteDebugPort } } let devtoolOptions = await transformOptions(options) let shouldReload = false if (options.help || options.h) { await showHelp() } else if (options.v || options.version) { logger.log(pkg.version) } else { if (source) { await compile( source, path.join(__dirname, '../frontend/public/weex'), { watch: true, filename: '[name].js', web: false, config: options.config || options.c }, async (error, output, json) => { let bundles = [] if (error) { await analyzer('compile', Array.isArray(error)?error.join('\n'):error) } else { bundles = json.assets.map(asset => { let entry let date = new Date() const formateTime = (value) => { return value < 10 ? '0' + value : value } if (/\./.test(source)) { entry = path.resolve(source) } else { entry = path.resolve(source, asset.name.replace('.js', '.vue')) } return { updateTime: `${date.getFullYear()}-${date.getMonth()+1}-${date.getDay()} ${formateTime(date.getHours())}:${formateTime(date.getMinutes())}:${formateTime(date.getSeconds())}`, output: `http://${ip}:${devtoolOptions.port}/weex/${asset.name}?bundleType=vue`, size: (asset.size / 1024).toFixed(0), time: json.time, entry: entry } }) } if (!shouldReload) { shouldReload = true await api.startDevtoolServer(bundles, devtoolOptions) } else { api.reload() } } ) } else { await api.startDevtoolServer([], devtoolOptions) } } } }