-
Notifications
You must be signed in to change notification settings - Fork 171
Dev Steps
edp默认提供的一些功能在实现的过程中引入了太多的外部依赖,导致安装和升级edp的时候很麻烦,而且容易出错。
解决这个问题之前,我们发起了Issue 125进行讨论,讨论的过程中已经明确的方向就是对edp默认提供的功能进行剥离,需要使用的功能可以被单独的安装,这样子来尽可能的减少edp的改动,精简它的依赖。
现在已经有一个功能被剥离出来了,比如edp-doctor
, edp-add
, edp-test
等等,下面就介绍一下,如果给edp新增一个功能扩展的时候,应该如何去做。
假如我们需要给新增一个edp foo
命令,一般的流程是这样子的:
-
新增
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 }
-
我们需要去实现
edp-foo
这个模块,一般来说这些模块的git repos
都是放在github/ecomfe/
下面的,如果没有权限创建的话,请联系相关的同学先创建出来。 -
获取
edp-foo
的代码,执行npm init
初始化一个npm
的package
,添加好一些相关的依赖,执行npm install
安装好所需要的依赖,然后就可以正式干活了。{ ... "dependencies": { "edp-core": "~0.0.18", "edp-config": "~0.4.4", "edp-package": "~0.4.11", "edp-project": "~0.4.31", ... } ... }
-
开发的过程中,如果我需要调试的话,一般采用如下的方式(我采用的方式,不是最优的方式):
cd edp-foo && npm link cd edp && npm link edp-foo
此时就可以直接使用
edp foo
来调试你的代码了。 -
另外,如果代码写了一半儿,发现依赖的
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,也参考上面的步骤来搞。 -
终于改动的差不多了,应该发布了,发现
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 # 估计没权限,找有权限的同学吧
-
发布了对于依赖的更改,最后记得把
edp-foo
给发布了,如果是第一次发布,请用ecomfe
的账户,如果没有密码的话,找相关的同学吧。 -
edp-foo
发布成功之后,我们最后还是要测试一下的,方式很简单:npm rm -g edp # 删掉 npm install -g edp # 重新安装 edp foo # 开始测试
因为相关的代码可能会被任何同学修改,为了保证代码的质量,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.yml
和Makefile
的内容一般都是这样子的,改动不是很大
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
上面配置一下即可(如果没权限的话,联系有权限的同学吧)