在 Phoenix 项目中遇到关于 Branch 这个 HTML5 构建工具的问题, 在这里为了剥离问题的复杂度, 独立创建一个 Branch 前端项目来探索如何使用 Brunch 这个全新的前端构建工具.

Brunch 是一个HTML5的构建工具, 对于前端开发, 它能够帮助你设置和维护高效的工作流.

Brunch 能够:

  • 编译脚本, 模板和样式单

  • Lint工具

  • 把Javascript代码包装成 CommonJSAMD模块

  • 合并脚本和样式文件

  • 自动复制资源和静态文件

  • 监视文件变更并重新编译

  • 错误通知(桌面通知,使用brunch watch时如果发生错误,会以桌面通知的形式通知你)

这篇指南的目的是实现一个简单的Branch演示程序来了解一个Branch项目的结构. 然后展示如何使用项目骨架来开始构建和创建应用程序.

安装 Brunch

  1. npm install -g brunch

确认安装过程完成后, 使用下面的命令验证安装是否成功:

  1. brunch -v

如果输出版本号, 标识安装成功

  1. 2.8.2

创建一个基本的Brunch项目

为了掩饰一个Brunch项目的结构和工作流, 我们用一个静态的HTML页面, CSS样式单(使用SASS, 以及一个基本的ES3/ES5 Javascript文件创建一个简单的演示程序.

首先使用下面的命令创建一个基本的项目目录结构和配置文件:

  1. brunch new branchio-semantic-ui-demo

有很多命令行选项可以用, 我们将在稍后再来探讨.

基本的项目目录结构如下:

  1. ├── README.md
  2. ├── app
  3.    ├── assets
  4.       └── index.html
  5.    └── initialize.js
  6. ├── brunch-config.js
  7. └── package.json
  • app, 项目的源代码目录, 包括脚本文件, 样式表文件, 模板文件, 这些需要被Branch编译的文件放在这里.

  • assets, 静态资源目录, 该目录会递归地不加修改和处理地复制到目标目录(一用于存放需要部署到线上Web服务器的目录)

  • public

设置项目文件

下面是一个简单的HTML页面, 我们将以此作为例子来说明.

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  6. <title>Brunch with ES6</title>
  7. <link rel="stylesheet" href="/app.css">
  8. <style type="text/css">
  9. body {
  10. background: #FFF;
  11. }
  12. #app {
  13. font-size: 14px;
  14. font-family: Lato,'Helvetica Neue',Arial,Helvetica,sans-serif;
  15. }
  16. #app > div {
  17. margin: 100px 0;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <div id="app" class="ui container">
  23. <div class="ui card">
  24. <div class="image">
  25. <img src="/images/avatar2/large/kristy.png">
  26. </div>
  27. <div class="content">
  28. <a class="header">Kristy</a>
  29. <div class="meta">
  30. <span class="date">Joined in 2013</span>
  31. </div>
  32. <div class="description">
  33. Kristy is an art director living in New York.
  34. </div>
  35. </div>
  36. <div class="extra content">
  37. <a>
  38. <i class="user icon"></i>
  39. 22 Friends
  40. </a>
  41. </div>
  42. </div>
  43. </div>
  44. <script src="/vendor.js"></script>
  45. <script src="/app.js"></script>
  46. </body>
  47. </html>
  1. @import url(http://fonts.googleapis.com/css?family=Roboto+Slab);
  2. $default-bg: lightblue;
  3. $default-text: black;
  4. $roboto-slab: 'Roboto Slab';
  5. body {
  6. font-family: $roboto-slab;
  7. font-size: 16px;
  8. background: $default-bg;
  9. color: $default-text;
  10. }
  11. h1 {
  12. font-size: 2em;
  13. margin: 0.5em 0 1em;
  14. & > small {
  15. color: red;
  16. font-size: 70%;
  17. }
  18. }

安装Brunch插件

  1. npm install --save-dev javascript-brunch sass-brunch

构建项目文件

  1. brunch build

生成的文件在public目录中, 如果想压缩, 合并这些文件, 可以带 --production, 或 -p 参数.

  1. brunch build -p

public 目录是可以完全删除的, 重新运行 brunch build 会自动重新编译和生成.

即时预览

branch watch --server 这个命令可以自动监视项目目录, 并且启动了一个Web服务器监听在本机http://localhost:3333这个地址上, 在浏览器上输入http://localhost:3333可以实时预览你的修改, 浏览器会自动刷新页面.

关于ES6

如果想用ES6开发项目, 在创建项目的时候可以用es6模板来生成一个项目

  1. brunch new proj -s es6

自动刷新

很多年前那种编辑 -> 刷新 -> 编辑 -> 刷新的工作流已经不适合现代工程化的前端开发了, 我们需要的是效率, 把重复的工作交给机器自己做. 因此我们需要自动刷新页面预览修改效果. 这里用到了Brunch的 auto-reload-brunch 插件. 首先需要安装它.

  1. npm install --save auto-reload-brunch

注: 经过测试, 目前 auto-reload-brunch 插件只能用于 brunch watch 命令, brunch watch --server 的自动刷新有问题, 只能单独用一个Web服务器来把public目录作为根目录提供服务.

大多数情况下, 自动加载插件不需要任何配置就可以直接工作.

配置为文件

Brunch 和 Npm 的集成, 如果打开Npm的支持, Brunch 能够直接使用 package.json 文件中的信息来把Npm工具集成到Brunch项目当中.

完整的配置文件

  1. module.exports = {
  2. npm: {
  3. enabled: true
  4. },
  5. files: {
  6. javascripts: {
  7. joinTo: {
  8. 'vendor.js': /^(?!app)/,
  9. 'app.js': /^app/
  10. }
  11. },
  12. stylesheets: {
  13. joinTo: {
  14. 'vender.css': /^node_modules/
  15. }
  16. }
  17. },
  18. paths: {
  19. "public": "public",
  20. "watched": [
  21. "app/"
  22. ]
  23. },
  24. modules: {
  25. autoRequire: {
  26. "js/app.js": ["app/app"]
  27. }
  28. },
  29. plugins: {
  30. babel: {presets: ['es2015']},
  31. coffeescript: {bare: true},
  32. autoReload: {
  33. delay: 500,
  34. enabled: true,
  35. port: [9000],
  36. forceRepaint: true,
  37. host: "127.0.0.1"
  38. }
  39. }
  40. };

集成 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文件的内容, 很简单就一行:

  1. @import '../../semantic/src/semantic';

导入时注意一下相对路径就好. 现在就完成了Semantic UI框架的引入了. brunch build 一下在 public 目录中就可以看到编译后的输出了, 对了不要忘了安装Brunch 的 less-brunch插件:

  1. 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:入门上手的更多相关文章

  1. R语言快速入门上手

    导言:     较早之前就听说R是一门便捷的数据分析工具,但由于课程设计的原因,一直没有空出足够时间来进行学习.最近自从决定本科毕业出来找工作之后,渐渐开始接触大数据行业的技术,现在觉得是时候把R拿下 ...

  2. 【Spring-Security】Re01 入门上手

    一.所需的组件 SpringBoot项目需要的POM依赖: <dependency> <groupId>org.springframework.boot</groupId ...

  3. 快速入门上手JavaScript中的Promise

    当我还是一个小白的时候,我翻了很多关于Promise介绍的文档,我一直没能理解所谓解决异步操作的痛点是什么意思 直到我翻了谷歌第一页的所有中文文档我才有所顿悟,其实从他的英文字面意思理解最为简单粗暴 ...

  4. Orchard学习资料,适合入门上手

    名词解释: http://www.cnblogs.com/esshs/archive/2011/06/01/2067501.html   Orchard如何工作: http://www.cnblogs ...

  5. MongoDB 上手开发实践(入门上手开发这一篇就够了)

    前言 MongoDB是一个介于 关系数据库 和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复 ...

  6. 快速入门上手Markdown

    第一次接触Markdown是写代码初期看很多大佬的github,他们的项目一定会有一份文件叫Readme.md的文件 他们由一些简单美观的符号和汉字字母组成,编译之后成为一篇简单直观的文档 深入了解之 ...

  7. Elasticsearch 教程--入门

    1.1 初识 Elasticsearch 是一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎,可以说 Lucene 是当今最先进,最高效的全功能开源搜索引擎框架. 但是 L ...

  8. 快速入门cocos2d-x jsbinding

    如果你是一个cocos2d-x的老手,那你可以忽略这篇博文,如果你是一个接触过javascript,想通过HTML5做游戏的,但是苦于不知道如何下手,那么这篇博文可能会帮到你. cocos2dx-js ...

  9. DIY智能家居——零基础入门篇

    概要 本文主要根据笔者从零开始接触硬件,以小白视角开启IoT探索,根据相关资料DIY一个温湿度传感器.后经过探索发现新大陆--Home Assistant&Homebridge,最终实现了一个 ...

随机推荐

  1. PyTorch深度学习实践-Overview

    Overview 1.PyTorch简介 ​ PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序.它主要由Facebookd的人工智能小组开发,不仅能够 实现强 ...

  2. Python:Scrapy(二) 实例分析与总结、写一个爬虫的一般步骤

    学习自:Scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 - 知乎 Python Scrapy 爬虫框架实例(一) - Blue·Sky - 博客园 1.声明Item 爬虫爬取的目标是从非 ...

  3. JZ-038-二叉树的深度

    二叉树的深度 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 题目链接: 二叉树的深度 代码 /** * 标题:二叉 ...

  4. SETTLE约束算法的批量化处理

    技术背景 在上一篇文章中,我们介绍了在分子动力学模拟中SETTLE约束算法的实现与应用,其中更多的是针对于单个的水分子.但由于相关代码是通过jax这一框架来实现的,因此对于多分子的体系,可以采用jax ...

  5. CF578D题解

    LCS 为给定串的长度减一,考虑枚举一个区间 \([L,R]\),表示 \(S\) 和 \(T\) 的长度为 \(L-1\) 的前缀完全相同以及长度为 \(n-R\) 的后缀完全相同,且没有比这个前缀 ...

  6. LGP5591题解

    题意很明确,不说了. 前置芝士:单位根反演 也就是: \[[n|a]=\frac 1 n \sum_{i=0}^{n-1}w_n^{ai} \] 看到题目给的柿子: \[\sum_{i=0}^n\bi ...

  7. Redis(一):基本数据类型与底层存储结构

    最近在整理有关redis的相关知识,对于redis的基本数据类型以及其底层的存储结构简要的进行汇总和备注(主要为面试用) Redis对外提供的基本数据类型主要为五类,分别是 STRING:可以存储字符 ...

  8. Mybatis的ResultMap对column和property

    首先,先看看这张图,看能不能一下看明白:   select元素有很多属性(这里说用的比较多的): id:命名空间唯一标识,可以被用来引用这条语句 parameterType:将会传入这条语句的参数类的 ...

  9. Java基础——引用类型作为形参与返回值

    一.具体类名作为形参与返回值 1.方法的形参是类名,其实需要的是该类的对象 比如有一个具体的猫类,我使用另一个类使用猫类的方法 public class CatOperator {   public ...

  10. Nginx 静态文件服务

    Nginx 静态文件服务 我们先来看看最简单的本地静态文件服务配置示例: server { listen 80; server_name www.test.com; charset utf-8; ro ...