Задача Grunt не будет выполнять модули из кода узла, на который ссылается Require

#javascript #node.js #gruntjs

#javascript #node.js #gruntjs

Вопрос:

У меня есть следующая grunt задача:

     module.exports = function(grunt) {
    var info = 'Syncs, updates English translations and downloads Chinese translations.';    

    grunt.registerTask('translations', info, function() {
        require('../../node/poeditor');
    });
};
  

Я хочу, чтобы require выполнял код в этом модуле узла, его изложение выглядит следующим образом:

 var querystring = require('querystring'),
    fs = require('fs'),
    https = require('https');

// Sync Terms
console.log('Syncing Terms...');
var requestConfig = {
    options: {
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': 0
        },
        host: 'poeditor.com',
        method: 'POST',
        path: '/api/',
        port: '443'
    },
    data: {
        api_token: API_KEY,
        action: 'sync_terms',
        id: PROJECT_ID,
        data: ''
    }
};

fs.readFile('public/js/languages/en.json', 'utf8', function(error, data) { console.log(data);
});
  

Проблема в том, что никакие модули, упомянутые выше, вообще не выполняются, чего мне не хватает? Есть ли что-то особенное, что я должен сделать в Grunt или когда требуется модуль, для выполнения кода которого требуются другие модули?

Ответ №1:

Я понял это. Я выполнял асинхронные операции, поэтому вместо этого я назвал свою задачу следующим образом:

 grunt.registerTask('translations', info, function() {
        require('../../node/poeditor')(this);
    });
  

Передайте эту область через модуль:

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

И затем назначенный выполняется следующим образом:

 var done = grunt.async();
  

И при моем последнем асинхронном обратном вызове это вызывалось следующим образом:

 done();
  

Итак, в основном я должен был следовать этому:
http://gruntjs.com/creating-tasks#why-doesn-t-my-asynchronous-task-complete