egg developer tool
Last updated 17 days ago by atian25 .
Repository · Bugs · Original npm · Tarball
$ cnpm install egg-bin 
SYNC missed versions from official npm registry.


NPM version build status Test coverage David deps Known Vulnerabilities npm download

egg developer tool, extends common-bin.


$ npm i egg-bin --save-dev


Add egg-bin to package.json scripts:

  "scripts": {
    "dev": "egg-bin dev",
    "debug": "egg-bin debug",
    "test-local": "egg-bin test",
    "test": "npm run lint -- --fix && npm run test-local",
    "cov": "egg-bin cov",
    "lint": "eslint .",
    "pkgfiles": "egg-bin pkgfiles",
    "autod": "egg-bin autod",
    "ci": "npm run lint && npm run autod -- --check && npm run pkgfiles -- --check && npm run cov"


All the commands support these specific v8 options:

  • --debug
  • --inspect
  • --harmony*
  • --es_staging
$ egg-bin [command] --debug --es_staging

if process.env.NODE_DEBUG_OPTION is provided (WebStorm etc), will use it as debug options.


Start dev cluster on local env, it will start a master, an agent and a worker.

$ egg-bin dev
  • --framework egg web framework root path.
  • --baseDir application's root path, default to process.cwd().
  • --port server port, default to 7001.
  • --cluster worker process number, skip this argvs will start only 1 worker, provide this without value will start cpu count worker.
  • --sticky start a sticky cluster server, default to false.
  • --typescript / --ts enable typescript support, default to false. Also support read from package.json's egg.typescript.
  • --require will add to execArgv, support multiple.


Debug egg app with V8 Inspector Integration.

automatically detect the protocol, use the new inspector when the targeted runtime >=7.0.0 .

if running without VSCode or WebStorm, we will use inspector-proxy to proxy worker debug, so you don't need to worry about reload.

$ egg-bin debug --debug-port=9229 --proxy=9999
  • all egg-bin dev options is accepted.
  • --proxy=9999 worker debug proxy port.


Using mocha with co-mocha to run test.

power-assert is the default assert library, and intelli-espower-loader will be auto required.

$ egg-bin test [files] [options]
  • files is optional, default to test/**/*.test.js
  • test/fixtures, test/node_modules is always exclude.

auto require test/.setup.js

If test/.setup.js file exists, it will be auto require as the first test file.

  ├── .setup.js
  └── foo.test.js


You can pass any mocha argv.

  • --require require the given module
  • --grep only run tests matching <pattern>
  • --timeout milliseconds, default to 30000
  • --full-trace display the full stack trace, default to false.
  • --typescript / --ts enable typescript support, default to false.
  • see more at


Environment is also support, will use it if options not provide.

You can set TESTS env to set the tests directory, it support glob grammar.

TESTS=test/a.test.js egg-bin test

And the reporter can set by the TEST_REPORTER env, default is spec.

TEST_REPORTER=doc egg-bin test

The test timeout can set by TEST_TIMEOUT env, default is 30000 ms.

TEST_TIMEOUT=2000 egg-bin test


Using [nyc] to run code coverage, it support all test params above.

Coverage reporter will output text-summary, json and lcov.


You can pass any mocha argv.

  • -x add dir ignore coverage, support multiple argv

  • --prerequire prerequire files for coverage instrument, you can use this options if load files slowly when call or mm.cluster

  • --typescript / --ts enable typescript support, default to false, if true, will auto add .ts extension and ignore typings and d.ts.

  • --nyc nyc instruments passthrough. you can use this to overwrite egg-bin's default nyc instruments and add additional ones.

    if you want to add addtional nyc reporters, you need to use this rather than add reporter key in .nycrc because:

    • when same key exists in .nycrc and cmd instruments, nyc prefers instrument.
    • egg-bin have some default instruments passed to nyc like -r and --temp-directory
    • egg-bin cov --nyc="-r teamcity -r text"
  • also support all test params above.


You can set COV_EXCLUDES env to add dir ignore coverage.

$ COV_EXCLUDES="app/plugins/c*,app/autocreate/**" egg-bin cov


Generate pkg.files automatically before npm publish, see ypkgfiles for detail

$ egg-bin pkgfiles


Generate pkg.dependencies and pkg.devDependencies automatically, see autod for detail

$ egg-bin autod

Custom egg-bin for your team

You maybe need a custom egg-bin to implement more custom features if your team has develop a framework base on egg.

Now you can implement a Command sub class to do that. Or you can just override the exists command.

See more at common-bin.

Example: Add nsp for security scan

nsp has provide a useful security scan feature.

This example will show you how to add a new NspCommand to create a new egg-bin tool.


const EggBinCommand = require('egg-bin');

class MyEggBinCommand extends EggBinCommand {
  constructor(rawArgv) {
    this.usage = 'Usage: egg-bin [command] [options]';

    // load directory
    this.load(path.join(__dirname, 'lib/cmd'));

module.exports = MyEggBinCommand;


const Command = require('egg-bin').Command;

class NspCommand extends Command {
  * run({ cwd, argv }) {
    console.log('run nsp check at %s with %j', cwd, argv);

  description() {
    return 'nsp check';

module.exports = NspCommand;


#!/usr/bin/env node

'use strict';
const Command = require('..');
new Command().start();

Run result

$ my-egg-bin nsp

run nsp check at /foo/bar with {}



Copyright 2014 - 2016 © |