浅谈前端常用脚手架cli工具及案例
前端常用脚手架工具
前端有很多特定的脚手架工具大多都是为了特定的项目类型服务的,比如react项目中的reate-react-app,vue项目中的vue-cli,angular
项目中的angular-cli根据一些信息创建对应的项目基础结构,只适用于对应的项目,还有一些对应的项目脚手架工具比如Yeoman。
根据模板生成对应的结构,比较灵活,容易拓展,还有一种脚手架工具plop,例如创建一个组建/模块所需要的文件.
一.Yeoman简介
Yeoman是一款最老牌最通用的脚手架工具,基于node.js开发的工具模块,是一款创建现代化应用的脚手架工具,不同于vue-cli这样
的工具,Yeoman更像是一个脚手架的运行平台,通过不同的Generator搭建属于自己的脚手架。
Yeoman的基本使用
首先,检查下node环境,另外个人感觉yarn的用户体验更加好一点,后续我们使用yarn代替npm去安装确保电脑上有node和yarn.

具体安装步骤如下:
yarn global add yo (yo就是工具模块的名字)
yarn global add generator-node //必须要搭配对应的Generator去使用
mkdir my-module (找到合适的文件夹)
cd my-module
yo node (运行特定的generator,把前面generator-去掉)

如上图所示文件夹中生成了基础的项目结构以及接触的项目代码.
Sub Generator
有时候我们并不需要创建完整的项目结构,可能我们只是在已有的项目结构上创建项目文件,比如在原有基础上新增eslint功能,我们
可以用生成器帮我们生成,这样会提高我们的效率,我们可以用
Yeoman提供的一些特性
比如添加一个cli应用,可以执行yo node:cli命令(命名方式为yo genrator:sub genrator)如下图所示,提供了一些基础的代码结构,
有了这个我们就可以把它当成个全局的命令行模块使用了,下面执行yarn link到全局范围,然后执行yarn安装依赖,把所需要的依赖
安装进来,执行my-module --help就可以看到sub generator特性.

综上所述,Yemon的使用步骤
1.明确你的需求
2.找到合适的Generator
3.全局范围内安装找到的Generator
4.通过Yo运行对应的Generator
5.通过命令行交互填写选项
6.生成你所需要的项目结构
创建一个自定义的Generator模块
Generator本质上就是一个npm模块,Generator有一个固定的结构,里面有一个generators的目录,下面有个app的文件夹生成对应文件的代码,
如果需要多个sub Generator,例如添加一个component目录,那么我们的模块就生成了一个component的子生成器,如下图所示:

yemon的生成器名称必须是generator-<name>的名称
下面按照具体步骤创建一个generator自定义模块,
1.创建空一个文件夹generator-sample
2.通过yarn init创建一个package.json
3.运行yarn add yeoman-generator 创建一个积类,里面很多方法让我们后续更加便捷
4.创建如下图所示的generators/app/index.js文件

5.yarn link 链接到全局范围 使之成为全局模块
6.另外创建一个空文件夹,运行yo sample 发现创建了temp.txt

根据模板创建文件
很多时候自动创建的文件有很多,也比较复杂,我们可以使用模板去创建文件,我们使用模板创建可以大大提高效率
具体步骤如下:
1.在app文件夹下创建templates/foo.txt

2.修改index.js代码 如下图所示

3.在新文件夹 运行yo sample

接收用户输入
像一些动态的数据,在generator中想要发起一个命令行交互的询问,可以通过实现promit方法实现
具体步骤如下:
1.在app文件夹下创建templates/bar.html
2.修改index.js代码如下图所示


3.在新文件夹 运行yo sample (备注:my-project为自定义)

Vue Generator案例
下面我们自定义一个有基础代码的vue脚手架,首先创建项目结构,生成一个generator,用于生成项目结构,如下图所示:

具体步骤如下:
1.makdir generator-namelw (合适路径创建目录)
2.yarn init (生成package.json)
3.yarn add yeoman-generator (安装yeoman依赖)
4.创建目录机构如下图所示

5.修改app/index.js代码如下图所示:

6.yarn link (link到全局)
7.在新文件夹 运行yo lwname
二.plop简介
plop是一款创建文件项目中特定类型的小脚手架工具,有点像Yeomon中的sub generator一般不会独立去使用,一般会把plop集成到
项目中,去自动化的创建同类型的项目文件.
plop的具体使用
1.首先安装依赖yarn add plop --dev
2.根目录下新建plopfile.js文件(plop的入口文件)
3.根目录下创建plop-templates/component.hbs文件
4.yarn plop component

三.脚手架的工作原理
用node.js开发一个小型的脚手架工具,体会下工作流程(由于都差不多,我只写步骤,有需要自己去搭建下就好)
1.makdir sample-nodecli
2.cd sample-nodecli
3.yarn init 生成package.json字段 
4.package.json里面添加bin字段 "bin":"cli.js"
5.根目录下创建cli.js //如下图所示
6.yarn link
7.yarn add inquirer
8.创建模板templates/index.html
9.yarn add ejs 通过模板引擎去渲染对应的文件
10.空文件夹运行sample-nodecli


浅谈前端常用脚手架cli工具及案例的更多相关文章
- 浅谈C#常用集合类的实现以及基本操作复杂度
		List 集合类是顺序线性表,Add操作是O(1)或是O(n)的,由于List的容量是动态扩容的,在未扩容之前,其Add操作是O(1),而在需要扩容的时候,会拷贝已存在的那些元素同时添加新的元素,此时 ... 
- 闲聊——浅谈前端js模块化演变
		function时代 前端这几年发展太快了,我学习的速度都跟不上演变的速度了(门派太多了,后台都是大牛公司支撑类似于facebook的react.google的angular,angular的1.0还 ... 
- Vue 浅谈前端js框架vue
		Vue Vue近几年来特别的受关注,三年前的时候angularJS霸占前端JS框架市场很长时间,接着react框架横空出世,因为它有一个特性是虚拟DOM,从性能上碾轧angularJS,这个时候,vu ... 
- WEB前端常用的测试工具
		一.QUnit 前端测试工具 QUnit是一个强大的JavaScript单元测试框架,该框架是由jQuery团队的成员所开发,并且是jQuery的官方测试套件.Qunit是Jquery的单元测试框架, ... 
- 浅谈前端nuxt(ssr)
		SSR: 服务端渲染(Server Side Render),即:网页是通过服务端渲染生成后输出给客户端. 一.那为什么要使用SSR呢? 我用一句话理解的就是降低SPA(Single Page App ... 
- 浅谈前端与SEO
		转载地址: https://blog.csdn.net/lzm18064126848/article/details/53385274?tdsourcetag=s_pctim_aiomsg SEO(S ... 
- 【译】浅谈微软OneNote的自动化测试工具
		当我们向人们介绍OneNote的自动化时,有一个问题被相当频繁地提到,担忧我们的自动化框架中UI层面测试偏少. 我不喜欢基于UI的自动化.我知道在市场上有许多的自动化系统都是基于UI的自动化(点击按钮 ... 
- 浅谈前端中的mvvm与mvc
		用了vue这么久,却没有认真的关注mvvm与mvc,着实汗颜.趁着周末刚好看了一下网上的文章还有书籍,简单的谈一下我的理解. -以下图片均摘自网络. 一.MVC 特点:单项通讯 视图(View):用户 ... 
- 浅谈前端JavaScript编程风格
		前言 多家公司和组织已经公开了它们的风格规范,详细可參阅jscs.info,以下的内容主要參考了Airbnb的JavaScript风格规范.当然还有google的编程建议等编程风格 本章探讨怎样使用E ... 
随机推荐
- python简单的函数应用
			一个简单的函数应用,包括自定义函数,lambda函数,列表解析. 1 #!usr/bin/env python3 2 # -*- coding:utf-8 -*- 3 4 #开始定义函数 5 def ... 
- Asp.Net Core仓储模式+工作单元
			仓储模式+工作单元 仓储模式 仓储(Repository)模式自2004年首次作为领域驱动模型DDD设计的一部分引入,仓储本质上是提供提供数据的抽象,以便应用程序可以使用具有接口的相似的简单抽象集合. ... 
- 【终极版】利用阿里云云解析API实现动态域名解析(ddns),搭建私有服务器【含可执行文件和源码】
			前言:懒人可以直接往下看,有代码和全部资源可以下载.此文章是先前文章的定时版,主要是添加了定时执行的功能,并且将代码中的配置项放置到了app.config文件中,方便不懂开发的朋友修改使用.未经许可请 ... 
- RxJava +Retrofit 简单使用
			1.添加依赖 compile 'com.squareup.retrofit2:converter-gson:2.3.0' compile 'com.squareup.retrofit2:adapter ... 
- 容器编排系统K8s之访问控制--准入控制
			前文我们聊到了k8s的访问控制第二关RBAC授权插件的相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14216634.html:今天我们来聊一下k8 ... 
- 实现连续登录X天送红包这个连续登录X天算法
			实现用户只允许登录系统1次(1天无论登录N次算一次) //timeStamp%864000计算结果为当前时间在一天当中过了多少秒 //当天0点时间戳 long time=timeStamp-timeS ... 
- java线程调度
			JAVA线程调度分抢占式和协调式 协调式的线程切换由线程本身自己控制,好处是实现简单,当前线程只有当事情做完才会通知系统进行切换并没有同步开销,坏处是容易引发事故,假如阻塞的线程由于代码BUG没有通知 ... 
- js--数组的every()和some()方法检测数组是否满足条件的使用介绍
			前言 阅读本文之前先来思考一个问题,如何如实现判断一个数组中是否存在满足条件的元素,如何去判断数组中是否全部元素都满足判断条件,这里可能能想到使用for循环遍历数组,if()判断每一项是否符合条件,同 ... 
- 大数据量查询容易OOM?试试MySQL流式查询
			一.前言 程序访问 MySQL 数据库时,当查询出来的数据量特别大时,数据库驱动把加载到的数据全部加载到内存里,就有可能会导致内存溢出(OOM). 其实在 MySQL 数据库中提供了流式查询,允许把符 ... 
- ES快速开发,ElasticsearchRestTemplate基本使用以及ELK快速部署
			最近博主有一些elasticsearch的工作,所以更新的慢了些,现在就教大家快速入门,并对一些基本的查询.更新需求做一下示例,废话不多说开始: 1. ES快速上手 es下载:[https://ela ... 
