grunt&markdown
Markdown
1._this_将this变成斜体
2.#hello-><h1>hello</h1>
3.[click me](www.a.com) -> <a href=“www.a.com”>click me</a>
引用型链接
[a][fun place]
[fun place]:www.baidu.com
4.**aaa** -> <bold>aaa</bold>
5.在一行后面加入两个空格表示换行
加入一个回车表示新建一个<p>
6.![aaa](link) -> <img src=link alt=aaa/>
7.>a -> <blockquote>a</blockquote>
8.*+空格是unordered list
9.3.+空格是ordered list
Grunt
1.grunt-cli是全局的工具,每个项目还需要下载各自的grunt到dev-dependencies
2.grunt.registerTask(“test”,function(param1,param2){});
通过 grunt test:1:2 可以传入参数
3.通过grunt.warn打印一句warning,默认情况下grunt会终止当前任务,可以通过--force强制通过。但是调用grunt.fatal时就不会继续了
4.grunt.registerTask接受三个参数,如果第二个参数为一个字符串,那么他将是任务的描述,通过grunt —help可以看到,
grunt.registerTask(taskName,description,function|taskNameArray)
5.通过
grunt.config.init(
{
“task1”:{
options:{
name:”sakop"
}
}
}
可以定义一个全局属性task1.options.name,当然创建这个属性的初衷是给task1任务所使用的。
然后通过grunt.config.requires(“task1.options.name”)来检查该属性是否存在,通过grunt.config.get来获取该属性
grunt.config(taskName,{});用来为单个task配置
6.grunt.file.mkdir,gunt.file.delete用来实现跨平台的文件系统操作,如果grunt.file.delete的参数是一个文件夹的话,那么其所有内容以及其本身都会被删除.
grunt.file.copy(src,dest)都只能是文件,
如果要copy文件夹的话,使用recurse方法,他将会把当前文件夹下所有文件都列出来,然后传到第二个callback中。
grunt.file.recurse(folderName,function(file){
});
7.模板替换
grunt.file.readJSON把一个文件读成JSON,
grunt.template.process(“aaa <%=pkg.name%>”)可以将字符串变量替换为变量值。
grunt.config.init({
a:123,
b:”aa<%=a%>”//b为aa123
})
8.可以通过this.options()获得属于当前task的配置
this.requiresConfig是grunt.config.requires的别名
9.注册multiTask时,也可以定义一个全局的options,然后每个target内部也可以有自己的options,他会覆盖外部的options
multi1: {
options: {
test: 1
},
target1: {
options: {
test: 2
//multiTask有一个this.data属性,该属性为target1下的所有属性
},
wow:123
},
target2: {}
}
调用grunt multi1:target1时,this.options().test返回2,调用target2时,返回1
10.如果一个任务包含异步操作的话,则在任务开始出声明
var done = this.async(),
然后在异步任务的最后加入done();
11.如果一个multiTask的target定义了src和dest的话,可以这样获得他们
this.files.forEach(function(fileGroup){
fileGroup.src,fileGroup.dest
});
其中fileGroup.src是一个数组,他只包含target.src中所有存在在文件系统上的文件