热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Yeoman官网教学案例:使用Yeoman构建WebApp

STEP1:设置开发环境与yeoman的所有交互都是通过命令行。Mac系统使用terminal.app,Linux系统使用shell,windows系统可以使用cmderPowerShellcm

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,按回车运行生成器。

 

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,Sass,Redux 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 :构建任务

 .babelrc , package.json , node_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/browersync.js 中的browersync实现的。它会监测你的文件的变化然后自动加载。

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

 

STEP 6:使用karma和jasmine测试

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

6.1 运行测试单元

让我们返回命令行按 CtrlC 停止本地服务器。 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/todo.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 优化产品文件

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

  • lint 代码
  • 合并和缩小我们的脚本及样式来拯救那些网络请求,
  • 编译预处理器的输出结果,
  • 使应用程序更精炼

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

$ npm run build

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

 

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

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

$ npm run serve:dist

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

 


推荐阅读
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • 根据不同环境需求,利用 Vue CLI 的 `npm run build` 命令对项目进行定制化打包,如测试、预发布和生产环境。通过配置 `process.env` 变量,实现不同环境下接口和服务的动态切换,确保应用在各阶段都能高效运行和调试。 ... [详细]
  • IT企业通常配置多少Java开发者及Java岗位的发展前景分析
    在IT企业中,Java开发者的配置数量通常较多,反映了该语言在后端开发中的重要地位。与前端开发相比,Java的学习曲线可能更为平缓,但深度掌握仍需大量实践。Web前端开发则侧重于用户体验和浏览器兼容性,要求开发者具备扎实的技术基础和良好的审美观。从北上广深等一线城市的薪资水平来看,Java开发者普遍享有较高的薪酬待遇,且随着经验的积累,职业发展空间广阔。 ... [详细]
  • 深入解析JWT的实现与应用
    本文深入探讨了JSON Web Token (JWT) 的实现机制及其应用场景。JWT 是一种基于 RFC 7519 标准的开放性认证协议,用于在各方之间安全地传输信息。文章详细分析了 JWT 的结构、生成和验证过程,并讨论了其在现代 Web 应用中的实际应用案例,为开发者提供了全面的理解和实践指导。 ... [详细]
  • 本文详细解析了如何使用 jQuery 实现一个在浏览器地址栏运行的射击游戏。通过源代码分析,展示了关键的 JavaScript 技术和实现方法,并提供了在线演示链接供读者参考。此外,还介绍了如何在 Visual Studio Code 中进行开发和调试,为开发者提供了实用的技巧和建议。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • 全面解析Java虚拟机:内存模型深度剖析 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • REST API 时代落幕,GraphQL 持续引领未来
    尽管REST API已广泛使用多年,但在深入了解GraphQL及其解决的核心问题后,我深感其将引领未来的API设计趋势。GraphQL不仅提高了数据查询的效率,还增强了灵活性和性能,有望成为API开发的新标准。 ... [详细]
  • 深入解析 org.hibernate.event.spi.EventSource.getFactory() 方法及其应用实例 ... [详细]
  • 本文深入探讨了在React.js中为类组件实现自动绑定的方法与可能性。React.createClass会自动将所有方法绑定到实例,但在React的类组件中,这一功能并非内置。文章分析了如何通过特定技术手段或第三方库来实现类组件方法的自动绑定,以提升开发效率和代码可维护性。 ... [详细]
  • 【高效构建全面的iOS直播应用】(美颜功能深度解析)
    本文深入探讨了如何高效构建全面的iOS直播应用,特别聚焦于美颜功能的技术实现。通过详细解析美颜算法和优化策略,帮助开发者快速掌握关键技术和实现方法,提升用户体验。适合对直播应用开发感兴趣的开发者阅读。 ... [详细]
author-avatar
黄姐佛光普照_516
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有