好文推荐系列--------(3)GruntJS 在线重载 提升生产率至新境界

好文原文地址:http://segmentfault.com/a/1190000000354555

本文将首先介绍grunt-markdown插件如何配合HTML模板使用,接着我将介绍如何使用grunt-watch插件将工作效率提升至新层次。如果你不熟悉GruntJS,请先阅读我关于GruntJS的文章。

Github仓库

今天的示例代码可以从github: day7-gruntjs-livereload-example中获取。

配合模板使用GruntJS的Markdown插件

在我上一篇GruntJS文章中,我提到了我们可以通过grunt-markdown插件将Markdown文档转换成HTML文档。为了让blog的页面好看一点,我决定使用Twitter Bootstrap风格。这就要求我们指定grunt-markdown插件将使用的HTML模板,这很容易,我们只需指定模板配置选项。

markdown: {all: { files: [ { expand: true, src: '*.md', dest: 'docs/html/', ext: '.html' } ], options: { template: 'templates/index.html', markdownOptions: { gfm: true, codeLines: { before: '<span>', after: '</span>' } } } } }, 

template/index.html看起来大致是这样的:

<!DOCTYPE html>
<html>
<head> <title>Learn 30 Technologies in 30 Days</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" type="text/css" href="../../css/bootstrap.css" media="screen"> <style type="text/css"> body { padding-top:60px; padding-bottom: 60px; } </style> </head> <body> <div class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">30 Technologies in 30 Days</a> </div> </div> </div> <div id="main" class="container"> <%=content%> </div> </body> </html> 

<%=content%>会被Markdown转成的HTML文档替换。

再次运行grunt命令后,我们就能看到生成的HTML 5文档了。

grunt

生成的HTML 5文档位于 docs/html 文件夹下。

盯紧

grunt-contrib-watch是GruntJS最重要的插件之一。这个插件可以在后台运行,监视配置好了的文件改动。使用如下的npm命令安装grunt-contrib-watch插件。

npm install grunt-contrib-watch --save-dev

上面的命令将更新package.json中的依赖。

{"name": "blog","version": "0.0.0", "description": "My awesome blog", "devDependencies": { "grunt": "~0.4.1", "grunt-contrib-uglify": "~0.2.5", "grunt-markdown": "~0.4.0", "grunt-contrib-watch": "~0.5.3" } } 

和其他插件一样,接下来的任务是在Gruntfile.js中配置插件,我们需要将如下的代码加入到grunt的initConfig方法。这些代码确保一旦文件变动,grunt将运行uglifymarkdown任务

watch :{scripts :{files : ['js/app.js','*.md','css/*.css'], tasks : ['uglify','markdown'] } } 

将下面这行加入Gruntfile,添加watch任务。

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

运行grunt watch命令便可调用Grunt的watch任务。

$ grunt watch
Running "watch" task
Waiting... 

现在我们修改下js文件夹下的app.js文件。将如下函数添加到app.js

function goodNight(name){ return "Good Night, " + name; } 

一旦我们增加了这个函数,Grunt的watch任务会同时运行uglifymarkdown任务。

$ grunt watch
Running "watch" task
Waiting...OK >> File "js/app.js" changed. Running "uglify:build" (uglify) task File "js/app.min.js" created. Running "markdown:all" (markdown) task File "docs/html/day1.html" created. Done, without errors. Completed in 0.580s at Sun Nov 03 2013 00:15:54 GMT+0530 (IST) - Waiting... 

为了确保变动已经加入,我们查看下更新过的app.min.js文件。

function hello(a){return"Hello, "+a+"! How are you?"}function bye(a){return"Bye, "+a}function goodNight(a){return"Good Night, "+a} 

类似地,如果我们修改了Markdown文件,新HTML文档也会被创建。

使用livereload

GruntJS的特性之一就是它可以自动重载改动。这非常有用,比如我们修改了样式之后不用点击浏览器的刷新按钮就能看到改动。将watch插件的配置修改下就能使用在线重载啦。

watch :{scripts :{files : ['js/app.js','*.md','css/*.css'], tasks : ['uglify','markdown'], options : { livereload : true } } } 

这会在 http://localhost:35729/ 启动服务。我们也可以修改端口号:

watch :{scripts :{files : ['js/app.js','*.md','css/*.css'], tasks : ['uglify','markdown'], options : { livereload : 9090, } } } 

重启服务器,现在可以访问 http://localhost:9090/

为了启用在线重载,我们需要将以下内容加入到 templates/index.html 文件中。

<script src="http://localhost:9090/livereload.js"></script> 

重启服务器,修改下bootstrap.css,将

.navbar-inverse {background-color: #222222; border-color: #080808; } 

改成

.navbar-inverse {background-color: red; border-color: #080808; } 

我们马上就能在docs/html/day1.html中看到变化。

https://www.openshift.com/sites/default/files/images/livereloading-in-action.png

今天就到这里了。欢迎继续反馈。

转载于:https://www.cnblogs.com/alisayuan/p/5124146.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3有多少个关键字排序_python3 数据结构和算法-- 通过某个关键字排序一个字典列表...

通过某个关键字排序一个字典列表问题你有一个字典列表&#xff0c;你想根据某个或某几个字典字段来排序这个列表。解决方案通过使用 operator 模块的 itemgetter 函数&#xff0c;可以非常容易的排序这样的数据结构。 假设你从数据库中检索出来网站会员信息列表&#xff0c;并且…

php页面怎么去登录,php中登录后跳转回原来要访问的页面实例

在很多网站用户先访问一个要登录的页面&#xff0c;但当时没有登录后来登录了&#xff0c;等待用户登录成功之后肯定希望返回到上次访问的页面&#xff0c;下面我就来给大家介绍登录后跳转回原来要访问的页面实例最简单的办法就是直接使用php $_SERVER[HTTP_REFERER]如果我在A.…

三目运算

total>100?total*0.8:total;//true执行冒号前面的&#xff1b;false执行冒号后面的 等价于 if(total>100){ totaltotal*0.8; }else{ totaltotal; }转载于:https://www.cnblogs.com/barbie7/p/5129566.html

二叉树的创建_大多数人都不会手写创建并遍历二叉树,一航这里帮你终结了

创建二叉树、遍历二叉树、二叉树的最近公共祖先任何疑问、意见、建议请公众号留言或联系qq474356284先序、后序创建二叉树先中后层序遍历二叉树二叉树的最近公共祖先 输入格式&#xff1a;创建二叉树时的输入&#xff1a;如序列&#xff1a;{1 2 -1 -1 3 -1 -1}表示1结点有2,…

tp5 php正则邮箱,TP5验证器使用实例

TP5验证器建立模块\validate\验证器文件名例如我们定义了一个验证USER的验证器类<?php namespace app\admin\validate;use think\Validate;class Admin extends Validate{protected $rule [username > require|min:3|max:16|unique:admin,password > require|min:6|…

zookeeper 密码_阿里资深JAVA架构带你深度剖析dubbo和zookeeper关系

为什么要用dubbo&#xff1f;当网站规模达到了一定的量级的时候&#xff0c;普通的MVC框架已经不能满足我们的需求&#xff0c;于是分布式的服务框架和流动式的架构就凸显出来了。单一应用架构当网站流量很小时&#xff0c;只需一个应用&#xff0c;将所有功能都部署在一起&…

python pandas csv 追加 空行,python – Pandas:read_csv在空行后忽略行

有一个奇怪的.csv文件,如&#xff1a;header1,header2,header3val11,val12,val13val21,val22,val23val31,val32,val33很好,但在这些线之后,总会有一个空行,后面跟着很多无用的线.整个事情是一致的&#xff1a;header1,header2,header3val11,val12,val13val21,val22,val23val31,…

nw.js FrameLess Window下的窗口拖拽与窗口大小控制

nw.js FrameLess Window下的窗口拖拽与窗口大小控制 很多时候&#xff0c;我们觉得系统的Frame框很难看&#xff0c;于是想自定义。 自定义Frame的第一步是在package.config文件中将frame选项设置为false。 { "name": "1", "main": "index.…

python控制语句实验报告,python流程控制语句案例练习

最近玩python&#xff0c;为了更好的学习其中的流程控制语句&#xff0c;本身写了一个查询员工信息和更新信息的脚本&#xff0c;此脚本仅供练习使用。大拿可绕行&#xff01;python#!/usr/bin/env pythonimport sysimport osos.system(clear)mess \033[;35m ID :%s\033[0m\03…

linux 文件重命名_如何在 Linux 上重命名一组文件 | Linux 中国

要用单个命令重命名一组文件&#xff0c;请使用 rename 命令。它需要使用正则表达式&#xff0c;并且可以在开始前告诉你会有什么更改。-- Sandra Henry-stocker几十年来&#xff0c;Linux 用户一直使用 mv 命令重命名文件。它很简单&#xff0c;并且能做到你要做的。但有时你需…

Spring 构造注入 传參数

1. 提供相应的构造方法 //构造器注入 public class Bean6 {private String name;private Integer age;// 服务于构造器注入使用public Bean6(String name, Integer age) {super();this.name name;this.age age;}public void show() {System.out.println("bean6:&…

php正则表达式函数案例,PHP正则表达式函数preg_replace用法实例分析

PHP正则表达式函数preg_replace用法。&#xff0c;具体如下&#xff1a;preg_replace 执行一个正则表达式的搜索和替换语法&#xff1a;preg_replace (pattern ,replacement ,subject,limit,count )参数描述pattern正则表达式(字符串或字符串数组)replacement用于替换的字符串或…

python tk protocol_Python Modbus_tk在树莓派上实现rtu master

利用 python modbus工具实现modbus从站的数据采集&#xff0c;很方便简单。Python Modbus 协议工具目前有下面三种&#xff1a;modbus_tk&#xff1a;完整modbus协议栈的实现&#xff0c;支持modbus tcp/rtu&#xff5b;1.提供slave模拟器&#xff0c;即模拟modbus server:502)…

根据另外一个表来更新,增加字段

update table1 set field1table2.field1,field2table2.field2from table2where table1.idtable2.id添加字段&#xff1a;alter table 表名 add 字段名 类型删除字段&#xff1a;alter table 表名 drop column 字段名转载于:https://www.cnblogs.com/yzwdli/p/5147512.html

html注册跳转php错误500,页面跳转后提示HTTP 异常 500(Internal Server Error):服务器尝试执行请求时遇到了意外情况...

页面跳转后提示HTTP 错误 500(Internal Server Error)&#xff1a;服务器尝试执行请求时遇到了意外情况。index.php跳转到chkadmin.php提示(服务器错误网站在检索 http://localhost/shop/admin/chkadmin.php 时遇到错误。 该网站可能关闭进行维护或配置不正确。以下是一些建议&…

python爬虫运行不出结果_请问这个为什么就是爬不到,运行之后电脑卡的不行,求大佬指导...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import requestsfrom multiprocessing import Poolimport reimport jsonfrom requests.exceptions import ConnectionErrordef get_to_html(url):try:headers {"User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0;…

oracle插入性能优化,Oracle-insert性能优化

看见朋友导入数据&#xff0c;花了很长时间都没完成&#xff01;其实有很多快速的方法&#xff0c;整理下&#xff01; 向表中插入数据有很多办法,但是方法不同&#xff0c;性能差别很看见朋友导入数据&#xff0c;&#xff0c;花了很长时间都没完成&#xff01;其实有很多快速…

python中setup什么意思_一个关于python3中setup.py小概念

一个关于setup.py小概念关于python setup.py bdistpython setup.py sdist两者的区别sdist 指的是source dist 即源码发布&#xff0c;带setup.pybdist 指的是built (binary) dist 即编译过(二进制)发布 不带setup.py查看setup.py各种编译命令参数python setup.py --help-c…

dba_segments和dba_tables的不同

create table tset as select * from dba_objects; select count(*) from tset; select table_name,blocks,empty_blocks from dba_tables where table_name’TSET’; select segment_name,bytes,blocks,extents from dba_segments where segment_name’TSET’; 问题来了&#…

oracle数sqlplus,sqlplus查询oracle数据库数据容量

登录sqlplus&#xff1a;cmd命令行登录&#xff1a;sqlplus orcl/orcl as sysdba查询表空间使用率select b.file_id  文件ID,b.tablespace_name  表空间,b.file_name     物理文件名,b.bytes       总字节数,(b.bytes-sum(nvl(a.bytes,0)))   已使用,sum(nv…