-
Notifications
You must be signed in to change notification settings - Fork 5
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
从零开始搭建前端脚手架 #2
Comments
good |
program
.command('delete') // fe delete
.description('查看模板列表')
.alias('d') // 简写
.action(() => {
require('../cmd/delete')();
}); 描述错了~无伤大雅,文章超赞!:smile: |
@Tomotoes 已修改,谢谢提醒 |
脚手架的文件结构 文件结构中的 bin 文件夹名字写错了~ |
@Tomotoes 已修改,谢谢😁 |
太强了 简单易懂 nice |
Vue.js 是目前比较流行的前端框架之一,那么开发一个基于 Vue.js 的组件是每个前端的心愿。在每次开发新的 Vue.js 组件的时候,都会做的事情有下面几项:
那么为什么不把这些工作有效的提炼出来,让他一键生成呢?目前一键生成的工具有很多,如 yeoman 等。yeoman 搭建项目需要提供 yeoman 的脚手架包 。 yeoman 的脚手架包本质上就是一个具备完整文件结构的项目样板,用户需要手动地把这些脚手架包下载到本地,然后 yeoman 就会根据这些脚手架包自动生成各种不同的项目。
yeoman 固然好用,但总是多了一步很是麻烦,还得下载脚手架包。市面上还流行 cli 技术,就是针对远程仓库的模板根据一些配置拉取到本地。显然 cli 的模式很好,不用下载就可以。我们依据这个原理自己搭建了一款叫做 fecli 的脚手架。
技术栈
项目核心
一张图说明整体的架构。⤵️
关于模板
模板 就是未来拉取下来的东西。这个模板里往往会有一些环境的配置,语法检测的配置,单元测试的配置,持续集成的配置等。
模板的相关信息会存放在 templates.json 文件中。用户也可以通过一些命令操作 templates.json 中的内容。
脚手架的文件结构
配置全局使用
新建一个目录
mkdir fecli
,并进入cd fecli
。然后 npm 初始化一下npm init
。 为了可以全局使用,我们需要在 package.json 里面设置一下:本地调试的时候,在项目根目录下执行:
npm link
。即可把 fecli 命令绑定到全局,以后就可以直接以 fe 作为命令开头。
入口文件的设置
在 package.json 里面写入依赖并执行
npm install
或者yarn install
:在根目录下建立 \bin 文件夹,在里面建立一个
fe.js
文件。这个 bin/fe.js 文件是整个脚手架的入口文件,所以我们首先对它进行编写。首先是一些初始化的代码,很简单就是引用了一下命令管理的文件(lib/cli/index.js):
命令管理 (lib/cli/index.js)
首先是一些初始化的事情:
我们通过 commander 来设置不同的命令。 command 方法是设置命令的名字。 description 方法是设置描述。 alias 方法是设置简写。 action 方法是设置回调。
如果没有参数,运行帮助方法。接下来是解析 program.args 中的参数:
运行
fe
之后的结果:commander 的具体使用方法在这里就不展开了,可以直接到官网去看详细的文档。
处理用户输入
在项目根目录下建立 /lib/cmd 文件夹,专门用来存放命令处理文件。
在根目录下建立 templates.json 文件并写入如下内容,用来存放模版信息:
添加模板 (
fe add
)删除模板 (
fe delete
)初始化项目 (
fe init
)显示模板列表 (
fe list
)现在我们的 fecli 脚手架工具已经搭建好了,一起来尝试一下吧!
使用测试
fe add
添加模板fe delete
添加模板fe list
添加模板fe init
添加模板项目源码
更多源码信息请移步 fecli 。
The text was updated successfully, but these errors were encountered: