2013-10-26 39 views
8

我正在使用grunt-usemin插件。我想知道下面如何做。grunt-usemin:定义自定义流程

我在index.html中有两个usemin配置块。

<!-- build:js /scripts/scriptsmin.js --> 
<script src="/scripts/jquery.min.js"></script> 
... 
... 
<!-- endbuild --> 

<!-- build:js /scripts/scripts.js --> 
<script src="/scripts/app.js"></script> 
.... 
... 
<!-- endbuild --> 

第一块,scriptsmin.js,被缩小的文件。 二,scripts.js,包含需要缩小的所有文件。

我喜欢。

  1. 运行minifier(uglifyjs)第二块
  2. 的concat与第二(步骤1)的缩小的版本第一块

上是否有可能如果这些块在同一文件中。我在flow上看到一段。无法关注我是否可以命名配置块,并在其中设置单独的流。它根据文件名称(index.html)讨论流程。我应该如何编写grunt useminPrepare部分。

+0

你知道这是可能的与当前版本的grunt-usemin? – fischermatte

回答

0

只是想知道为什么你需要两个单独的目标为您的JavaScript文件,特别是如果他们将被缩小为&连接成一个文件。我会做的就是有一个脚本块在文件的结尾,就像这样:

<!-- build:js /scripts/scripts.js --> 
<script src="/scripts/jquery.min.js"></script> 
<script src="/scripts/app.js"></script> 
<!-- endbuild --> 

很容易理解这样的,如果你所有的JS是一个块,而不是两个。 useminPrepare是一个基本上将Gruntfile配置更新为包含用于脚本和样式的concat,cssmin和uglify目标的任务。只需在具有构建注释的文件中运行它就可以了。

useminPrepare: { 
    html: 'build/index.html' 
} 

usemin不应该看useminPrepare太不一样了,但你想要做什么,你会发现是一个文件“种子” useminPrepare,如果包含相同的构建块作为HTML的其余部分。因此实际usemin配置可以有几个文件在那里:

usemin: { 
    html: ['build/index.html', 'build/about.html', 'build/contact.html'] 
} 

useminPrepare运行后,再运行你的CONCAT,丑化和cssmin任务,然后最后运行usemin。所以你有这样的自定义任务:

grunt.registerTask('build', ['useminPrepare', 'concat', 'uglify', 'cssmin', 'usemin']); 

希望这会有所帮助。

+0

感谢您的帮助。我有两个块的原因是,我保持缩小的外部库(jquery,angular等)完好无损,但只是concat。我读过它最好不要再通过经过良好测试的缩小文件再次运行minifier。所以我把它们放在一起。其他文件,如我的自定义js,需要缩小,然后与其他人连接。所以只有一个文件需要下载。抱歉不清楚这一点。你认为这是有道理的,可能的。再次感谢 – bsr

+1

jQuery通过Uglify进行缩小(这样看起来没有什么区别),Angular通过Google Closure(如果用Uglify再次压缩,就不会有什么区别); Uglify本身是一个经过测试的工具,如果您发现运行缩小文件时遇到任何问题,最好报告问题,然后我再次使用Uglify来缩小我加载的所有内容,而不管它是否已被缩小(通过RequireJS& r.js优化器),并没有看到任何问题。唯一的缺点是明显缩小代码需要更多时间,但我怀疑是否有两次运行min引起的错误。 – Ben

2

我有同样的问题。如果你对两个文件而不是一个满意,你可以使用usemin here的分支。它使一些新的流动,即

  • libs2min
  • 无效
  • 删除

full descriptions。所以你的HTML应该是:

<!-- build:libs2min /scripts/scriptsmin.js --> 
<script src="/scripts/jquery.js"></script> 
... 
... 
<!-- endbuild --> 

<!-- build:js /scripts/scripts.js --> 
<script src="/scripts/app.js"></script> 
.... 
... 
<!-- endbuild --> 

嵌套块是不是一个好主意,现在不幸。但你可以尝试一下。

要安装叉,而不是常规的咕噜,usemin的更改package.json为使

"devDependencies": { 
    ... 
    "grunt-usemin": "Rauno56/grunt-usemin", 
    ... 
}, 

,并保持眼睛的主要回购 - 也许功能不是从到达那里太远。