2014-11-23 4 views
1

Я новичок в Grunt, и я пытаюсь использовать модуль grunt-bower-concat node, чтобы объединить все мои компоненты bower в один файл js и css-файл соответственно. Он отлично работает, за исключением того, что я хочу заставить grunt-bower-concat использовать миниатюрные версии компонентов моей акустической системы вместо несжатых версий.Использование библиотек JavaScript внутри Gruntfile

К счастью, он приходит с 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 leart Grunt не имеет доступа к этой библиотеке.

Как я могу загрузить подчеркивание или использовать его функции внутри моего файла Grunt?

ответ

3

Не похоже, чтобы вы требовали подчеркивания в любом месте, если только вы не показываете весь файл.

Любой файл, в котором вы хотите использовать подчеркивание, что нужно сделать:

var _ = require('underscore');

Прежде чем использовать _.

О, и, конечно же, вам необходимо указать npm install underscore --save в папке, в которой находится файл grunt, чтобы там была библиотека.

+0

Это было. Спасибо. – mykisscool

4

Вместо того, чтобы требовать дополнительные библиотеки, просто заменить

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

с этим:

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

Это тоже работает. Благодаря! – mykisscool

+0

Это правда, что он помогает ему использовать '.map', но он не отвечает на вопрос о том, как он может загружать или использовать функции Underscores; это полагается на функцию собственного массива. – Paul

+0

@Paul Я предположил, что он задал этот вопрос, потому что он не знал, что подчеркивание не требуется для сопоставления массива. – idbehold

Смежные вопросы