本文是对 Yeoman 官网教学案例的翻译。

STEP 1:设置开发环境

与 Yeoman 的所有交互都是通过命令行。Mac 系统使用 terminal.app,Linux 系统使用 shell,windows 系统可以使用 cmder/PowerShell/cmd.exe。

1.1 安装条件

安装yeoman之前,你需要先安装如下内容

  • Nodejs v4 或者更高版本
  • npm
  • git

通过以下命令检查是否安装 Node 环境以及 npm 管理工具。

$ node -v && npm -v

npm 默认随 Node 一起安装。有些 Node 版本可能安装的是旧版本的 npm,你可以通过以下命令更新 npm

$ npm install -g npm@latest

通过以下命名检查是否安装git

$ git --version

1.2 安装yeoman工具箱

如果已经安装了 node 环境,可以通过以下命令安装 Yeoman

$ npm install -g yo

1.3 确认安装

首先确认 Yeoman 是否正确安装

$ yo --version

STEP 2:安装Yeoman生成器

在传统的 web开发中,你需要花大量时间为你的 webapp 设置模板代码、下载依赖包以及手动创建文件目录结构。Yeoman 的生成器会帮你搞定这一切。让我为 FountainJS 项目安装一个生成器。

2.1安装生成器

你可以通过 npm 命令安装 Yeoman 生成器,目前可用的生成器超过了 3500 个,大多数都是开源社区贡献的。

通过以下命令安装 generator-fountain-webapp

$ npm install -g generator-fountain-webapp

该命令将安装生成器所需的node包。

和使用 npm install 一样,你可以通过 Yeoman 的交互菜单搜索 generators。

运行 yo 然后选择 Install a generator 来搜索发布的生成器。

STEP 3:使用生成器搭建我们的app

我们已经使用多次“脚手架”这个词,但是你可能还不知道它是什么意思。在 Yeoman的 语境中,脚手架材料表示通过一些配置为你的 webapp 生成文件。在这一步中,你会看到 Yeoman 如何为你喜欢的库及框架生成文件,以及使用如 webpack/babel/Sass 等一些额外的库的配置。

3.1 创建项目文件夹

创建 mytodo 文件夹

$ mkdir mytodo && cd mytodo

生成器生成的脚手架文件会放在这个文件夹中。

3.2 通过 Yeoman 菜单使用生成器

再次运行 yo

$ yo

如果你已经安装了多个 generator,你需要从中选择一个。选中 Fountain Webapp,按回车 enter 运行生成器。

3.3 配置生成器

为了加快开发环境的初始化设置,有些生成器也会提供选项来自定义你的app的基础开发库。

FountainJS 生成器提供一些选项来匹配你的喜好。

  • 框架(React,Angular2,Angular1)
  • 模块管理工具(Webpack,SystemJS,none with bower)
  • JavaScript预处理器(babel,TypeScript,none)
  • css 预处理器(Sass,Less,none)
  • 三个模板app(a landing page,hello world,TodoMVC)

在该案例中,我们会使用 React, Webpack, Babel, SASSRedux TodoMVC 模板。

方向键选择,回车键确认。

Yeoman 会自动搭建你的 app,获取依赖包。几分钟之后我们将进行下一步。

STEP 4:查看Yeoman生产的app的目录结构

打开你的 mytodo

目录,看一下脚手架搭建了什么。应该如下图所示:

mytodo 文件夹中,我们有:

src: web应用的父目录

  • app:React+Redux的代码
  • index.html:基础html文件
  • index.js:TodoMVC app 的入口文件

conf:配置文件及第三方工具的父目录(Bowersync,Webpack,Gulp,karma)

gulp_tasks 和  gulpfile.js:构建任务

.babelrcpackage.jsonnode_modules:配置以及所需依赖包

.gitattributes  和 .gitignore:git的配置

STEP 5:在浏览器中预览你的app

如果想要在你喜欢的浏览器上预览你的 web app,你无须在电脑上做任何事情来设置本地服务器。这些都是 Yeoman 所做的一部分。

5.1 打开服务器

运行 npm 脚本,创建在 localhost:3000 (或者127.0.0.1:3000) 上预览的基于 node 的本地 http 服务器。

$ npm run serve

在浏览器的新页面打开localhost:3000

5.2 停止服务器

如果你想停止服务器,按 Ctrl + C 停止当前 CLI 的进程

注意:你不能在同一端口运行多个http服务器(默认3000)

5.3 查看你的文件

打开你喜欢的文本编辑器开始做点改变。每一次改变都会强制浏览器刷新而不需要你亲自操作。这种方式叫做即时加载(live reloading),可以实时查看app状态。

即时加载的功能是通过配置 gulpfile.js 中的 gulp tasks 以及 gulp_tasks/browsersync.js 中的 Browsersync 实现的。它会监测你的文件的变化然后自动加载。

如下,我们编辑 src/app/components 路径下的 Header.js

修改立即生效

STEP 6:使用karma和jasmine测试

有些人可能不熟悉Karma,它是不依赖于框架的测试运行器。Fountainjs 生成器中已经包含 jasmine 测试框架。。。。

6.1 运行测试单元

让我们返回命令行按 Ctrl+C 停止本地服务器。package.json 中已经有了运行测试单元的 npm 脚本。可以如下运行

$ npm test

每一个测试都应该通过.

6.2 升级单元测试

你可以在 src 文件夹中找到单元测试脚本,打开 src/app/reducers/todos.spec.js 。这是为 Todos reducers 编写的单元测试。举个例子,我们看一下验证初始状态的第一个测试。

it('should handle initial state', () => {
expect(
todos(undefined, {})
).toEqual([
{
text: 'Use Redux',
completed: false,
id: 0
}
]);
});

按如下修改

it('should handle initial state', () => {
expect(
todos(undefined, {})
).toEqual([
{
text: 'Use Yeoman', // <=== here
completed: false,
id: 0
}
]);
});

重新运行 npm test,可以看到如下错误:

if you want run test automatically on change you can use npm run test:auto instead

打开 src/app/reducers/todos.js

把初始状态改成

const initialState = [
{
text: 'Use Yeoman',
completed: false,
id: 0
}
];

你成功修复了测试

如果你的 app 越来越大或者更多的开发者参与进来,编写单元测试可以更容易的发现 bug。

STEP 7:使用 Local Storage 永久保存 todos

让我们重新看一下当刷新浏览器时 React/Redux mytodo 不能保存的问题。

7.1 安装 npm 包

为了轻松解决这个问题,我们可以使用另一个Redux模块“redux-localstorage”,它可以快速执行local storage

运行以下命令

$ npm install --save redux-localstorage@rc

7.2 使用redux-localstorage

Redux 需要配置才能使用,将 src/app/store/configureStore.js 修改如下

import {compose, createStore} from 'redux';
import rootReducer from '../reducers'; import persistState, {mergePersistedState} from 'redux-localstorage';
import adapter from 'redux-localstorage/lib/adapters/localStorage'; export default function configureStore(initialState) {
const reducer = compose(
mergePersistedState()
)(rootReducer, initialState); const storage = adapter(window.localStorage); const createPersistentStore = compose(
persistState(storage, 'state')
)(createStore); const store = createPersistentStore(reducer);
if (module.hot) {
// Enable Webpack hot module replacement for reducers
module.hot.accept('../reducers', () => {
const nextReducer = require('../reducers').default;
store.replaceReducer(nextReducer);
});
} return store;
}

如果你浏览器中查看应用程序,你会在待办事项列表看到一项“Use Yeoman”。

应用程序初始化时,如果本地存储是空的,则列表中不会有事项。

继续前进,并添加一些项目到列表中:

现在当我们刷新浏览器列表项依然存在。万岁!

我们可以确认一下数据是否保存在本地存储中,打开chrome浏览器的检查工具,产看 Resources 面板,从左边栏选择 Local Storage

STEP 8:为生产做准备

准备好把你 todo 应用程序展示给世界了吗?让我们尝试建立一个准备生产的版本。

8.1 优化产品文件

为了创建应用程序的生产版本,我们需要

  • 检查代码
  • 合并和缩小脚本及样式来减少网络请求
  • 编译预处理器的输出结果
  • 使应用程序更精炼

哇!令人惊讶的是,所有运行都可以通过:

$ npm run build

你的准备就绪的应用程序在 mytodo 项目的 dist 目录下,你可以使用 FTP 发布到服务器。

8.2 建立及预览生产的应用程序

如果想在本地预览 app,可以运行下面的 npm 脚本

$ npm run serve:dist

它会创建你的项目并且启动本地服务器。

Yeoman 官网教学案例:使用 Yeoman 构建 WebApp的更多相关文章

  1. angular 官网英雄案例 报错整理

    1.导入of 报错 import { of } from 'rxjs/observable/of'; 2. 服务注入报错 在app.module.ts引入 3.使用angular-in-memory- ...

  2. Vue(二十二)vuex小案例(官网计数案例整合)

    1.使用 vue-cli 创建项目(具体操作可以参考前面的文章) ... 2.下载 vuex - npm install vuex -S 3.将 vuex 添加到项目中 (1)在项目中创建store文 ...

  3. 基于 Azure IaaS 搭建企业官网的规划和实践

    本课程主要介绍了基于 Azure IaaS 搭建企业官网的案例分析和实践,实践讲解如何使用 Azure 门户创建虚拟机, 创建虚拟网络, 创建存储账户等. 具体包括项目背景介绍, 项目架构, 准备和实 ...

  4. MXNet官网案例分析--Train MLP on MNIST

    本文是MXNet的官网案例: Train MLP on MNIST. MXNet所有的模块如下图所示: 第一步: 准备数据 从下面程序可以看出,MXNet里面的数据是一个4维NDArray. impo ...

  5. spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包

    下载spring http://spring.io/ 最重要是在特征下面的这段话,需要注意: All avaible features and modules are described in the ...

  6. Vue组件化应用构建 官网例子 Unknown custom element: <todo-item>

     [博客园cnblogs笔者m-yb原创,转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708] htt ...

  7. ECharts概念学习系列之ECharts官网教程之自定义构建 ECharts(图文详解)

    不多说,直接上干货! 官网 http://echarts.baidu.com/tutorial.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%9E%84%E5%BB%BA%2 ...

  8. 【工利其器】必会工具之(二)Android开发者官网篇

    前言 当刚开始踏入Android程序员这个行业的时候,想必绝大多数的人都和笔者一样,热血沸腾,激情四射,买了很多讲解Android开发的书籍.当开发某个功能需要学习某方面知识的时候,大家又成了“面向百 ...

  9. [踩过的坑]Elasticsearch.Net 官网示例的坑

    经过昨天的ElasticSearch 安装,服务以及可以启动了,接下来就可以开发了,找到了官网提供的API以及示例,Es 官方提供的.net 客户端有两个版本一个低级版本: [Elasticsearc ...

随机推荐

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车

     阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...

  3. CSS3 3D立方体效果-transform也不过如此

    CSS3系列已经学习了一段时间了,第一篇文章写了一些css3的奇技淫巧,原文戳这里,还获得了较多网友的支持,在此谢过各位,你们的支持是我写文章最大的动力^_^. 那么这一篇文章呢,主要是通过一个3D立 ...

  4. geotrellis使用(二十八)栅格数据色彩渲染(多波段真彩色)

    目录 前言 实现过程 总结 一.前言        上一篇文章介绍了如何使用Geotrellis渲染单波段的栅格数据,已然很是头疼,这几天不懈努力之后工作又进了一步,整清楚了如何使用Geotrelli ...

  5. C# BackgroundWorker 详解

    在C#程序中,经常会有一些耗时较长的CPU密集型运算,如果直接在 UI 线程执行这样的运算就会出现UI不响应的问题.解决这类问题的主要途径是使用多线程,启动一个后台线程,把运算操作放在这个后台线程中完 ...

  6. document.compatMode

    在我电脑屏幕上显示的 电脑是 1920*1080这是在document.compatMode:css1Compat模式 window.screen.availWidth 1920 window.scr ...

  7. SharePoint 2016 必备组件离线安装介绍

    前言 SharePoint 必备组件安装,一直以来都是SharePoint安装过程中的最大的坑,尤其是不能联网的服务器.博主在这里简单介绍一下离线安装过程,并附组件包下载以及安装命令,并且在windo ...

  8. Apache Cordova开发Android应用程序——番外篇

    很多天之前就安装了visual studio community 2015,今天闲着么事想试一下Apache Cordova,用它来开发跨平台App.在这之前需要配置N多东西,这里找到了一篇MS官方文 ...

  9. Dancing Links and Exact Cover

    1. Exact Cover Problem DLX是用来解决精确覆盖问题行之有效的算法. 在讲解DLX之前,我们先了解一下什么是精确覆盖问题(Exact Cover Problem)? 1.1 Po ...

  10. CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4

    最新更新参看: Centos 7.0 安装Mono 3.4 和 Jexus 5.6 2012年初写过一篇<32和64位的CentOS 6.0下 安装 Mono 2.10.8 和Jexus 5.0 ...