构建自动化

栏目: 编程工具 · 发布时间: 7年前

内容简介:今天修改了下博客模板,顺便了解了下相关的工具和模块。辅助函数

今天修改了下博客模板,顺便了解了下相关的 工具 和模块。

HEXO

辅助函数

url_for() 在路径前加根目录 <% url_for(path) %>

relative_url(from, to) 获得一个从 fromto 的路径

css(path, ...) 载入 css 文件

js(path, ...) 载入 js 文件

link_to(path, [text], [options]) 插入链接

mail_to(path, [text], [options]) 插入电子邮件

image_tag(path, [options]) 插入图片

favicon_tag(path) 插入 favicon

feed_tag(path, [options]) 插入 feed 链接

is_*() 系列条件函数, current home post archive year month category tag

partial(layout, [locals], [options]) 载入其他模板文件,您可在 locals 设定区域变量。

paginator(options) 插入分页链接

toc(str, [options])

__('next') 多语言支持时, __() 用于转换语言。

在模板中,透过 __ 或 _p 辅助函数,即可取得翻译后的字符串,前者用于一般使用;而后者用于复数字符串。

Grunt

构建自动化

谈 Grunt,就要谈到“构建自动化”。

Build automationis the process of automating the creation of a software build and the associated processes including: compiling computer source code into binary code, packaging binary code, and running automated tests.

构建自动化有以下一些好处:

  • A necessary pre-condition for continuous integration and continuous testing 在连续集成和测试中的必要的前置条件
  • Improve product quality 改善产品质量
  • Accelerate the compile and link processing 加速编译和链接处理
  • Eliminate redundant tasks 去除冗余的任务
  • Minimize “bad builds” 减少低质量的构建
  • Eliminate dependencies on key personnel 去除关键的人员依赖
  • Have history of builds and releases in order to investigate issues 具有可供查询的构建和发布历史
  • Save time and money - because of the reasons listed above 节省时间和财力

使用 Grunt

使用 Grunt 可以加快开发和自动构建。可以帮助开发者将压缩、编译、单元测试、代码检查等工作自动化。

三步使用 grunt:

  • Change to the project’s root directory.
  • Install project dependencies with npm install.
  • Run Grunt with grunt.

package.json 保存项目元数据;

Gruntfile.js 配置或定义任务、加载 Grunt 插件。

npm install <module> --save-dev 本地安装并将依赖写入 package.jsondevDependencies

Gruntfile.js 配置文件

Gruntfile.js 包括下面四个部分:

  • The “wrapper” function
  • Project and task configuration
  • Loading Grunt plugins and tasks
  • Custom tasks

包装函数(wrapper function):概括 grunt 的配置信息。

module.exports = function(grunt){
};

在包装函数内,初始化配置对象:

grunt.initConfig({
});

package.json 的项目设置保存到 pkg 属性:

pkg: grunt.file.readJSON('package.json')

插件配置(grunt-contrib-concat 为例):

concat: {
    options: {
        seperator: ';'
    },
    dist: {
    src: [],
    dest: ''
    }
}

加载用到的插件:

grunt.loadNpmTasks('grunt-contrib-concat');

创建任务:

直接输入 grunt 执行默认任务(default);

输入 grunt test 可以执行自定义的任务。

grunt.registerTask('default', ['concat']);
grunt.registerTask('test', ['jshint']);

Grunt 常见插件:

grunt-contrib-uglify 压缩 js, css 文件

grunt-contrib-concat 连接文件

grunt-contrib-jshint js 代码检测

grunt-contrib-watch 代码监视

Gulp

Gulp 和 Grunt 干差不多的活,目前还不知道优劣。Gulp 显得简单一些。

var gulp = require('gulp');

gulp.task('default', function(){
  // 将你的默认的任务代码放在这
});

EJS

EJS 是一个简单的模板语言,可以让你使用原生 JavaScript 生成 HTML 标记。没有关于如何组织内容的语法规则,也没有循环和控制流的重载,只是使用原生的 JavaScript。

EJS 一个在 HTML 中嵌入原生 JS 语言的模板语言。

有以下特点:

快速的编写和解析

简单的模板标签: <% %>

自定义分隔符(例如使用替换<% %>)

使用 include 引入其他模板

同时支持服务器端和客户端使用

JavaScript 的静态缓存

模板的静态缓存

与 Express 视图系统兼容

一个简单的例子:

var ejs = require('ejs'), // 加载 ejs 模块
    people = ['geddy', 'neil', 'alex'], // 数据
    html = ejs.render('<%= people.join(", "); %>', {people: people}); // ejs 渲染

熟悉这几个标签:

  • <% ‘Scriptlet’ 标签, 用于控制流,没有输出
  • <%= 向模板输出值(带有转义)
  • <%- 向模板输出没有转义的值
  • <%# 注释标签,不执行,也没有输出
  • <%% 输出字面的 ‘<%’
  • %> 普通的结束标签
  • -%> Trim-mode (‘newline slurp’) 标签, 移除随后的换行符

使用 include 调用的模板时路径需要 filename 选项。

JADE

JADE(现在改名为 Pugjs) 是一个极度注重代码简洁性的模板语言。相比 EJS 来说,渲染性能较低一些。但因为其简单的语法(对其他人来说也许算是“复杂”了)受到欢迎。

下面记录一些容易忘记的特殊语法:

= '\n' 换行

!= 不转义的属性

未经转义的缓存代码十分危险。您必须正确处理和过滤用户的输入来避免跨站脚本攻击。

'${}' 字符串中嵌入变量

&attributes({'data-foo': 'bar'}) 语法可以将一个对象转化为一个元素的属性列表

分支条件(Case):case 是 JavaScript 的 switch 指令的缩写

- var foo = 10
case foo
    when 0
        p eee
    when 1
        p fff
    default
        p ggg #{foo}

分支传递 (Case Fall Through) :在 Pug 中,传递会在遇到非空的语法块前一直进行下去。如果不想输出任何东西的话,可以明确地加上一个原生的 break 语句。也可以使用块展开的语法

- 开始的一段为不输出的代码。另起一行并缩进可以写成块的形式。

= 开始一段带有输出的代码,它应该是可以被求值的一个 JavaScript 表达式。

!= 开始一段不转义的,带有输出的代码。

//- 进行单行注释,使用 // 并另起一行缩进,可进行块注释。pug 的条件注释跟 html 一样,并没有特殊的写法。

条件判断形式可以省略开头的 - , if !x === unless x

if x
else if y
else
    z

模板继承: extends 关键字允许模板去扩展一个布局或父模板,这样它就可以覆盖某些预定义的内容。

包含 include 功能允许您把另外的文件内容插入进来。

Pug 支持使用 blockextends 关键字进行模板的继承。一个称之为“块”(block)的代码块,可以被子模板覆盖、替换。这个过程是递归的。

Pug 允许您去替换(默认的行为)、 prepend (向头部添加内容),或者 append (向尾部添加内容)一个块。当使用 block append 或者 block prepend 时, block 关键字是可省略的

嵌入 Interpolation:Pug 提供了好几种方式满足不同的嵌入需求。

迭代 Iteration

each each ... in ... each val, index in arr

for while 也可以创建迭代

混入 Mixin:混入是一种允许您在 Pug 中重复使用一整个代码块的方法。 mixin 可以写成函数形式,传入参数。在使用 mixin 的函数形式时,在前面加上 + 号,即 +foo(faz) 。还可以使用剩余参数(rest arguments) ... 语法来表示参数列表传入若干长度不定的参数。

放置纯文本

  • 管道文本:在每行加一个 | 字符。
  • 标签的行内:文本只需要和标签名隔开一个空格。
  • 标签中的块:在标签后街上一个 . 点号(没有空格)。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Mastering Regular Expressions, Second Edition

Mastering Regular Expressions, Second Edition

Jeffrey E F Friedl / O'Reilly Media / 2002-07-15 / USD 39.95

Regular expressions are an extremely powerful tool for manipulating text and data. They have spread like wildfire in recent years, now offered as standard features in Perl, Java, VB.NET and C# (and an......一起来看看 《Mastering Regular Expressions, Second Edition》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器