Brunch:入门上手
在 Phoenix 项目中遇到关于 Branch 这个 HTML5 构建工具的问题, 在这里为了剥离问题的复杂度, 独立创建一个 Branch 前端项目来探索如何使用 Brunch 这个全新的前端构建工具.
Brunch 是一个HTML5的构建工具, 对于前端开发, 它能够帮助你设置和维护高效的工作流.
Brunch 能够:
编译脚本, 模板和样式单
Lint工具
把Javascript代码包装成
CommonJS或AMD模块合并脚本和样式文件
自动复制资源和静态文件
监视文件变更并重新编译
错误通知(桌面通知,使用
brunch watch时如果发生错误,会以桌面通知的形式通知你)
这篇指南的目的是实现一个简单的Branch演示程序来了解一个Branch项目的结构. 然后展示如何使用项目骨架来开始构建和创建应用程序.
安装 Brunch
npm install -g brunch
确认安装过程完成后, 使用下面的命令验证安装是否成功:
brunch -v
如果输出版本号, 标识安装成功
2.8.2
创建一个基本的Brunch项目
为了掩饰一个Brunch项目的结构和工作流, 我们用一个静态的HTML页面, CSS样式单(使用SASS, 以及一个基本的ES3/ES5 Javascript文件创建一个简单的演示程序.
首先使用下面的命令创建一个基本的项目目录结构和配置文件:
brunch new branchio-semantic-ui-demo
有很多命令行选项可以用, 我们将在稍后再来探讨.
基本的项目目录结构如下:
├── README.md
├── app
│ ├── assets
│ │ └── index.html
│ └── initialize.js
├── brunch-config.js
└── package.json
app, 项目的源代码目录, 包括脚本文件, 样式表文件, 模板文件, 这些需要被Branch编译的文件放在这里.assets, 静态资源目录, 该目录会递归地不加修改和处理地复制到目标目录(一用于存放需要部署到线上Web服务器的目录)public
设置项目文件
下面是一个简单的HTML页面, 我们将以此作为例子来说明.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<title>Brunch with ES6</title>
<link rel="stylesheet" href="/app.css">
<style type="text/css">
body {
background: #FFF;
}
#app {
font-size: 14px;
font-family: Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;
}
#app > div {
margin: 100px 0;
}
</style>
</head>
<body>
<div id="app" class="ui container">
<div class="ui card">
<div class="image">
<img src="/images/avatar2/large/kristy.png">
</div>
<div class="content">
<a class="header">Kristy</a>
<div class="meta">
<span class="date">Joined in 2013</span>
</div>
<div class="description">
Kristy is an art director living in New York.
</div>
</div>
<div class="extra content">
<a>
<i class="user icon"></i>
22 Friends
</a>
</div>
</div>
</div>
<script src="/vendor.js"></script>
<script src="/app.js"></script>
</body>
</html>
@import url(http://fonts.googleapis.com/css?family=Roboto+Slab);
$default-bg: lightblue;
$default-text: black;
$roboto-slab: 'Roboto Slab';
body {
font-family: $roboto-slab;
font-size: 16px;
background: $default-bg;
color: $default-text;
}
h1 {
font-size: 2em;
margin: 0.5em 0 1em;
& > small {
color: red;
font-size: 70%;
}
}
安装Brunch插件
npm install --save-dev javascript-brunch sass-brunch
构建项目文件
brunch build
生成的文件在public目录中, 如果想压缩, 合并这些文件, 可以带 --production, 或 -p 参数.
brunch build -p
public 目录是可以完全删除的, 重新运行 brunch build 会自动重新编译和生成.
即时预览
branch watch --server 这个命令可以自动监视项目目录, 并且启动了一个Web服务器监听在本机http://localhost:3333这个地址上, 在浏览器上输入http://localhost:3333可以实时预览你的修改, 浏览器会自动刷新页面.
关于ES6
如果想用ES6开发项目, 在创建项目的时候可以用es6模板来生成一个项目
brunch new proj -s es6
自动刷新
很多年前那种编辑 -> 刷新 -> 编辑 -> 刷新的工作流已经不适合现代工程化的前端开发了, 我们需要的是效率, 把重复的工作交给机器自己做. 因此我们需要自动刷新页面预览修改效果. 这里用到了Brunch的 auto-reload-brunch 插件. 首先需要安装它.
npm install --save auto-reload-brunch
注: 经过测试, 目前
auto-reload-brunch插件只能用于brunch watch命令,brunch watch --server的自动刷新有问题, 只能单独用一个Web服务器来把public目录作为根目录提供服务.
大多数情况下, 自动加载插件不需要任何配置就可以直接工作.
配置为文件
Brunch 和 Npm 的集成, 如果打开Npm的支持, Brunch 能够直接使用 package.json 文件中的信息来把Npm工具集成到Brunch项目当中.
完整的配置文件
module.exports = {
npm: {
enabled: true
},
files: {
javascripts: {
joinTo: {
'vendor.js': /^(?!app)/,
'app.js': /^app/
}
},
stylesheets: {
joinTo: {
'vender.css': /^node_modules/
}
}
},
paths: {
"public": "public",
"watched": [
"app/"
]
},
modules: {
autoRequire: {
"js/app.js": ["app/app"]
}
},
plugins: {
babel: {presets: ['es2015']},
coffeescript: {bare: true},
autoReload: {
delay: 500,
enabled: true,
port: [9000],
forceRepaint: true,
host: "127.0.0.1"
}
}
};
集成 Semantic UI
Semantic UI 是一个类似 Bootstrap 的CSS框架, 它比较符合我这种外观党的审美, 它做出来的默认UI样式确实看上去比Bootstrap默认的UI要精美一些, 对于我这种懒得去调CSS样式的人来说, 是比较合适的. Semantic UI官方文档的安装说明介绍说用 npm install semantic-ui --save 的方式来安装. 安装过程会提示你选择一大堆配置和路径, 选择默认安装选项即可.
默认安装到项目目录的semantic子目录下. 同时, 在项目根目录下还会生成一个 semantic.json 的文件用于描述 Semantic UI的配置.
Branch 默认的前端源代码目录为 app, 为了保持项目的干净, 我创建了一个app/app.less文件来导入(@import) Semantic UI的LESS库文件. 下面是app.less文件的内容, 很简单就一行:
@import '../../semantic/src/semantic';
导入时注意一下相对路径就好. 现在就完成了Semantic UI框架的引入了. brunch build 一下在 public 目录中就可以看到编译后的输出了, 对了不要忘了安装Brunch 的 less-brunch插件:
npm install --save less-branch
源码
https://github.com/developerworks/branchio-semantic-ui-demo
参考资料
https://community.nitrous.io/tutorials/getting-started-with-brunch
http://brunch.io/docs/getting-started
Brunch:入门上手的更多相关文章
- R语言快速入门上手
导言: 较早之前就听说R是一门便捷的数据分析工具,但由于课程设计的原因,一直没有空出足够时间来进行学习.最近自从决定本科毕业出来找工作之后,渐渐开始接触大数据行业的技术,现在觉得是时候把R拿下 ...
- 【Spring-Security】Re01 入门上手
一.所需的组件 SpringBoot项目需要的POM依赖: <dependency> <groupId>org.springframework.boot</groupId ...
- 快速入门上手JavaScript中的Promise
当我还是一个小白的时候,我翻了很多关于Promise介绍的文档,我一直没能理解所谓解决异步操作的痛点是什么意思 直到我翻了谷歌第一页的所有中文文档我才有所顿悟,其实从他的英文字面意思理解最为简单粗暴 ...
- Orchard学习资料,适合入门上手
名词解释: http://www.cnblogs.com/esshs/archive/2011/06/01/2067501.html Orchard如何工作: http://www.cnblogs ...
- MongoDB 上手开发实践(入门上手开发这一篇就够了)
前言 MongoDB是一个介于 关系数据库 和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复 ...
- 快速入门上手Markdown
第一次接触Markdown是写代码初期看很多大佬的github,他们的项目一定会有一份文件叫Readme.md的文件 他们由一些简单美观的符号和汉字字母组成,编译之后成为一篇简单直观的文档 深入了解之 ...
- Elasticsearch 教程--入门
1.1 初识 Elasticsearch 是一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎,可以说 Lucene 是当今最先进,最高效的全功能开源搜索引擎框架. 但是 L ...
- 快速入门cocos2d-x jsbinding
如果你是一个cocos2d-x的老手,那你可以忽略这篇博文,如果你是一个接触过javascript,想通过HTML5做游戏的,但是苦于不知道如何下手,那么这篇博文可能会帮到你. cocos2dx-js ...
- DIY智能家居——零基础入门篇
概要 本文主要根据笔者从零开始接触硬件,以小白视角开启IoT探索,根据相关资料DIY一个温湿度传感器.后经过探索发现新大陆--Home Assistant&Homebridge,最终实现了一个 ...
随机推荐
- CSS/CSS3语法新特性笔记
CSS层叠样式表 三大特性 层叠性:相同的样式会覆盖 继承性:属性可向下继承 优先级:范围越小权重越高 选择器 基础选择器 标签选择器 1 body { 2 color:#fff; 3 } 类选择器 ...
- Python:格式化字符串的几种方式
1.% 'abc%s'%'123' 'abc123' 'abc%s%s'%('123','456') 'abc123456' 当变量v是一个Tuple.List且其中元素数量和字符串中%数量相同时,可 ...
- net core or Linux
某用户执行net core sdk 版本不生效 sudo chmod +x /home/username/netcore3.1sdk/dotnet //某个用户执行新版本net core sdk
- 创建vue脚手架步骤
一.在cmd配置npm淘宝镜像 npm config set registry https://registry.npm.taobao.org 二.仅第一次执行安装,安装好后关掉cmd后再开,这个时候 ...
- java的三大特性----封装、集成、多态
当我们被问到你对java的封装.继承.多态是什么看法的时候,你会想到什么? 想到的会不会是封装就是将类的成员属性用privet修饰一下,达到私有化的目的,只暴露方法,从而达到成员变量私有化的目的. 而 ...
- 云原生入门 第五章:kubernetes学习实践
1. 简介 在本章中,我们将学习不同的Kubernetes对象,它们的用途以及如何与它们交互. 在设置集群或使用现有集群之后,我们可以开始部署一些工作负载.Kubernetes中最小的计算单元不是一个 ...
- Net中委托之一
1.委托的用法 委托是一种特殊的类型 a. 委托可以类外定义,也可以在类里面定义 b. 委托的操作步骤 1.委托的声明 2.委托的实例化 3.委托的调用 2.委托实例 amespace MyDeleg ...
- Java基础——方法重写
什么是方法重写? 子类中出现和父类中完全一样的方法声明 什么时候可以进行方法重写? 在子类需要父类的功能的同时,功能主体子类有自己的特有内容时,可以重写,一面沿袭了父类的功能一面又定义了子类特有的内容 ...
- 关于linux下的open()write()read()close()函数
http://blog.sina.com.cn/s/blog_71d1a98701010s0v.html 1.read和write函数调用时,都会记录下当前写的位置,下次调用时就会从这个位置开始读或写 ...
- [应用软件] VMware Workstation 12.0.0 Pro 正式版下载【附注册机+注册码】
软件信息 软件名称: VMware Workstation 软件版本: 12 软件大小: 300 MB 软件语言: 简体中文 更新时间: - 软件授权: 免费 软件类别: 安装版 运行环境: WinX ...