2014-11-23 70 views
1

我是Grunt的新手,我正尝试使用grunt-bower-concat节点模块将所有的bower组件分别连接到单个js文件和css文件中。它工作的很好,除了我想强制grunt-bower-concat使用我的bower组件的缩小版本而不是未压缩的版本。在Gruntfile中使用JavaScript库

幸运的是,它带有一个callback feature在那里我可以自定义此:

callback: function(mainFiles, component) { 
    return _.map(mainFiles, function(filepath) { 
    // Use minified files if available 
    var min = filepath.replace(/\.js$/, '.min.js'); 
    return grunt.file.exists(min) ? min : filepath; 
    }); 
} 

我把它添加到我的Gruntfile:

module.exports = function (grunt) { 
    grunt.initConfig({ 
     pkg: grunt.file.readJSON('package.json'), 
     bower_concat: { 
      all: { 
       dest: "src/js/<%= pkg.name %>-bower.js", 
       cssDest: "src/css/<%= pkg.name %>-bower.css", 
       callback: function(mainFiles) { 
        return _.map(mainFiles, function(filepath) { 
         var min = filepath.replace(/\.js$/, '.min.js'); 
         return grunt.file.exists(min) ? min : filepath; 
        }); 
       } 
      } 
     }, 
... 

它失败,出现以下错误:

$ /usr/local/bin/grunt --gruntfile /Applications/MAMP/htdocs/proj/Gruntfile.js bower_concat 
Running "bower_concat:all" (bower_concat) task 
Fatal error: _ is not defined 
Process finished with exit code 3 

这个例子试图使用underscore's map function它的c学习Grunt无权访问此库。

如何加载下划线或在我的Gruntfile中使用它的函数?

回答

3

看起来你不需要下划线,除非你不显示整个文件。

要在其中使用下划线,你需要做的任何文件:

var _ = require('underscore');

使得使用_之前。

哦,当然你也需要在gruntfile文件夹中的npm install underscore --save这个库里。

+0

这是它。谢谢。 – mykisscool 2014-11-23 16:40:09

4

,而不是要求额外库,只需更换

return _.map(mainFiles, function(filepath) { 

有了这个:

return mainFiles.map(function(filepath) { 
+0

这也适用。谢谢! – mykisscool 2014-11-23 19:55:40

+0

这是真的,因为它可以帮助他使用'.map',但是它并不回答他如何加载或使用Underscore的功能的问题;这依赖于本地数组功能。 – Paul 2014-11-24 18:05:25

+0

@Paul我以为他问这个问题是因为他不知道下划线不需要映射数组。 – idbehold 2014-11-24 20:51:18