12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #! /usr/bin/env node
- 'use strict';
- const path = require('path');
- const cfork = require('cfork');
- const InterceptorProxy = require('../');
- const packInfo = require('../package');
- const argv = process.argv;
- const DEFAULT_PROXY_PORT = 9229;
- const DEFAULT_DEBUG_PORT = 5858;
- // show help
- if (argv.includes('--help') || argv.includes('-h')) {
- return console.log(
- '\n' +
- 'Usage: inspector-proxy [options] [script.js]\n\n' +
- 'Options:\n' +
- ' -h, --help help \n' +
- ' -v, --version show version \n' +
- ' --proxy=port proxy port(default: ' + DEFAULT_PROXY_PORT + ') \n' +
- ' --debug=port node debug port(default: ' + DEFAULT_DEBUG_PORT + ') \n' +
- ' --silent=silent cfork silent(default: false) \n' +
- ' --refork=refork cfork refork(default: true) \n' +
- ' --file=file cfork exec file \n'
- );
- } else if (argv.includes('--version') || argv.includes('-v')) {
- return console.log(packInfo.version);
- }
- const proxyPort = getArg('--proxy') || DEFAULT_PROXY_PORT;
- const debugPort = getArg('--debug') || DEFAULT_DEBUG_PORT;
- const silent = getArg('--silent') === 'true';
- const refork = getArg('--refork') !== 'false';
- let jsFile = getArg('--file') || argv[argv.length - 1];
- const proxy = new InterceptorProxy({ port: proxyPort, silent });
- // don't run cfork while missing js file
- if (path.extname(jsFile) !== '.js') {
- return proxy.start({ proxyPort, debugPort })
- .then(() => {
- console.log(`\nproxy url: ${proxy.url}\n`);
- });
- }
- if (!path.isAbsolute(jsFile)) {
- jsFile = path.resolve(process.cwd(), jsFile);
- }
- // prevent cfork print epipe error
- /* istanbul ignore next */
- process.on('uncaughtException', err => {
- if (err.code !== 'EPIPE') {
- console.error(err);
- }
- });
- // hack to make cfork start with debugPort
- process.debugPort = debugPort - 1;
- // fork js
- cfork({
- exec: jsFile,
- execArgv: [ '--inspect' ],
- silent,
- count: 1,
- refork,
- }).on('fork', worker => {
- let port = debugPort;
- worker.process.spawnargs.find(arg => {
- let matches;
- if (arg.startsWith('--inspect') && (matches = arg.match(/\d+/))) {
- port = matches[0];
- return true;
- }
- return false;
- });
- proxy.start({ proxyPort, debugPort: port })
- .then(() => {
- console.log(`\nproxy url: ${proxy.url}\n`);
- });
- });
- function getArg(arg) {
- const key = `${arg}=`;
- const result = argv.find(item => item.startsWith(key));
- if (result) {
- return result.substring(key.length);
- }
- }
|