grunt.md 5.26 KB

Grunt使用教程

Grunt是一个基于JavaScript上的一个很强大的任务管理器(task runner),简单来说,可以通过JavaScript去执行一些程序来完成一些任务,学习grunt主要就是学习grunt插件的配置。

安装grunt-cli

命令行运行:

npm install -g grunt-cli

这样就在全局安装了一个grunt命令行接口,它的作用仅仅是运行安装在GruntFile.js 同目录下的grunt。每次运行grunt时,它都会使用node的require()查找本地已安装好的grunt。正因为如此,你可以从你项目的任意子目录运行grunt。

现在运行grunt命令会出现

grunterror

安装grunt

新建一个本地项目,命令行运行:

npm install grunt --save-dev

这样本地项目的grunt就安装好了,在node_modules下会多出grunt文件夹

注意--save-dev的作用是把grunt添加到package.json的依赖中。

npm install

正是通过package.json文件中的依赖,在本地安装项目所需插件的。

添加package.jsonGruntfile.js

要正确运行Grunt项目,必须依赖于package.json和Gruntfile.js文件。

package.json文件中定义了项目要依赖的相关插件和项目的基本信息如namedescriptionversion等……

文件结构大概像下面这样:

package

package.json文件的创建非常简单

命令行下切换到项目目录,运行:

npm init

回答几个问题就可以创建一个最基本的package.json文件。

Gruntfile.js文件中定义了一些grunt任务。

文件结构大概像下面这样:

gruntfile

Gruntfile.js可以通过手工方式创建,也可以通过运行grunt-init的方式创建,详细介绍在这里

tips

grunt.registerTask('default',['caompass']);

是注册一个grunt任务,这样我们就可以在命令行通过:

grunt default

的方式运行这个任务,因为default表示默认的任务,所以也可以直接在命令行输入

grunt

来运行这个任务,如果不想把compass配置为默认的任务,只需要把default替换成任意一个别名即可如:

grunt.registerTask('c',['compass']);

唯一需要注意的是别名不可以和数组中的任务名相同,否则会报如下错误:

nameerror

grunt-contrib-compass举个栗子

module.exports = function (grunt) {
    grunt.initConfig({
      compass: {
        task_1:{
          options: {
            sassDir: 'scss',
            cssDir: 'css',
            outputStyle: 'nested',
            sourcemap: true,
            debugInfo: true,
            noLineComments: true,
            force: false
          }
        }, 
        task_2:{}, 
        task_3:{}
      }
    });
    grunt.loadNpmTasks('grunt-contrib-compass');
    grunt.registerTask(c,['compass']);
    grunt.registerTask(taskone,['compass:task_1']);
}

task_1,task_2,task_3是自定义的任务名,表示compass中的一个任务,可以在compass中以json的形式定义多个任务。

sassDir是scss/sass文件的存放目录相当于config.rb中的sass_dir

specify是指定编译某些文件,适用于不需要对某个文件夹下的文件全部编译的情况。

sourecemap和debugInfo为true时可以在浏览器中进行调试,显示当前样式在scss文件中的多少行

这就是一份简单的grunt配置,可以在命令行运行:

grunt c

来执行compass下的全部任务['task_1','task_2','task_3'];

也可以运行:

grunt compass:task_1

or

grunt taskone

来执行单独的task_1任务

其他一些会用到的插件:

参考:

知乎grunt常用插件有哪些?

Grunt中文社区