Grunt 入门教程二:配置任务

论坛 期权论坛     
选择匿名的用户   2021-5-23 01:55   163   0
<h2><strong>2.1 Grunt 配置</strong></h2>
<p class="p2">任务配置都定义在GruntFile 文件中的 grunt.initConfig 方法中。这个配置一般都是一些以任务名命名的属性,但是也可以包含任意的数据。如果一个属性没有被任何任务用到,就会被忽略。</p>
<p class="p2">而且,因为这是 JavaScript 文件,任何合法的 JS 代码都可以写,而不是仅仅局限于 JSON。如果有必要,你甚至可以用代码动态生成配置。</p>
<p class="p3"></p>
<pre class="blockcode"><code class="language-javascript">grunt.initConfig({
  concat: {
    // concat task configuration goes here.
  },
  uglify: {
    // uglify task configuration goes here.
  },
  // Arbitrary non-task-specific properties.
  my_property: &#39;whatever&#39;,
  my_src_files: [&#39;foo/*.js&#39;, &#39;bar/*.js&#39;],
});</code></pre>
<br>
<br>
<p></p>
<h2><strong>2.2 任务配置和任务目标</strong></h2>
<p class="p2">当一个任务运行时,Grunt 会自动寻找配置中的同名属性。可以通过自定义的“targets”属性来配置多个任务。在下面这个例子中,concat 任务有 foo 和 bar 两个目标,而 uglify 只有一个 bar 目标。</p>
<p class="p3"></p>
<pre class="blockcode"><code class="language-javascript">grunt.initConfig({
  concat: {
    foo: {
      // concat task &#34;foo&#34; target options and files go here.
    },
    bar: {
      // concat task &#34;bar&#34; target options and files go here.
    },
  },
  uglify: {
    bar: {
      // uglify task &#34;bar&#34; target options and files go here.
    },
  },
});</code></pre>
<br>
<br>
<p></p>
<p class="p2">指定任务名和目标名,比如 grunt concat:foo 或者 grunt concat:bar 只运行目标名指定的配置;如果直接运行 grunt concat 则会顺序执行所有的目标。注意,如果一个任务被 grunt.renameTask 重命名了,Grunt 会在config对象中寻找新的名字命名的属性。</p>
<h2><strong>2.3 默认配置</strong></h2>
<p class="p2">在一个任务配置里,可以通过 options 属性来覆盖默认配置。任务中的每一个目标也都可以有一个与之对应的 options 属性。目标中的options配置会覆盖任务中的options。</p>
<p class="p2">options属性是可选的,如果没有必要可以省略。</p>
<p class="p3"></p>
<pre class="blockcode"><code class="language-javascript">grunt.initConfig({
  concat: {
    options: {
      // Task-level options may go here, overriding task defaults.
    },
    foo: {
      options: {
        // &#34;foo&#34; target options may go here, overriding task-level options.
      },
    },
    bar: {
      // No options specified; this target will use task-level options.
    },
  },
});</code></pre>
<br>
<br>
<p></p>
<h2><strong>2.4 文件</strong></h2>
<p class="p2">因为大部分的任务都是执行文件操作,所以Grunt对所要操作的文件有很强的抽象。有几种方式可以实现源文件到目标文件的映射,可以有多级的冗余和控制(不太好翻译)。任何一种多任务都可以理解下面的这些格式,所以你可以使用任何最合适的格式。</p>
<p class="p2">所有的文件的格式都支持”src“和”dest“,但是”简洁“和”文件数组“两种格式还支持如下一些<strong>附加属性</strong>:</p>
<ul class="ul1"><li class="li2">filter:过滤器,任意一个合法的 fs.stats 方法名(<a href="http://nodejs.org/docs/latest/api/fs.html#fs_class_fs_stats"><span class="s3">http://nodejs.org/docs/latest/api/fs.html#fs_class_fs_stats</span></a>),或者任何一个接受 src 作为文件路径并返回 True 或者 False的方法都可以。</li><li class="li2">nonull:非空,如果没有任何一个匹配被找到,那么就返回一个包含这个模式本身的列表。否则,返回一个空列表。这个选项可以结合grunt的 --verbose 参数来帮助调试文件路径问题。</li><li class="li2">dot:可以让模式匹配一个以句点开头的文件名,即使模式没有显式地指定一个句点。</li><li class="li2">matchBase:只匹配base路径,如果设置了这个参数,那么不会匹配子目录。比如 a?b 会匹配 /xyz/123/acb 但是不会匹配 /xyz/acb/123。</li><li class="li6"><span class="s4">expand:拓展,执行一个动态的 源文件到目标文件的映射,参见“</span>Building the files object dynamically”。</li><li class="li7"><span class="s5">其他所有的参数都会被当做配置参数传给底层库,参见 node-glob (<a href="https://github.com/isaacs/node-glob"><span class="s6">https://github.com/isaacs/node-glob</span></a>) 和 minimatch(<a href="https://github.com/isaacs/minimatch"><span class="s6">https://github.com/isaacs/minimatch</span></a>).</span></li></ul>
<h2><strong>2.5 简洁格式</strong></h2>
<p class="p2">这种模式一般用在只读任务中,只需要一个 src 属性而不需要 dest属性。简洁格式 也支持附加属性。</p>
<p class="p3"></p>
<pre class="blockcode"><code class="language-javascript">grunt.initConfig({
  jshint: {
    foo: {
      src: [&#39;src/aa.js&#39;, &#39;src/aaa.js&#39;
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP