web-dev-qa-db-ja.com

Gulpを使用して1行のテキストをファイルに追加するにはどうすればよいですか?

Gulpを使用して、任意のタイプのファイルに1行のテキストを追加する方法を見つけようとしています。

たとえば、次を追加します。

@import 'plugins'

私のmain.sassファイルに。

または、CDNをindex.htmlファイルに追加します。

私は試しました:

gulp.task('inject-plugins', function(){
   gulp.src('src/css/main.sass')
    .pipe(inject.after('// Add Imports', '\n@import \'plugins\'\n'));
});

喜びもなく。どうすればこれを達成できるか考えてください。

14
Darryl Morley

あなたが何をしたいかによります。

ファイルの最初または最後にテキストを追加したいだけの場合 gulp-header および gulp-footer あなたの友達です:

var header = require('gulp-header');
var footer = require('gulp-footer');

gulp.task('add-text-to-beginning', function() {
  return gulp.src('src/css/main.sass')
    .pipe(header('@import \'plugins\'\n'))
    .pipe(gulp.dest('dist'));
});

gulp.task('add-text-to-end', function() {
  return gulp.src('src/css/main.sass')
    .pipe(footer('@import \'plugins\''))
    .pipe(gulp.dest('dist'));
});

ファイルにある種の「アンカー」テキストがある場合は、 gulp-replace

var replace = require('gulp-replace');

gulp.task('replace-text', function() {
  var anchor = '// Add Imports';
  return gulp.src('src/css/main.sass')
    .pipe(replace(anchor, anchor + '\n@import \'plugins\'\n'))
    .pipe(gulp.dest('dist'));
});

最後に、ビニールファイル操作のスイスアーミーナイフがあります: map-stream 。これにより、ファイルの内容に直接アクセスでき、JavaScriptで考えられるあらゆる種類の文字列操作を実行できます。

var map = require('map-stream');

gulp.task('change-text', function() {
  return gulp.src('src/css/main.sass')
    .pipe(map(function(file, cb) {
      var fileContents = file.contents.toString();
      // --- do any string manipulation here ---
      fileContents = fileContents.replace(/foo/, 'bar');
      fileContents = 'First line\n' + fileContents;
      // ---------------------------------------
      file.contents = new Buffer(fileContents);
      cb(null, file);
    }))
    .pipe(gulp.dest('dist'));
});
26
Sven Schoenung