Skip to content
leeight edited this page Apr 18, 2014 · 5 revisions

edp提供的命令分为Builtin Commands和User Commands,各个命令的实现分别由不同的npm package来完成。

目录

Builtin Commands

根据package.json里面的配置,我们可以了解到到edp提供的Builtin Commands和npm package的对应关系如下:

{
  "edp": {
    "extensions": {
      "edp-core": [ "install" ],
      "edp-config": [ "config" ],
      "edp-build": [ "build" ],
      "edp-package": [ "import", "search", "update" ],
      "edp-project": [ ],
      "edp-webserver": [ ],
      "edp-watch": [ ],
      "edp-lint": [ "htmlhint", "csslint", "jshint" ],
      "edp-beautify": [ "beautify" ],
      "edp-doctor": [ "doctor" ],
      "edp-minify": [ "minify" ],
      "edp-test": [ "test" ]
    }
  }
}

例如当我们执行edp install的时候,首先edp会检查是否安装了edp-core这个npm package,如果没有的话,会自动安装,安装成功之后会执行install这个命令,执行的时候会传递必要的参数给install这个命令。

Command Resolve

当我们执行edp <cmd> [<sub-cmd>] --arg1=foo --arg2=bar的时候,首先面临的一个问题是需要根据<cmd>定位到提供哪个npm package提供了<cmd>的实现。定位的过程如下:

  1. 检查edp的package.json中edp.extensions的每一项,对应的value数组里面是否包含<cmd>
  2. 如果存在,去第3步,否则去第4步
  3. 把该项的key当做npm package的名称,返回
  4. 检查edp的package.json中edp.extendsions是否存在edp+<cmd>的配置,如果存在,把edp+<cmd>当做npm package的名称,返回
  5. 最后都没有找到,那么把edpx+<cmd>当做npm package的名称,返回

找到npm package之后,就会自动安装(如果之前没有安装过),然后根据这个<cmd>去npm package下面的cli目录找到对应的js文件,require之后返回一个cli对象,执行cli.main即可

Default Command

当我们执行edp project的时候,因为根据前面的Command Resolve逻辑,没有任何一个npm package提供了project这个命令,但是在edp.extensions里面配置了edp-project,因此我们找到并安装了edp-project之后,需要执行edp-project的Default Command。

Default Command的名称跟npm package的名称一样(去掉edpx和edp的前缀之后)。对于edp-project来说,它的Default Command就是project,所处的位置也是在npm package的cli目录下面。

Sub Command

edp是支持的,当执行edp project init的时候,init就是project<sub-cmd>,这个从目录结构层级上可以区分出来:

➜  edp-project git:(1.0.0-dev) tree cli
cli
├── project
│   ├── init.js
│   ├── initBuild.js
│   ├── initWebServer.js
│   └── updateLoaderConfig.js
└── project.js

Arguments and Options

cmd执行的时候有时候需要传递一些额外的参数。参数有两种形式:Arguments和Options。

如果要设置cmd所支持的Options,可以采用如下的方式:

exports.cli = {
    options: [ 'foo', 'bar:' ]
}

bar:后面的冒号意思是这个参数需要提供参数值。

那么当执行edp <cmd> a b c --foo --bar=hello的时候,Options参数的值如下:

{
    foo: true, f: true,
    bar: 'hello', b: 'hello'
}

Arguments参数的值如下:[ 'a', 'b', 'c' ]

如果a<cmd><sub-cmd>,那么最终执行的是<sub-cmd>,传递给<sub-cmd>的Arguments参数值是:[ 'b', 'c' ],依此类推。

User Commands

edp默认提供的User Commands包括edpx-bcs, edpx-add, edpx-ub-ria。如果想要创建一个自己的扩展,可以采用如下的方式:

  1. git clone https://github.com/ecomfe/edpx-seed.git
  2. cd edpx-seed
  3. npm link .

此时执行edp,就能在User Command的部分看到如下内容了

User Commands:
  seed       edp seed command description
   |- foo        这个是必须的,用来简单的描述命令所做的事情

然后在edpx-seed的基础上做一些自己的修改即可。

Command Help

所有的命令都支持edp <cmd> --help或者edp <cmd> -h的参数用来查看命令的帮助信息。
注意:edp help <cmd>的方式已经不支持了

当输出cmd的帮助信息的时候,优先检查在cmd.js的统计目录是否存在cmd.md,如果存在的话,直接输出即可,否则会输出cmd的默认帮助信息(name, description, options的默认组合)。

Hello World

Clone this wiki locally