nodejs直接gruntを呼び出す(バッチ処理を起動しない)
4668 ワード
windowsの下で、私達はjsの構築の仕事をして、すべてgrunt-cliをインストールすることに慣れて、命令行gruntだけが必要です.すべての構築作業は自動的に完了しました.これはもう完璧な状況ですが、最近はサーバー版の自動化構築システムを作りたいです.nodejsでバッチ処理実行のgruntを呼び出すと、とても低く見えます.もっと良くて、もっと綺麗な方法がありますか?
gruntはもともとnodejsプログラムです.インストール後にnode_として表現されます.module、ではcliは何ですか?これはただnodejsで書いた命令行のインターフェイスです.だから、nodejsはきっと直接jsレベルでgruntを呼び出すことができます.
私たちがやるべきことは、cliのベールをはがすだけです.
まず、cliの設置後の位置を見てみます.
(win 7)
cliの主要コードはパラメータ判定処理の山ですが、最終的にはgrunt.ci()です.
じゃ、私達は自分のnodejsプロジェクトに戻ります.まずgruntモジュールをインストールして、jsコードの中で軽く二つを書きます.
すべてのことを考えてみました.とても順調です.
しかし、ここには小さな穴があります.ケンコを振り回した時、gruntfileは絶対パスでなければいけません.相対パスではいけません.
最後に、gruntのコードを賞賛しなければなりません.cliのパラメータが分からないなら、consoli.log(grunt.cli)だけが必要です.これは冷たい出力function(){xxxx}ではなく、パラメータの説明です.作者の苦心に感心せざるを得ない.
gruntはもともとnodejsプログラムです.インストール後にnode_として表現されます.module、ではcliは何ですか?これはただnodejsで書いた命令行のインターフェイスです.だから、nodejsはきっと直接jsレベルでgruntを呼び出すことができます.
私たちがやるべきことは、cliのベールをはがすだけです.
まず、cliの設置後の位置を見てみます.
(win 7)
C:\Users\kenkozheng\AppData\Roaming
pm
ode_modules\grunt-cli
cliの主要コードはパラメータ判定処理の山ですが、最終的にはgrunt.ci()です.
#!/usr/bin/env node
'use strict';
process.title = 'grunt';
// Especially badass external libs.
var findup = require('findup-sync');
var resolve = require('resolve').sync;
// Internal libs.
var options = require('../lib/cli').options;
var completion = require('../lib/completion');
var info = require('../lib/info');
var path = require('path');
var basedir = process.cwd();
var gruntpath;
// Do stuff based on CLI options.
if ('completion' in options) {
completion.print(options.completion);
} else if (options.version) {
info.version();
} else if (options.base && !options.gruntfile) {
basedir = path.resolve(options.base);
} else if (options.gruntfile) {
basedir = path.resolve(path.dirname(options.gruntfile));
}
try {
gruntpath = resolve('grunt', {basedir: basedir});
} catch (ex) {
gruntpath = findup('lib/grunt.js');
// No grunt install found!
if (!gruntpath) {
if (options.version) { process.exit(); }
if (options.help) { info.help(); }
info.fatal('Unable to find local grunt.', 99);
}
}
// Everything looks good. Require local grunt and run it.
require(gruntpath).cli();
じゃ、私達は自分のnodejsプロジェクトに戻ります.まずgruntモジュールをインストールして、jsコードの中で軽く二つを書きます.
var grunt = require('grunt');
console.log(grunt.cli);
grunt.cli({
gruntfile: __dirname + '/applications/5/check_out/Gruntfile.js'
});
すべてのことを考えてみました.とても順調です.
しかし、ここには小さな穴があります.ケンコを振り回した時、gruntfileは絶対パスでなければいけません.相対パスではいけません.
最後に、gruntのコードを賞賛しなければなりません.cliのパラメータが分からないなら、consoli.log(grunt.cli)だけが必要です.これは冷たい出力function(){xxxx}ではなく、パラメータの説明です.作者の苦心に感心せざるを得ない.