在 Phoenix 项目中遇到关于 Branch 这个 HTML5 构建工具的问题, 在这里为了剥离问题的复杂度, 独立建立一个 Branch 前端项目来探索如何使用 Brunch 这个全新的前端构建工具.javascript
Brunch 是一个HTML5的构建工具, 对于前端开发, 它可以帮助你设置和维护高效的工做流.css
Brunch 可以:html
编译脚本, 模板和样式单前端
Lint工具java
把Javascript代码包装成 CommonJS
或AMD
模块node
合并脚本和样式文件git
自动复制资源和静态文件es6
监视文件变动并从新编译github
错误通知(桌面通知,使用brunch watch
时若是发生错误,会以桌面通知的形式通知你)shell
这篇指南的目的是实现一个简单的Branch演示程序来了解一个Branch项目的结构. 而后展现如何使用项目骨架来开始构建和建立应用程序.
npm install -g brunch
确认安装过程完成后, 使用下面的命令验证安装是否成功:
brunch -v
若是输出版本号, 标识安装成功
2.8.2
为了掩饰一个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%; } }
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模板来生成一个项目
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 是一个相似 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