2016-12-01 2 views
0

gulpファイル内の外部ノードスクリプトのパラメータとしてbrowserSync外部URLを送信できます。 browserSyncオブジェクト(または他の方法)を介して外部URLにアクセスするにはどうすればよいですか?外部ノードスクリプトに渡すことができるように、BrowserSync外部URLをプログラムでGulpファイルで取得しますか?

var gulp = require('gulp'); 
var shell = require('gulp-shell'); 
var browserSync = require('browser-sync').create(); 

gulp.task('default', ['browser-sync', 'config']); 

gulp.task('browser-sync', function() { 
    browserSync.init({ 
     proxy: "localhost:8024", 
     open: "external" 
    }); 
}); 

gulp.task('config', shell.task([ 
    "node scripts/someNodeScript.js browserSync.externalURL" 
])); 

以下@スヴェン・shoenungにより、優れた回答に基づいてUPDATE

、私は少し彼のソリューションを微調整し、これを正常に使用しています:

var gulp = require('gulp'); 
var browserSync = require('browser-sync').create(); 
var spawn = require('child_process').spawn; 

var externalUrl; 

var browserSyncDone = function() { 
    spawn('node', ['scripts/someNodeScript.js', externalUrl], {stdio:'inherit'}); 
}; 

gulp.task('default', ['browser-sync']); 

gulp.task('browser-sync', function() { 
    browserSync.init({ 
     proxy: "localhost:8024", 
     open: "external" 
    }, function() { 
     externalUrl = browserSync.getOption('urls').get('external'); 
     browserSyncDone(); 
    }); 
}); 

答えて

2

あなたがにbrowserSync.getOptions('urls')を使用することができますすべてのアクセスURLのMapを取得してください。あなたはbrowserSync.init()にコールバック関数を渡す必要がありますか、あなたもすぐに値を取得しようとしますので、browser-syncが正常に初期化された後にのみ使用可能です

Map { 
    "local": "http://localhost:3000", 
    "external": "http://192.168.0.125:3000", 
    "ui": "http://localhost:3001", 
    "ui-external": "http://192.168.0.125:3001" 
} 

注:これは、このような何かを返します。

同じ理由でgulp-shellを使用することはできません。 shell.task()は、のbrowser-syncが初期化される前にに設定されるため、browserSync.getOptions('urls')はまだ利用できません。

代わりに、標準のnodejs child_process.spawn()を使用することをお勧めします。

var gulp = require('gulp'); 
var browserSync = require('browser-sync').create(); 
var spawn = require('child_process').spawn; 

var externalUrl; 

gulp.task('default', ['browser-sync', 'config']); 

gulp.task('browser-sync', function(done) { 
    browserSync.init({ 
    proxy: "localhost:8024", 
    open: "external" 
    }, function() { 
    externalUrl = browserSync.getOption('urls').get('external'); 
    done(); 
    }); 
}); 

gulp.task('config', ['browser-sync'], function(done) { 
    spawn('node', ['scripts/someNodeScript.js', externalUrl], {stdio:'inherit'}).on('close', done); 
}); 
+0

大変ありがとうございます。 –

+0

gulpがdone()関数が存在しないと不平を言いましたので、少し変更する必要がありました。私は正常に私が元の質問に投稿して使用しています。私はそれがそこにそれを掲示する悪い形であるかどうかわからないが、私は確信していなかった。 –

関連する問題