本文是对 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. 开源:Taurus.MVC 框架

    为什么要创造Taurus.MVC: 记得被上一家公司忽悠去负责公司电商平台的时候,情况是这样的: 项目原版是外包给第三方的,使用:WebForm+NHibernate,代码不堪入目,Bug无限,经常点 ...

  2. dotNET跨平台相关文档整理

    一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...

  3. Kooboo CMS技术文档之五:站点配置管理

    站点关系 管理站点间的关系,站点可以有子站点,子站点继承父站点的部分配置数据,同时子站点还可以根据需要,本地化由父站点继承而来的数据.通过继承和本地化,可以让子站点在用最小的改动代价,来完成一个与父站 ...

  4. Struts2实现ajax的两种方式

    基于Struts2框架下实现Ajax有两种方式,第一种是原声的方式,另外一种是struts2自带的一个插件. js部分调用方式是一样的: JS代码: function testAjax() { var ...

  5. JavaScript基础知识总结(四)

    JavaScript语法 八.函数 函数就是完成某个功能的一组语句,函数由关键字function + 函数名 + 加一组参数定义: 函数在定义后可以被重复调用,通常将常用的功能写成一个函数,利用函数可 ...

  6. HTML+CSS 项目总结

    在过去的大概一个月的学习,基本掌握了HTML+CSS的用法和特性. 这个星期老师给我们布置了一个PC端的实战项目,并且要求在3-4天内完成,我不惜废寝忘食,在紧迫的时间内大致地完成了,但是有些效果不能 ...

  7. 【腾讯Bugly干货分享】Android Linker 与 SO 加壳技术

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57e3a3bc42eb88da6d4be143 作者:王赛 1. 前言 Andr ...

  8. Linux:将rhel yum 切换到centos yum

    Red Hat Enterprise Linux Server(RHEL) yum安装软件时This system is not registered with RHN. RHN support wi ...

  9. mono for android 自定义titleBar Actionbar 顶部导航栏 修改 样式 学习

    以前的我是没有做笔记的习惯的,学习了后觉得自己能记住,但是最近发现很多学的东西都忘记了,所有现在一有新的知识,就记下来吧. 最近又做一个mono for android 的项目 这次调整比较大,上次做 ...

  10. MVVM大比拼之knockout.js源码精析

    简介 本文主要对源码和内部机制做较深如的分析,基础部分请参阅官网文档. knockout.js (以下简称 ko )是最早将 MVVM 引入到前端的重要功臣之一.目前版本已更新到 3 .相比同类主要有 ...