Open atian25 opened 6 years ago
好赞!
Egg当前确实需要这个
Add nyc to package.json by default
"nyc": {
"check-coverage": true,
"statements": 76,
"branches": 44,
"functions": 71,
"lines": 76,
"exclude": [
"app/dal/dao/base"
]
},
应用代码升级的问题好像没说
egg-bin 跟着项目走比较好,插件是全局的?
插件指的是 egg 插件,就像 generator 那样,可以在 app/scripts 目录里面支持 generator.js / boilerplate.js 的方式来执行子命令。
譬如 egg-mongooes 的 boilerplate 放在插件里面最合适
@popomore
配置使用 ./egg/config,方便之后扩张目录
指的是 ~/.egg/config/init.yml
?
插件指的是 egg 插件,就像 generator 那样,可以在 app/scripts 目录里面支持 generator.js / boilerplate.js 的方式来执行子命令。譬如 egg-mongooes 的 boilerplate 放在插件里面最合适
这个有什么问题不?
~/.egg/config.yml 就好了
我觉得生成器作为单独命令比较好。
首先脚手架模版肯定是独立,放插件里有变成了鸡蛋问题。工具类不一定都适合放插件里,比如我们原来默认的 dev/test 属于哪个插件?放插件的可能是代码生成器和更新工具,这两个东西虽然场景不同,实属于同一个东西。
你理解错我的意思了,egg-bin 拆分那个只是考虑如何扩展,可能是 egg 这个全局引导命令,做一个映射,跟之前没区别,不会放到插件里面,这个先不在这展开,回头再另开。
我指的是:
这几个放到插件里面合适,因为他们是跟插件强相关的。而放到骨架里面就不太合适了,如 simple 这个骨架,不能把 hsf 的 template/ sub generator(egg-init add hsf --name=User
) 放进去
回到 RFC 本身,现在有两个问题我还没想清晰,需要讨论下:
明白了,那没问题。
通用的生成可以放到框架?就是考虑在哪个层面的就放到哪个 loadUnit?但是这个就不要考虑继承和依赖了,太复杂,可以通过配置的方式扩展。
更新我觉得跟生成是一个思路,只是需要根据一个标准来更新,比如什么版本到什么版本会做什么更新,现在想想有点复杂。
大概是这样的继承关系, base 里面实现 controller/service 等通用的
ts 里面实现 ts 版通用的,(到时再看有没有必要来个 base-ts )
框架的,目前还不是很清晰,倾向于先放到独立的 boilerplate,未来有需要再看看是抽象还是集成到框架。
更新的感觉挺复杂的,还想不清晰,先搁置。 egg-boilerplate-legacy 倒是可以实践下,一方面支持安装旧模板,一方面模板开发者可以用它来升级
补充下,有 npm init xxx
这个机制,可以注册 create-egg
/ create-egg-simple
这样的 npm 包,然后开发者就可以直接 npm init egg-simple
的方式调用执行了,可以作为一个简化的方式。
背景
目前的 egg-init 存在以下问题:
egg-init
本身,作为全局命令,更新不方便。egg-init add controller Test
这样的功能。方案
基础骨架
脱离 Egg 的独立骨架模块,common-boilerplate:
egg-bin
等引导工具目录结构:
骨架入口:
模板渲染
{{ name }}
{{name}}.test.js
形式renderTemplate
方法可以支持 nunjucks 之类的渲染引擎模板继承
单元测试
扩展了 coffee,提供 CLI 的测试支持。
egg-init
egg-init
极简化:common-bin
。package.json
的boilerplate
节点,执行对应的骨架。preset
,可以不再需要封装@ali/egg-init
。配置文件
package.json
的boilerplate
->~/.egg-init
egg-init --config=/path/to
项目配置: package.json
全局配置: 支持
yml / json
等格式egg-init-config
骨架列表集合,用于
--preset
参数。仅需在
package.json
中包含config.boilerplate
字段即可。package
- npm 包名description
- 描述category
- 分类,可选伪代码
egg-boilerplate-base
提供一个
egg-boilerplate-base
基础骨架,方便开发者继承使用。add controller
add service
add config
add plugin
helper
(或者考虑仅推荐,不集成,开发者自行引入)子命令
还没想好怎么做。
是基于
common-bin
的 sub command 还是作为 boilerplate 的一个方法,如addXX()
?还有就是跟
egg-bin generator
有点相关,很多子命令其实更应该由插件来提供,如addModel
之类的,它的模板应该是在对应的插件里面。所以
egg-init
和egg-bin generator
是可以考虑联动的,譬如addModel
的时候,是固定读插件里面的某个约定的文件,或者执行某个脚本。egg-boilerplate-legacy
用于兼容旧版本的骨架,引导安装,实现旧版 egg-init 的安装逻辑。
在
egg-init
新版源码里面,判断用户选择的骨架是否符合新规范,不符合的话,安装egg-boilerplate-legacy
并引导安装。