Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: auto detect available port #22

Merged
merged 1 commit into from
Dec 16, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .autod.conf
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ module.exports = {
'mocha',
'thunk-mocha',
'intelli-espower-loader',
'power-assert',
],
devdep: [
'autod',
Expand Down
14 changes: 1 addition & 13 deletions lib/debug_command.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,7 @@ class DebugCommand extends Command {
}

* run(cwd, args) {
args.push('--baseDir');
args.push(cwd);
args.push('--cluster');
args.push('1');

const eggPath = this.getFrameworkOrEggPath(cwd);
if (eggPath) {
args.push(`--eggPath=${eggPath}`);
}
args = yield this.helper.formatArgs(cwd, args);

const options = {
env: Object.assign({}, process.env),
Expand Down Expand Up @@ -74,10 +66,6 @@ class DebugCommand extends Command {
help() {
return 'Debug mode start';
}

getFrameworkOrEggPath(cwd) {
return this.utils.getFrameworkOrEggPath(cwd);
}
}

module.exports = DebugCommand;
17 changes: 2 additions & 15 deletions lib/dev_command.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,10 @@ class DevCommand extends Command {
* run(cwd, args) {
const execArgv = args ? args.filter(str => str.indexOf('--debug') === 0 || str.indexOf('--inspect') === 0) : [];
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

egg-bin debug 的场景下, 这段逻辑还需要么? 要不要干掉


args.push('--baseDir');
args.push(cwd);
args.push('--cluster');
args.push('1');

const eggPath = this.getFrameworkOrEggPath(cwd);

if (eggPath) {
args.push(`--eggPath=${eggPath}`);
}
args = yield this.helper.formatArgs(cwd, args);

const options = {
env: process.env,
env: Object.assign({}, process.env),
execArgv,
};

Expand All @@ -33,10 +24,6 @@ class DevCommand extends Command {
help() {
return 'local env start';
}

getFrameworkOrEggPath(cwd) {
return this.utils.getFrameworkOrEggPath(cwd);
}
}

module.exports = DevCommand;
26 changes: 26 additions & 0 deletions lib/helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

const path = require('path');
const glob = require('glob');
const detect = require('detect-port');
const utils = require('egg-utils');

exports.defaultPort = 7001;
exports.serverBin = path.join(__dirname, 'start-cluster');

exports.getTestFiles = function() {
Expand All @@ -20,3 +23,26 @@ exports.getTestFiles = function() {
exports.checkDeps = function* () {
return true;
};

exports.formatArgs = function* (cwd, args) {
args.push('--baseDir');
args.push(cwd);
args.push('--cluster');
args.push('1');

const eggPath = utils.getFrameworkOrEggPath(cwd);
if (eggPath) {
args.push(`--eggPath=${eggPath}`);
}

// auto detect available port
if (args.indexOf('-p') === -1 && args.indexOf('--port') === -1) {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

那个 --port 要强制加么? chair 那边没有, 还有 nut 默认的端口不是 7001 (不过问题不大)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

嗯,确实没考虑这点,那就不强加了。

+1

const port = yield detect(exports.defaultPort);
if (port !== exports.defaultPort) {
args.push('-p', port);
console.warn(`[egg-bin] server port ${exports.defaultPort} is in use, now using port ${port}\n`);
}
}
return args;
};

5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
"childprocess": "^2.0.2",
"commander": "^2.9.0",
"common-bin": "^1.0.0",
"debug": "^2.3.3",
"debug": "^2.4.4",
"detect-port": "^1.0.7",
"egg-utils": "^1.0.0",
"glob": "^7.1.1",
"intelli-espower-loader": "^1.0.1",
Expand All @@ -27,7 +28,7 @@
"autod": "^2.7.1",
"coffee": "^3.3.0",
"egg-ci": "^1.1.0",
"eslint": "^3.12.1",
"eslint": "^3.12.2",
"eslint-config-egg": "^3.2.0",
"mm": "^2.0.0"
},
Expand Down
12 changes: 3 additions & 9 deletions test/egg-cov.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,7 @@ describe('egg-bin cov', () => {

it('should fail when test fail', done => {
mm(process.env, 'TESTS', 'test/fail.js');
coffee.fork(eggBin, [ 'cov' ], {
cwd: appdir,
})
coffee.fork(eggBin, [ 'cov' ], { cwd: appdir })
.coverage(false)
// .debug()
.expect('stdout', /1\) should fail/)
Expand All @@ -76,9 +74,7 @@ describe('egg-bin cov', () => {

it('should fail when test fail with power-assert', done => {
mm(process.env, 'TESTS', 'test/power-assert-fail.js');
coffee.fork(eggBin, [ 'cov' ], {
cwd: appdir,
})
coffee.fork(eggBin, [ 'cov' ], { cwd: appdir })
.coverage(false)
// .debug()
.expect('stdout', /1\) should fail/)
Expand All @@ -90,9 +86,7 @@ describe('egg-bin cov', () => {

it('should warn when require intelli-espower-loader', done => {
mm(process.env, 'TESTS', 'test/power-assert-fail.js');
coffee.fork(eggBin, [ 'cov', '-r', 'intelli-espower-loader' ], {
cwd: appdir,
})
coffee.fork(eggBin, [ 'cov', '-r', 'intelli-espower-loader' ], { cwd: appdir })
.coverage(false)
// .debug()
.expect('stderr', /manually require `intelli-espower-loader`/)
Expand Down
32 changes: 24 additions & 8 deletions test/egg-debug.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ const path = require('path');
const coffee = require('coffee');
const mm = require('mm');
const rimraf = require('rimraf');
const net = require('net');

describe('egg-bin debug', () => {
const eggBin = require.resolve('../bin/egg-bin.js');
Expand All @@ -16,22 +17,37 @@ describe('egg-bin debug', () => {
afterEach(mm.restore);

it('should startCluster success', done => {
coffee.fork(eggBin, [ 'debug' ], {
cwd: appdir,
})
.debug()
coffee.fork(eggBin, [ 'debug' ], { cwd: appdir })
// .debug()
.expect('stdout', /,"workers":1}/)
.expect('code', 0)
.end(done);
});

it('should startCluster with port', done => {
coffee.fork(eggBin, [ 'debug', '--port', '6001' ], {
cwd: appdir,
})
.debug()
coffee.fork(eggBin, [ 'debug', '--port', '6001' ], { cwd: appdir })
// .debug()
.expect('stdout', `{"baseDir":"${appdir}","workers":1,"port":"6001"}\n`)
.expect('code', 0)
.end(done);
});

describe('auto detect available port', () => {
let server;
before(done => {
server = net.createServer();
server.listen(7001, done);
});

after(() => server.close());

it('should auto detect available port', done => {
coffee.fork(eggBin, [ 'debug' ], { cwd: appdir })
// .debug()
.expect('stdout', /,"workers":1}/)
.expect('stderr', /\[egg-bin] server port 7001 is in use/)
.expect('code', 0)
.end(done);
});
});
});
36 changes: 24 additions & 12 deletions test/egg-dev.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,49 @@

const path = require('path');
const coffee = require('coffee');
const net = require('net');

describe('egg-bin dev', () => {
const eggBin = require.resolve('../bin/egg-bin.js');
const appdir = path.join(__dirname, 'fixtures/demo-app');

it('should startCluster success', done => {
coffee.fork(eggBin, [ 'dev' ], {
cwd: appdir,
})
coffee.fork(eggBin, [ 'dev' ], { cwd: appdir })
// .debug()
.expect('stdout', `{"baseDir":"${appdir}","workers":1}\n`)
.expect('code', 0)
.end(done);
});

it('should startCluster with port', done => {
coffee.fork(eggBin, [ 'dev', '--port', '6001' ], {
cwd: appdir,
})
coffee.fork(eggBin, [ 'dev', '--port', '6001' ], { cwd: appdir })
// .debug()
.expect('stdout', `{"baseDir":"${appdir}","workers":1,"port":"6001"}\n`)
.expect('code', 0)
.end(done);
});

describe('auto detect available port', () => {
let server;
before(done => {
server = net.createServer();
server.listen(7001, done);
});

after(() => server.close());

it('should auto detect available port', done => {
coffee.fork(eggBin, [ 'dev' ], { cwd: appdir })
// .debug()
.expect('stdout', `{"baseDir":"${appdir}","workers":1}\n`)
.expect('stderr', /\[egg-bin] server port 7001 is in use/)
.expect('code', 0)
.end(done);
});
});

it.skip('should startCluster with execArgv --debug', done => {
coffee.fork(eggBin, [ 'dev', '--debug=7000' ], {
cwd: appdir,
})
coffee.fork(eggBin, [ 'dev', '--debug=7000' ], { cwd: appdir })
// .debug()
.expect('stdout', `{"baseDir":"${appdir}","workers":1}\n`)
.expect('stderr', /Debugger listening on .*7000/)
Expand All @@ -39,9 +53,7 @@ describe('egg-bin dev', () => {
});

it.skip('should startCluster with execArgv --inspect', done => {
coffee.fork(eggBin, [ 'dev', '--inspect=7000' ], {
cwd: appdir,
})
coffee.fork(eggBin, [ 'dev', '--inspect=7000' ], { cwd: appdir })
// .debug()
.expect('stdout', `{"baseDir":"${appdir}","workers":1}\n`)
.expect('stderr', /Debugger listening on .*7000/)
Expand Down