grunt学习2

grunt的任务配置都是在Gruntfile.js文件中的grunt.initConfig中配置的。

grunt.initConfig({
  concat: {
    // 这里是concat任务的配置信息。
  },
  uglify: {
    // 这里是uglify任务的配置信息
  },
  // 任意数据。
  my_property: ‘whatever‘,
  my_src_files: [‘foo/*.js‘, ‘bar/*.js‘],
});

每个任务中可以配置多个目标

grunt concat:foo或者grunt concat:bar,将只会处理指定目标(target)的配置,而运行grunt concat将遍历所有目标(target)并依次处理。

grunt.initConfig({
  concat: {
    foo: {
      // 任务concat 的 "foo"目标相关文件配置
    },
    bar: {
      // 任务concat 的 "bar"目标相关文件配置
    },
  },
  uglify: {
    bar: {
      // 任务uglify的 "bar"目标相关文件配置
    },
  },
});

每个任务的options可以覆盖默认值,目标的options可以覆盖默认值。options属性可以被忽略

grunt.initConfig({
  concat: {
    options: {
      // 这里是任务级的Options,覆盖默认值
    },
    foo: {
      options: {
        // "foo" target options may go here, overriding task-level options.
      },
    },
    bar: {
      // No options specified; this target will use task-level options.
    },
  },
});

任务和目标中的文件源和目标指定

简洁格式:(可指定额外属性)

  用"src"属性指定源(值可以是字符串或字符串数组)

  用"dest"属性指定目标

文件对象格式:(不可指定额外属性)

  用"files"属性指向一个js对象,此对象每个键为目标,值为源(类型为字符串或字符串数组)

文件数组格式:(可指定额外属性)

  用"files"属性指向一个js数组,数组元素为对象,对象"src"属性为源(类型为字符串或字符串数组),"dest"为目标

简洁格式
grunt.initConfig({
  jshint: {
    foo: {
      src: [‘src/aa.js‘, ‘src/aaa.js‘]
    },
  },
  concat: {
    bar: {
      src: [‘src/bb.js‘, ‘src/bbb.js‘],
      dest: ‘dest/b.js‘,
    },
  },
});

文件对象格式
grunt.initConfig({
  concat: {
    foo: {
      files: {
        ‘dest/a.js‘: [‘src/aa.js‘, ‘src/aaa.js‘],
        ‘dest/a1.js‘: [‘src/aa1.js‘, ‘src/aaa1.js‘],
      },
    },
    bar: {
      files: {
        ‘dest/b.js‘: [‘src/bb.js‘, ‘src/bbb.js‘],
        ‘dest/b1.js‘: [‘src/bb1.js‘, ‘src/bbb1.js‘],
      },
    },
  },
});

文件数组格式
grunt.initConfig({
  concat: {
    foo: {
      files: [
        {src: [‘src/aa.js‘, ‘src/aaa.js‘], dest: ‘dest/a.js‘},
        {src: [‘src/aa1.js‘, ‘src/aaa1.js‘], dest: ‘dest/a1.js‘},
      ],
    },
    bar: {
      files: [
        {src: [‘src/bb.js‘, ‘src/bbb.js‘], dest: ‘dest/b/‘, nonull: true},
        {src: [‘src/bb1.js‘, ‘src/bbb1.js‘], dest: ‘dest/b1/‘, filter: ‘isFile‘},
      ],
    },
  },
});

自定义过滤函数
grunt.initConfig({
  clean: {
    foo: {
      src: [‘tmp/**/*‘],
      filter: ‘isFile‘,
    },
  },
});

动态构建文件对象
grunt.initConfig({
  uglify: {
    static_mappings: {
      // Because these src-dest file mappings are manually specified, every
      // time a new file is added or removed, the Gruntfile has to be updated.
      files: [
        {src: ‘lib/a.js‘, dest: ‘build/a.min.js‘},
        {src: ‘lib/b.js‘, dest: ‘build/b.min.js‘},
        {src: ‘lib/subdir/c.js‘, dest: ‘build/subdir/c.min.js‘},
        {src: ‘lib/subdir/d.js‘, dest: ‘build/subdir/d.min.js‘},
      ],
    },
    dynamic_mappings: {
      // Grunt will search for "**/*.js" under "lib/" when the "uglify" task
      // runs and build the appropriate src-dest file mappings then, so you
      // don‘t need to update the Gruntfile when files are added or removed.
      files: [
        {
          expand: true,     // Enable dynamic expansion.
          cwd: ‘lib/‘,      // Src matches are relative to this path.
          src: [‘**/*.js‘], // Actual pattern(s) to match.
          dest: ‘build/‘,   // Destination path prefix.
          ext: ‘.min.js‘,   // Dest filepaths will have this extension.
          extDot: ‘first‘   // Extensions in filenames begin after the first dot
        },
      ],
    },
  },
});

模板
grunt.initConfig({
  concat: {
    sample: {
      options: {
        banner: ‘/* <%= baz %> */\n‘,   // ‘/* abcde */\n‘
      },
      src: [‘<%= qux %>‘, ‘baz/*.js‘],  // [[‘foo/*.js‘, ‘bar/*.js‘], ‘baz/*.js‘]
      dest: ‘build/<%= baz %>.js‘,      // ‘build/abcde.js‘
    },
  },
  //用于任务配置模板的任意属性
  foo: ‘c‘,
  bar: ‘b<%= foo %>d‘, // ‘bcd‘
  baz: ‘a<%= bar %>e‘, // ‘abcde‘
  qux: [‘foo/*.js‘, ‘bar/*.js‘],
});

导入外部数据
grunt.initConfig({
  pkg: grunt.file.readJSON(‘package.json‘),
  uglify: {
    options: {
      banner: ‘/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n‘
    },
    dist: {
      src: ‘src/<%= pkg.name %>.js‘,
      dest: ‘dist/<%= pkg.name %>.min.js‘
    }
  }
});

额外属性特殊属性:

  filter:用来过滤文件,值为内置值或一个返回true或false的函数

  nonull:如果为true

  dot:是否匹配已.开头的文件,在linux中.开头的文件是隐藏文件

  matchBase:匹配模式是否配置的是文件名还是整个文件路径

  expand:是否使用动态构建文件对象(主要用来写一个任务来处理所有的文件,不管以后文件增删改)

    expand为真的时候下列属性起作用

    src:指定来源(字符串或字符串数组)

    cwd所有src中指定的路径相对的时此路径

    dest:目标路径

    ext:生成的目标文件的后缀名用此值来替换

    extDot:源文件的扩展名如何定位"first"文件名中的第一个.开始为后缀名,"last"文件名中最后一个.开始为后缀名

    flatten:从生成的dest路径中移除所有的路径部分

    rename:对每个匹配的src文件调用这个函数(在重命名后缀和一处路径之后)

    

文件指定中的通配符:

  *    匹配任意数量的字符,但不匹配/

  ?    匹配单个字符,但不匹配/

  **    匹配任意数量的字符,包括/

  {}    花括号中为"或"的关系

  !    不匹配

  例如:foo/*.js匹配foo目录的下所有js文件,foo/**/*.js匹配foo目录及其子目录下的js文件

// 指定单个文件:
{src: ‘foo/this.js‘, dest: ...}
// 指定一个文件数组:
{src: [‘foo/this.js‘, ‘foo/that.js‘, ‘foo/the-other.js‘], dest: ...}
// 使用一个匹配模式:
{src: ‘foo/th*.js‘, dest: ...}

// 一个独立的node-glob模式:
{src: ‘foo/{a,b}*.js‘, dest: ...}
// 也可以这样编写:
{src: [‘foo/a*.js‘, ‘foo/b*.js‘], dest: ...}

// foo目录中所有的.js文件,按字母顺序排序:
{src: [‘foo/*.js‘], dest: ...}
// 首先是bar.js,接着是剩下的.js文件,并按字母顺序排序:
{src: [‘foo/bar.js‘, ‘foo/*.js‘], dest: ...}

// 除bar.js之外的所有的.js文件,按字母顺序排序:
{src: [‘foo/*.js‘, ‘!foo/bar.js‘], dest: ...}
// 按字母顺序排序的所有.js文件,但是bar.js在最后。
{src: [‘foo/*.js‘, ‘!foo/bar.js‘, ‘foo/bar.js‘], dest: ...}

// 模板也可以用于文件路径或者匹配模式中:
{src: [‘src/<%= basename %>.js‘], dest: ‘build/<%= basename %>.min.js‘}
// 它们也可以引用在配置中定义的其他文件列表:
{src: [‘foo/*.js‘, ‘<%= jshint.all.src %>‘], dest: ...}
时间: 2024-07-31 07:25:40

grunt学习2的相关文章

Grunt学习使用

原文地址:Grunt学习使用必看 grunt简介神马的不多说,到处一大堆. 我只说说我已经实现了的代码. 按照官方的教程 相信已经配置好了,接下来说 package.json 和 Gruntfile.js这2个文件,package.json是为了告诉grunt我们用哪些插件,这些插件的版本是多少,以及我这个项目的一些信息. 那有人说我怎么知道我需要什么插件,我怎么写这个文件?请看官方的例子: 1 { 2 "name": "my-project-name", 3 &q

Grunt学习日记

Grunt和 Grunt 插件是通过npm安装并管理的, npm是Node.js的包管理器. 第一步:先安装node.js环境 第二步:安装Grunt-CLI 在node.js命令工具中输入npm install -g grunt-cli 敲击回车即可安装. -g为在全局安装. 第三步:在本地建一个文件夹,dos命令进入该文件夹下,输入npm init 配置package.json. 第四步:配置好了包的json文件,这一步开始安装Grunt,输入命令 npm install grunt --s

grunt学习

有些时候,项目中的静态资源,比如图片占用的文件有点大,影响加载的速度,所以会选择grunt对其进行压缩打包.对于grunt其他的用法,还在继续学习中,先记录下关于grunt的一些学习. grunt是一套基于Node.js的命令行工具,所以先确保环境中已安装好了Node环境. 接着安装grunt,如下: 1.安装CLI CLI是grunt命令行,先将其安装到全局环境中.点击开始->运行->cmd,执行以下命令进行安装: npm install -g grunt-cli 安装一次即可,以后就可以在

grunt学习笔记(适用初学者)

1.在学习grunt之前,首先要对nodejs有一些简单的理解.安装nodejs的步骤很简单,根据官网的提示安装即可,在此文中将不再累述. http://www.nodejs.org/ 2. Grunt介绍 Grunt是一个自动化的项目构建工具. 如果你需要重复的执行像压缩, 编译, 单元测试, 代码检查以及打包发布的任务. 那么你可以使用Grunt来处理这些任务, 你所需要做的只是配置好Grunt, 这样能很大程度的简化你的工作. 如果在团队中使用Grunt, 你只需要与其他人员约定好使用Gr

grunt学习笔记1 理论知识

你需要检查js语法错误,然后再去压缩js代码.如果这两步你都去手动操作,会耗费很多成本.Grunt就能让你省去这些手动操作的成本. “—save-dev”的意思是,在当前目录安装grunt的同时,顺便把grunt保存为这个目录的开发依赖项.看到“开发依赖项”这一次,是不是觉得有些眼熟?上文在配置package.json时,其中的“devDependencies”中就会存储开发依赖项. 下面就是一些常有grunt开发依赖插件 Contrib-jshint——javascript语法错误检查:Con

grunt学习随笔

1 grunt 安装  全局安装 npm install -g grunt-cli 2 配置好package.json 和 Gruntfile 文件,这两个文件必须位于项目根目录下. package.json配置实例 1 { 2 "name": "web", 3 "version": "2.1.0", 4 "description": "A simple ui framework based on

grunt学习二

1. 新建文件和文件目录 mkdir grunt-in-action cd grunt-in-action cd grunt-in-action mkdir grunt-empty cd grunt-empty vim index.html mkdir js cd js vim index.js cd .. 2. npm和grunt初始化 npm init npm install grunt --save-dev npm install //如果想要node_module,就 加载 3. 安装t

Grunt学习一:使用grunt创建jquery plugin.

? 下载安装github客户端. http://windows.github.com 打开github客户端. 登录后,点击左上角的加号,可以创建一个Repository. (也可以点击Clone,将github上面的项目克隆到本地.) 创建完成后,点击右上角的 Publish Repository, 就可以将这个Repository发布到github上面. 如果没有安装node.js,就安装node.js. 用npm在全局安装grunt. 安装grunt-init. ? 打开git shell

grunt学习三-bower(二)

一.通过bower help 来展开bower的命令 Usage: bower <command> [<args>] [<options>] Commands: cache Manage bower cache help Display help information about Bower home Opens a package homepage into your favorite browser info Info of a particular packag