2015-12-31 28 views
5
İşte

ne arıyorum bir örnektir: Ben Grunt 'grunt.file.readJSON' kullanarak bir dosya içinde veri okumak biliyorumGrunt değişkenini Grunt görevindeki bir JavaScript işlevine iletebilir misiniz?

module.exports = function(grunt) { 
    grunt.initConfig({ 

    config: grunt.file.readYAML('_config.yml'), 
    // example variable: <%= config.scripts %> 

    copy: { 
     scripts: (function() { 
     if (config.scripts === true) { // I want to target <%= config.scripts %> 
      return { 
      expand: true, 
      cwd: '<%= input %>/_assets/js/', 
      src: '**/*.js', 
      dest: '<%= output %>/assets/js/' 
      }; 
     } else { 
      return { 
      // do nothing 
      }; 
     } 
     })() 
    } 

    }); 
}; 

ve sonra sahip oldukları aşağıdaki ile mevcut veriler değişken türü, '<% = pkg.value%>'.

Yapmak istediğim, JSON dosyasındaki değişkenlere dayalı if/else seçenekleriyle bir görev oluşturmaktır. Açıkça kavradığım şey, bir Grunt değişkeni '<% = pkg.value%>' ifadesinin, eğer anlayacağı şekilde JavaScript ifre ifadesine nasıl iletileceğidir. '<% =%>' ile aynı Grunt biçiminde geçirmeyi denedim, aynı zamanda bu parçayı kesip 'pkg.value' komutunu da atıyorum ama işe yaramıyor gibi görünüyor.

Birisi, bunun yapılıp yapılmayacağına ve nasıl yapılacağına biraz ışık tutabilirse, bunu nasıl takdir ederim. Teşekkürler! doğrudan hırıltı atamak yerine,

test.json

{ 
    "fruit": "apple" 
} 

Gruntfile.js

module.exports = function(grunt) { 

    grunt.initConfig({ 
    ... 
    }) 

    grunt.registerTask('sample-task', function() { 
    var test = grunt.file.readJSON('./test.json'); 

    if (test.fruit === 'apple') { 
     // do this one thing 
    } else { 
     // do something else 
    } 

    }); 

    grunt.registerTask('default', ['sample-task']); 
}; 
+1

Grunt görevinizin somut bir örneğini verir misiniz lütfen? (yorumların yerine '' görevinizle birşeyler yapın ') –

+0

Yukarıdaki düzenlemeye bakın. –

+0

Teşekkürler. Bir cevap yazarım. Dene. –

cevap

1

daha fazla zaman varsa, muhtemelen bazı ek fikirler içine bakacağız, ama burada öne sürülen fikirlere dayanan, bu şimdilik gidiş sona erdi budur.

module.exports = function(grunt) { 

    var config = grunt.file.readYAML('_config.yml'); 

    grunt.initConfig({ 

    copy: { 
     scripts: (function() { 
     if (config.scripts) { 
      return { 
      expand: true, 
      cwd: 'input/_assets/js/', 
      src: '**/*.js', 
      dest: 'output/assets/js/' 
      }; 
     } else { 
      return { 
      // do nothing 
      }; 
     } 
     })() 
    } 

    }); 
}; 

Herkese yardımlarınız için teşekkürler!

0

Grunt böyle bir şey kullanabilirsiniz dosyalarını okumak için bir API vardır config özniteliğinde yapılandırın, bir değişkende saklayın (gruntConfig). Şimdi aşağıdaki kodda erişebileceksiniz.

module.exports = function(grunt) { 
    // store your grunt config 
    var gruntConfig = grunt.file.readYAML('_config.yml'); 
    // init `script` with an empty object 
    var script = {}; 
    if (gruntConfig.script) { 
     script = { 
      expand: true, 
      cwd: '<%= input %>/_assets/js/', 
      src: '**/*.js', 
      dest: '<%= output %>/assets/js/' 
     }; 
    } 
    // Init Grunt configuration 
    grunt.initConfig({ 
     config: gruntConfig, 
     copy: { 
      scripts: script 
     } 
    }); 
}; 
+0

"test.json" dosyasındaki bir değişken true olarak ayarlanmışsa, taskA'yı çalıştırıyorsa veya false ise, taskB'yi çalıştırmak için bunu nasıl kullanabileceğimi paylaşabilir misiniz? Örneğimi referans için orijinal soruda da güncelledim. Teşekkürler! –

+0

işte burada! Sadece bir JSON nesnesi olsun, böylece normal bir JS nesnesi olarak değerlendirebilirsiniz. – alexdmejias

1

: