Skip to content
Chris edited this page Mar 13, 2014 · 6 revisions

edp默认提供的一些功能在实现的过程中引入了太多的外部依赖,导致安装和升级edp的时候很麻烦,而且容易出错。

解决这个问题之前,我们发起了Issue 125进行讨论,讨论的过程中已经明确的方向就是对edp默认提供的功能进行剥离,需要使用的功能可以被单独的安装,这样子来尽可能的减少edp的改动,精简它的依赖。

现在已经有一个功能被剥离出来了,比如edp-doctor, edp-add, edp-test等等,下面就介绍一下,如果给edp新增一个功能扩展的时候,应该如何去做。


假如我们需要给新增一个edp foo命令,一般的流程是这样子的:

  1. 新增edp/lib/foo.js,在这个文件里面定义好foo命名需要的参数格式,提供的exports.main不需要具体的实现,只需要引入edp-foo这个package,然后调用这个package提供的start方法即可。可以参考edp/lib/doctor.js的代码。

    cli.options = [ 'max-size', 'auto-uri' ];
    
    // 如果按照上面的方式定义 cli.options 当执行 edp foo -m 123 -a 1 的时候,opts的内容如下:
    {
      'max-size': 123
      'm': 123
      'auto-uri': 1
      'a': 1
    }
  2. 我们需要去实现edp-foo这个模块,一般来说这些模块的git repos都是放在github/ecomfe/下面的,如果没有权限创建的话,请联系相关的同学先创建出来。

  3. 获取edp-foo的代码,执行npm init初始化一个npmpackage,添加好一些相关的依赖,执行npm install安装好所需要的依赖,然后就可以正式干活了。

    {
      ...
      "dependencies": {
        "edp-core": "~0.0.18",
        "edp-config": "~0.4.4",
        "edp-package": "~0.4.11",
        "edp-project": "~0.4.31",
        ...
      }
      ...
    }
  4. 开发的过程中,如果我需要调试的话,一般采用如下的方式(我采用的方式,不是最优的方式):

    cd edp-foo && npm link
    cd edp && npm link edp-foo

    此时就可以直接使用edp foo来调试你的代码了。

  5. 另外,如果代码写了一半儿,发现依赖的edp-core有个bug,需要修改一下,那应该采用这个方式来搞:

    git checkout [email protected]:ecomfe/edp-core.git
    cd edp-core && npm link
    cd edp-foo && npm link edp-core
    git checkout -b issue-123    # 记得按照issue-id创建正确的分支

    现在就可以直接修改edp-core的代码了,改完之后edp-foo就可以直接使用生效的代码。当然,如果发现了edp-package, edp-project的bug,也参考上面的步骤来搞。

  6. 终于改动的差不多了,应该发布了,发现edp-core, edp-project, edp-package都被改过了,发布之前应该跑一下ut(记得执行npm i -g jasmine-node),确保没问题耶:

    cd edp-core && npm test
    cd edp-project && npm test
    cd edp-package && npm test

    看起来还行,都变绿了,那就发一下Pull Request吧。如果PR通过了,那就可以发布了。修改一下edp-core, edp-project, edp-package里面package.json,给版本号+1,然后执行:

    git commit -a -m 'bump to x.y.z'          # 把x.y.z换成正确的版本号
    git tag -a 'x.y.z' -m 'bump to x.y.z'     # 把x.y.z换成正确的版本号
    git push origin master x.y.z              # 把x.y.z换成正确的版本号
    npm publish                               # 估计没权限,找有权限的同学吧
  7. 发布了对于依赖的更改,最后记得把edp-foo给发布了,如果是第一次发布,请用ecomfe的账户,如果没有密码的话,找相关的同学吧。

  8. edp-foo发布成功之后,我们最后还是要测试一下的,方式很简单:

    npm rm -g edp       # 删掉
    npm install -g edp  # 重新安装
    edp foo             # 开始测试

关于UT

因为相关的代码可能会被任何同学修改,为了保证代码的质量,ut是必不可少的。一般来说,我们的都是基于jasmine来写我们的test case,因此本地跑ut之前呢,记得先安装npm i -g jasmine-node

对于模块的目录结构来说,一般需要是这样子的,以edp-build为例:

edp-build/
  .travis.yml
  package.json
  test/
    Makefile
    foo.spec.js
    bar.spec.js
    xxx.spec.js

其中package.json需要添加scripts字段:

{
  "scripts": {
    "test": "make -C test"
  }
}

另外.travis.ymlMakefile的内容一般都是这样子的,改动不是很大

language: node_js
node_js:
  - "0.11"
  - "0.10"
before_script:
  - "npm i -g jasmine-node"
all:
        env EDP_LOG_SILENT=1 jasmine-node --nohelpers .

上述的文件和ut代码准备好之后,就去http://travis-ci.org上面配置一下即可(如果没权限的话,联系有权限的同学吧)

Hello World

Clone this wiki locally