grunt-processhtml在指定目标时删除不起作用

时间:2014-12-31 06:36:21

标签: node.js gruntjs grunt-plugins

我是新来的咕噜声。当我使用grunt构建我的prod环境时,我正试图从我的index.html pagae中删除一段代码。这是我的代码:

<!-- build:remove -->
<base href="/"></base>  
<!-- /build -->

<title>Some App</title>

<!-- build:css css/styles.min.css -->
<link href="/app/css/header.css" rel="stylesheet" />
<link href="/app/css/content.css" rel="stylesheet" />
<!-- /build -->

<!-- build:js js/scripts.head.min.js -->
<script src="/app/lib/myApp.js"></script>
<script src="/app/lib/someApp.js"></script>
<!-- /build -->

这是我的gruntfile.coffee代码:

    grunt.task.run("processhtml:build:#{targetEnv}")                        

以下是我配置processhtml的方法:

_processHtml =
    options: strip: true
    build: files: 'www/index.html': ['app/index.html']

如果我在index.html页面中添加prod target to build:remove语句,则不会删除HTML代码。但是,如果我离开目标('prod'),则删除HTML代码。这似乎是我的倒退。

所以,当我输入grunt build时,这是有效的:prod - 删除了'base'标签:

<!-- build:remove -->
<base href="/"></base>  
<!-- /build -->

当我输入grunt build时,这不起作用:prod - 'base'标签仍然存在:

<!-- build:remove:prod -->
<base href="/"></base>  
<!-- /build -->

我有什么想法可以解决这个问题 - 无论是我的代码还是我的理解?谢谢。

1 个答案:

答案 0 :(得分:3)

这是因为Grunt目标build:prod不存在。

您已定义build目标,但您正在调用prod目标。 Grunt不知道这样的目标,因此什么都不做。您在processhtml:build之后放置的部分(即processhtml:build: prod )必须与Grunt目标相对应。

processhtml:
  options: strip: true
  prod: # <- note this target!
    files: 'www/index.html': ['app/index.html']

如果在某些情况下未提供目标(由用户等),请确保您有默认目标(或考虑到将执行所有目标)。

我认为您遇到的主要困惑是此Grunt任务与其他Grunt任务的工作方式略有不同 - 通常,在任务名称映射到任务目标后的第一个冒号之后指定的任何内容。但是,似乎grunt-processhtml在内部利用了这些信息,并在第二次冒号后移动了实际的目标规范。

看一下detailed examples的grunt-processhtml任务,我相信你会发现我试图在上面描述的关系。