Node.js 自动化工具 - YEOMAN

接着上篇的《 利用Node.js搭建前端自动化平台 》我们开始搭建自己的前端工作流吧!
要启动一个项目,最先要做什么?当然是搭建一个目录结构,新建一个带项目名字的文件夹,再新建一个app文件夹,里面要有common,css,img ... 对了,还要有test文件夹写单元测试,嗯 ~ 大概长这样子吧

ProjectName/
├── app/  "app = Application    (应用)"
│    ├── src/    "src = source  (源代码)"
│    │    ├── common/
│    │    │    ├── app.js
│    │    │    ├── directives.js  "指令"
│    │    │    ├── filters.js
│    │    │    ├── services.js
│    │    │    └── controllers.js
│    │    ├── css/
│    │    ├── img/
│    │    ├── js/
│    │    ├── lib/  "lib框架引用"
│    │    └── module/   "路由"
│    │          ├── header/
│    │          └── footer/
│    │                ├── js/
│    │                └── view/
│    ├── dist/   "dist = distribution   (发布版本)"
│    │    ├── css/
│    │    ├── js/
│    │    └── html/
│    └── index.html
│                
├── test/
│    ├── unit/   "单元测试用例"
│    ├── e2e/   "e2e = end to end   (端口测试用例)"
│    └── karma.conf.js  "karma测试的配置文件"
│
├── node_modules/   "node插件包"
│
└── package.json        "node配置文件"

等等!NO!NO! 我们说好的自动化呢?这样子太low了!

  • 虽然你可以用你的IDE实现模板项目,但对于一个新手怎么确定自己的目录结构是合理高效的呢?
  • 在团队协作中,(幻想一下)身为架构师的你怎么保证团队立项是合乎规范的呢?
  • 那些配置文件呢,也要一个个建立吗?

没错为了解决这么low的行为,这时候 YEOMAN 出现了!

THE WEB'S SCAFFOLDING TOOL FOR MODERN WEBAPPS

“ 一个现代webapp的脚手架搭建工具 ”


打开它的主页,看到旁边的 The Yeoman Team 了吗?yeoman就是由这群 " Engineering manager at Google working on Chrome " 谷歌的工程师开发的,是不是跟我一样希望有朝一日自己的头像能出现在这个列表中呢!

我在网上看了几篇YEOMAN的教学博客,还是觉得混乱,没办法只能硬下头皮用我那可怜的英文能力读官方文档 QAQ
下面就贡献下我啃官档后的经验:

安装 YEOMAN

说到安装,现在大家都驾轻就熟了吧,打开终端,输入

$ cnpm install -g yo

一般看博客都能看到这个 后接命令,这个 只是表达在终端运行的意思,实际不用输入;-g 则是表示全局安装,更多百度 npm教程

这时候你一定会奇怪,不是叫 YEOMAN 吗?怎么这里写 yo 。事实上 yeoman 在 npm 中注册的名字是 yo 而不是 yeoman,又会有人反驳了,说 yeoman 是谷歌创建的工作流,里面包含 YO,GRUNT,Bower!煞有其事的做了一张图:
[图片上传失败...(image-c6c1a7-1556162568620)]
但是我们分别打开 GruntBower 的官网,可以发现Grunt的Development Team是由一群大神组成的GitHub项目,而Bower则是由 Twitter 的两位工程师开创的。

Bower was created at Twitter by @fat and @maccman, originally released as part of Twitter’s open source effort in 2012. Since its release, numerous individuals have made contributions. Bower is a team effort.

在 YEOMAN 的官网中也只是推荐 Yeoman workflow 这种工作流,所以是谷歌推荐的工作流模式 Yeoman workflow 包含这几种工具,而不是 Yeoman 包含这几种工具,Yeoman 只是一个脚手架工具。

YEOMAN 推荐的分别是 scaffolding templates 【YO】,build systems【Gulp or Grunt】,package managers【npm and Bower】

安装 yo 完成后,我们输入 yo 运行 Yeoman 会有下面的提示出现:

(第一次运行时它会问你是否加入用户改善计划,选择 Y 就好了,当然也可以 N 不理它。)

C:\Users\Max>yo
? 'Allo! What would you like to do?
  Run a generator
  ──────────────
> Install a generator
  Find some help
  Get me out of here!
  ──────────────

上下方向键可以选择你想要做的操作,其他不用说了,直接解释下这个 Install a generator 。Generator 词义为: n. 发电机,发生器;生产者,创始者; 但在这里我更愿意把它称为模具

在 Yeoman 的官网上我们进入 Discovering generator 可以发现许多规范化的模具。记住,带两撇胡子的是通过官方验证的模具哟。



当我们在 Install a generator 处,按下回车,会提醒下面这句话:

? Search npm for generators:

这时可以选择你喜欢的模具啦!默认,直接回车是选择 webapp 这个模具。
比如我们现在试着创建 angular 的模板项目

? Search npm for generators:angular

这里最惨的是,他默认是用 npm 安装模板的,假如你的机子没有 VPN 恭喜你,慢慢等吧~
npm 官方站点并没有被墙,所以还是可以成功下载的,不成功就多试几次)
等太久的话,可以终止程序运行,这里教大家一个小技巧,连续按两次 Ctrl + C 是可以终止程序的,当然你关掉重新打开也行。虽然这样,它还是非常容易出现 ParseError 的报错,别急,哥再给你一个方法保证成功。还是熟悉的配方,熟悉的味道,我们只要在终端中输入:

$ cnpm install -g generator-angular

就可以实现安装angular模具了~ 嘻嘻,又能使用cnpm了,速度就是快!( “-g” 是否全局安装看你自己)



安装成功后,重新运行 yo 是不是发现多了两个选项【Angular】、【Update your generators】这就表明模具安装成功了!列举下常用的模具:

创建项目

安装完了,我们实操一遍吧~
(如果你是接着上面继续往下写的话,可以尝试下 cls 这个命令清屏,将终端界面变干净点)
打开终端 cmd (window下),输入 cd 命令:

$ cd Desktop

cd 进入文件夹命令,这里我们进入桌面

$ mkdir yeoman-demo

mkdir 新建文件夹命令,这里我们新建一个叫 yeoman-demo 的文件夹,这时候你可以在桌面发现这个文件夹,或者输入 dir 命令查看桌面的文件列表,也是可以发现这个文件夹的。

cd进入 yeoman-demo 文件夹后,运行 yo 命令,选择Angular,回车它会询问项目需要包含的框架


  • 【Gulp or Grunt】后面文章中会详细讲解
  • 【Sass】是类似于 Less 的 "CSS预处理器",先给自己埋个坑《CSS预处理器 - Sass》
  • 【Bootstrap】大家都很熟悉了,是一个由Twitter推出的一个用于前端开发的开源工具包

我们只是做个实例,都选 y 就好了(【Sass】是需要【Ruby】的,可以选择N),空格选择angular包含的组件,回车确定。这时候它可能会报错:

You don’t seem to have a generator with the name “karma:app” installed.

表明你的计算机没有含有 karma 这个组件,karma 一个用于自动化单元测试的npm组件。

Karma是Testacular的新名字,在2012年google开源了Testacular,2013年Testacular改名为Karma。Karma是一个让人感到非常神秘的名字,表示佛教中的缘分,因果报应,比Cassandra这种名字更让人猜不透!
Karma是一个基于Node.js的JavaScript测试执行过程管理工具(Test Runner)。该工具可用于测试所有主流Web浏览器,也可集成到CI(Continuous integration)工具,也可和其他代码编辑器一起使用。这个测试工具的一个强大特性就是,它可以监控(Watch)文件的变化,然后自行执行,通过console.log显示测试结果。
—— 来自博客《Karma和Jasmine自动化单元测试》

我们可以通过命令 $ cnpm install -g karma$ cnpm install -g generator-karma 进行安装(假如等待过久的话,终止程序,尝试下运行命令 $ npm config set registry https://registry.npm.taobao.org 将npm的下载地址转变为cnpm,下次遇到等待也可以这样解决,秒装的哟~),安装完成后继续执行 yo Angular 命令,等待安装完成后,就会弹出配置 package.json 选项(画重点,package.json 一个描述该项目信息的文件,每个项目中必要文件,后面Gulp会细讲),然后看看它的配置选项自行选择。

补充下代码界常识 ( Ynaxdh )

Here the complete list of answers:
Y: yes (Default)
n: no
a: yes to this question and all others (or always yes).
x: abort (exit)
d: show the differences between the old and the new file
h: help, list all options
So if you don't remember this definitions you can always enter h and see the list. Also in the new version, when you enter one of the letters you will see the definition showing behind the question.
The one in uppercase is the default one. If that is your choice, you can just hit enter.
——— By Jesús Carrera

issue

  • 假如下载安装过程中卡顿在这条命令:
    npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
    你可以终止程序,并执行命令:
    cnpm install minimatch@"3.0.2"
  • 假如还是等待很久的话,可以终止程序,先安装【Gulp or Grunt】
    $ cnpm install -g gulp
    $ cnpm install -g grunt
  • 还可以尝试下官方入门模具【webapp】,在新项目下运行:
    $ cnpm install -g generator-webapp
    $ yo webapp

完成安装

完成后你会看到大概这样的项目结构:

├─ app/
│  ├─ images/
│  │  ├─ glyphicons-halflings.png
│  │  └─ glyphicons-halflings-white.png
│  ├─ scripts/
│  │  ├─ vendor/
│  │  │  └─ bootstrap.js
│  │  ├─ app.js
│  │  ├─ hello.coffee
│  │  └─ main.js
│  ├─ styles/
│  │  └─ main.css
│  ├─ .htaccess
│  ├─ 404.html
│  ├─ favicon.ico
│  ├─ index.html
│  └─ robots.txt
│
├─ node_modules/
│  ├─ so/
│  ├─ many/
│  └─ packages/
│
├─ test/
│  ├─ spec/
│  │  └─ test.js
│  ├─ .bowerrc
│  ├─ bower.json
│  └─ index.html
│
├─ .bowerrc
├─ .editorconfig
├─ .gitattributes
├─ .gitignore
├─ .jshintrc
├─ bower.json
├─ Gruntfile.js
└─ package.json

有很多东西对不对,不要怕,后面的文章中我们会一个个的击破它~
好啦,至此我们已经学会了如何利用 yeoman 自动化创建一个项目结构了!

YEOMAN 补充

  • 当我们在新环境中,可以按以下命令模式,快速建立环境:
    $ cnpm install -g yo generator-webapp glup
    generator-something 可以接你需要的模具

  • 在项目中,我们也可以用以下命令快速构建:
    $ yo webapp

  • 当你想查看这个模具有什么样的配置时,可以使用下面命令:
    $ yo webapp --help

  • 当你想查看,这个模具在GitHub具体说明时,可以使用下面命令:
    $ cnpm home generator-webapp

  • 当 Yeoman 不能正常工作时,可以使用下面命令排除问题:
    $ yo doctor
    还不能解决点击 support 查询

  • 一个模具可能非常多的功能,这样就衍生出子模具 (sub-generator) 的出现,如你想使用这个子模具,例angular:controller
    $ yo angular:controller MyNewController

Generators scaffolding complex frameworks are likely to provide additional generators to scaffold smaller parts of a project. These generators are usually referred to as sub-generators, and are accessed as generator:sub-generator.

单词 解释
deployment n. 调度,部署
resource n. 资源;物力
provide vt. 提供;规定;准备;装备
other than 除了;不同于
complex adj. 复杂的;合成的
yeoman n. 自耕农;自由民;仆人
scaffolding n. 脚手架;搭脚手架的材料
generator n. [电] 发电机;[计] 生成器
referred to as 被称为…
utilizing 利用

那下篇我们来学习《 Node.js 自动化工具 - Bower 》


该篇收录于文集:Node教程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容