私はgulp-awspublishを使用してS3バケットにデプロイされる単純なシングルページアプリケーションを持っています。 (gulp-prompt経由)を使用して、デプロイするバケットをデベロッパーに問い合わせます。1つのファイルを複数のs3バケットにgulp-awspublishで書き込む
アプリが複数のS3バケットに展開されることがあります。現在のところ、1つのバケットしか選択できないため、開発者は各バケットの順番にgulp deploy
にする必要があります。これは鈍く、エラーが発生しやすい。
複数のバケットを選択してそれぞれに同じコンテンツを展開できます。 inquirer.js/gulp-promptで複数のバケットを選択するのは簡単ですが、単一のストリームから任意の複数のS3送り先を生成するのは簡単ではありません。
私たちのdeploy
タスクは、generator-webappのS3 recipeに基づいています。このレシピでは、gulp-renameは、特定のバケットに書き込むパスを書き換えることを提案しています。
gulp.task('deploy', ['build'],() => {
// get AWS creds
if (typeof(config.awsCreds) !== 'object') {
return console.error('No config.awsCreds settings found. See README');
}
var dirname;
const publisher = $.awspublish.create({
key: config.awsCreds.key,
secret: config.awsCreds.secret,
bucket: config.awsCreds.bucket
});
return gulp.src('dist/**/*.*')
.pipe($.prompt.prompt({
type: 'list',
name: 'dirname',
message: 'Using the ‘' + config.awsCreds.bucket + '’ bucket. Which hostname would you like to deploy to?',
choices: config.awsCreds.dirnames,
default: config.awsCreds.dirnames.indexOf(config.awsCreds.dirname)
}, function (res) {
dirname = res.dirname;
}))
.pipe($.rename(function(path) {
path.dirname = dirname + '/dist/' + path.dirname;
}))
.pipe(publisher.publish())
.pipe(publisher.cache())
.pipe($.awspublish.reporter());
});
それがうまくいけば明らかだが、config.awsCredsは次のようになります。:現在、私たちの仕事は、このようになります
awsCreds: {
dirname: 'default-bucket',
dirnames: ['default-bucket', 'other-bucket', 'another-bucket']
}
ガルプ・名前変更は、正しいバケツを使用する先のパスを書き換えます。
gulp-prompt
オプションで「リスト」ではなく「チェックボックス」を使用して複数のバケットを選択できますが、複数のバケットにどのように配信するかはわかりません。
一言で言えば、$.prompt
が文字列ではなく文字列の配列を返す場合、単一のバケットではなく複数の送り先(バケット)にソースを書き込むにはどうすればよいですか?
gulp.dest()
は使用されておらず、gulp.awspublish()のみが選択されています。選択できるバケットの数はわかりません。
優秀、ありがとう、スヴェン。私は何か似てみましたが、明らかに構文が間違っています。 – mattcooney
(私が誤ってサンプルコードから除外した 'publisher.publish()'行を追加したのは初めてでした)。 – mattcooney