Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

脚手架之egg-init #33

Open
SunShinewyf opened this issue Nov 8, 2017 · 0 comments
Open

脚手架之egg-init #33

SunShinewyf opened this issue Nov 8, 2017 · 0 comments

Comments

@SunShinewyf
Copy link
Owner

egg-initegg的一个脚手架,用于快速生成一个egg项目或者插件

在剖析egg-init之前,先介绍一下脚手架的相关知识

关于脚手架

脚手架主要是在项目启动过程中生成一些初始文件的,而且一旦生成了初始化文件之后,脚手架就没有用武之地了。但是在一个工程化体系过程中,脚手架的作用还是很大的:

  • 规范团队中的协作开发
  • 快速生成配置文件,节省开发时间
  • 降低框架的学习成本

脚手架一般运行在本地,并且有一些配置选项可以选用。

目前比较流行的脚手架就是yeoman,具体怎么使用可以移步这里

如何开发脚手架

  • npm bin
    需要在package.json中声明bin字段的命令
"bin": {
    "init": "bin/init.js"
 },
  • 建立相应的init.js文件
#!/usr/bin/env node  //首行必须加上
//具体逻辑

init.js里面可以添加一些具体的逻辑,如读取文件路径,获取开发者的一些动态设置选项等

  • 全局安装之后,通过npm link或者全局安装创建软链接,我们配置的init命令才能生效

egg-init

egg-init提供的options有如下几种:

选项:
  --type          boilerplate type                                      [字符串]
  --dir           target directory                                      [字符串]
  --force, -f     force to override directory                             [布尔]
  --template      local path to boilerplate                             [字符串]
  --package       boilerplate package name                              [字符串]
  --registry, -r  npm registry, support china/npm/custom, default to auto detect
                                                                        [字符串]
  --silent          do not ask, just use default value                       [布尔]
  --version       显示版本号                                              [布尔]
  -h, --help      显示帮助信息                                            [布尔]

可以根据个人情况选择相应的配置

egg-init实现的方式也和前面说的方法一样,入口文件就是bin/egg-init.js,但是这个文件很简单,最终调用的是lib/init-command.js

首先是在构造函数中初始化了一些参数,然后在run主函数里面获取了注册地址,并在terminal中打印出了use registry:的信息,然后是根据用户输入的项目名来生成相应的项目dir

egg-init支持四种项目类型,分别是:

  • simple
  • empty
  • framework
  • plugin

其中四种项目类型的一些定义都放在boilerplateMapping这个变量中。并且会通过交互式命令行工具yargs记录用户的选择,从而在指定的dir下面下载不同的项目类型文件包。并且会在控制台中打印出下载地址,比如当选择simple时,下载包地址为:http://registry.npm.taobao.org/egg-boilerplate-simple/download/egg-boilerplate-simple-3.0.0.tgz

在下载文件之前会通过askForVariable这个函数来收集用户的一些自定义信息,比如project name、project description等,当设置完了所有的这些配置项之后,就开始在指定的目录中生成文件了。

egg-init初始化的文件

当选择项目类型为simple时,生成的文件如下图所示:

images

  • 对于app,config,test这些文件,就不说了,基本上也是初始化了egg的一些示例文件。
  • eslintrc里面声明了如下扩展:
{
  "extends": "eslint-config-egg"
}

对于eslintrc配置的一些说明,可以移步这里

eslint-config-egg这个npm包则是声明了一些书写egg时需要遵循的一些书写规范。

  • .autod.conf.js则是声明了autod的配置方式,对于autod的学习,可以参见这里这里,主要是给用户提供自行升级依赖版本的便利
  • package.json,里面已经配备好了一些字段,比如dependencies、devDependencies以及script等命令。

总结

egg-init脚手架的功能主要是生成项目的初始化文件,比较好的是为开发者生成了一些配置,比如说eslint以及gitignore等,会比较方便。相较于自己新建每个文件要快得多。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant