গ্রান্ট টাস্কে কমান্ড চালানো


94

আমি আমার প্রকল্পে গ্রান্ট (জাভাস্ক্রিপ্ট প্রকল্পগুলির জন্য টাস্ক-ভিত্তিক কমান্ড লাইন বিল্ড টুল) ব্যবহার করছি। আমি একটি কাস্টম ট্যাগ তৈরি করেছি এবং আমি ভাবছি যে এটিতে কোনও কমান্ড চালানো সম্ভব কিনা।

স্পষ্ট করার জন্য, আমি ক্লোজার টেমপ্লেটগুলি ব্যবহার করার চেষ্টা করছি এবং "টাস্ক" জয়ার ফাইলটি জাভাস্ক্রিপ্ট ফাইলটিতে সয় ফাইল প্রাক-সংকলন করতে কল করা উচিত।

আমি কমান্ড লাইন থেকে এই জারটি চালাচ্ছি, তবে আমি এটি একটি কাজ হিসাবে সেট করতে চাই।

উত্তর:


105

বিকল্পভাবে আপনি এটিকে সহায়তা করার জন্য গ্রান্ট প্লাগিনগুলি লোড করতে পারেন:

গ্রান্ট শেলের উদাহরণ:

shell: {
  make_directory: {
    command: 'mkdir test'
  }
}

বা গ্রান্ট-এক্সিকিউট উদাহরণ:

exec: {
  remove_logs: {
    command: 'rm -f *.log'
  },
  list_files: {
    command: 'ls -l **',
    stdout: true
  },
  echo_grunt_version: {
    command: function(grunt) { return 'echo ' + grunt.version; },
    stdout: true
  }
}

9
কেউ কি জানেন যে এই দুজনের কোনওটি উইন্ডোজে ব্যবহারযোগ্য কিনা?
কপাজ

আমি grunt-shellউইন্ডোজ + সিগউইনের সাথে তাত্ক্ষণিকভাবে কাজ করতে পারিনি তবে আমার ভাগ্য ভাল grunt-exec
নাথান

4
গ্রান্ট-এক্সিকিউট সিঙ্ক্রোনসিভভাবে ব্যবহার করার কোনও উপায় আছে কি? একসাথে চেইন কমান্ডগুলি দিয়ে চমৎকার লাগবে
funseiki

4
@ ফুনসেিকি কেবল একটি ব্যাচ বা শেলের ভিতরে কমান্ডগুলি রেখেছিল যা আপনাকে আদেশগুলি পছন্দসই আদেশ দেয়। অথবা আপনি টাস্কটি যেমন মাইক্রিমডিএস সংজ্ঞায়িত করেন এবং লিখুন "exec:cmd1", "exec:cmd2"তবে আপনি সিঙ্ক্রোনালি অর্ডারও করেছেন ।
সেবাস্তিয়ান

35

চেক আউট grunt.util.spawn:

grunt.util.spawn({
  cmd: 'rm',
  args: ['-rf', '/tmp'],
}, function done() {
  grunt.log.ok('/tmp deleted');
});

5
সঙ্গে opts: {stdio: 'inherit'},আপনি কমান্ডের আউটপুট দেখতে পারেন
JuanPablo

4
দ্রষ্টব্য: সেমিডি প্যারাম একটি অ্যারে নয় স্ট্রিং হওয়া উচিত।
আর কেআই

4
এটি এখন grunt-legacy-utilপ্লাগইন প্রয়োজন । এটি require('child_process').spawn()পরিবর্তে ব্যবহারের পরামর্শ দেয় ।
জেডি

19

আমি একটি সমাধান পেয়েছি যাতে আমি আপনার সাথে ভাগ করে নিতে চাই।

আমি নোডের নীচে গ্রান্ট ব্যবহার করছি, টার্মিনাল কমান্ডগুলি কল করতে আপনার প্রয়োজন 'চাইল্ড_প্রসেস' মডিউল।

উদাহরণ স্বরূপ,

var myTerminal = require("child_process").exec,
    commandToBeExecuted = "sh myCommand.sh";

myTerminal(commandToBeExecuted, function(error, stdout, stderr) {
    if (!error) {
         //do something
    }
});

12
আপনার গ্রান্ট কনফিগারেশনটি কনফিগার হিসাবে রাখুন এবং কোড নয় বরং একটি প্লাগইন ব্যবহার করুন (বা নিজের লেখা) A গ্রান্ট শেল এবং গ্রান্ট-এক্সিকিউট দুটি উদাহরণ।
পেপারকোবয়

আপনি যেমন ব্যবহার shকরার আগে sh mayCommand.sh আমি নিশ্চিত না যে এটি উইন্ডোতে কাজ করবে
svassr

এটি কাজ করবে না কারণ এটি বাশ স্ক্রিপ্টিং। আমি ইউনিক্স ওএস এর অধীনে
চলছি

18

যদি আপনি সর্বশেষ গ্রান্ট সংস্করণটি (এই লেখার সময় 0.4.0rc7) ব্যবহার করছেন তবে গ্রান্ট-এক্সিকিউট এবং গ্রান্ট-শেল উভয়ই ব্যর্থ হয়েছে (তারা সর্বশেষ গ্রেন্টটি হ্যান্ডেল করার জন্য আপডেট হয় না বলে মনে হয়)। অন্যদিকে, চাইল্ড_প্রসেসের এক্সিকিউটিভ অ্যাসিঙ্ক, যা একটি ঝামেলা।

আমি জ্যাক ট্রেন্টের সমাধানটি ব্যবহার করে শেষ করেছি , এবং আমার প্রকল্পে ডেভ নির্ভরতা হিসাবে শেলজগুলি যুক্ত করছি যাতে আমি কেবল সহজে এবং সিঙ্ক্রোনালি পরীক্ষা চালাতে পারি:

var shell = require('shelljs');

...

grunt.registerTask('jquery', "download jquery bundle", function() {
  shell.exec('wget http://jqueryui.com/download/jquery-ui-1.7.3.custom.zip');
});

4
fyi উইন্ডোজ এর অধীনে ঠিকঠাক grunt-shellকাজ করছেgrunt v0.4.5
ফায়াট

আমি মনে করি শেলজগুলি ব্যবহার করা একটি দুর্দান্ত সমাধান কারণ এটি আপনার নোড অ্যাপ্লিকেশনটিকে শেলটি অ্যাক্সেস করতে সক্ষম করে এবং এটি কেবল গ্রান্ট অ্যাডোনগুলির তুলনায় আপনাকে এর উপর আরও ভাল নিয়ন্ত্রণ দেয় gives
নিক স্টিল 5

14

ছেলেরা চাইল্ড_প্রসেসকে ইশারা করছে তবে আউটপুট দেখতে এক্সিকিউসসিঙ্ক ব্যবহার করার চেষ্টা করুন ..

grunt.registerTask('test', '', function () {
        var exec = require('child_process').execSync;
        var result = exec("phpunit -c phpunit.xml", { encoding: 'utf8' });
        grunt.log.writeln(result);
});

কোনও অতিরিক্ত প্লাগইন ছাড়াই দুর্দান্ত সমাধান।
ভ্যালেন্টিনভিয়েরিউ

আমি একদিনের জন্য চলমান কাজগুলি চালানোর চেষ্টা করছি এবং শেষ পর্যন্ত একটি সাধারণ সমাধান যা কাজ করে!
জননি 5

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.