如何使用Gulp向文件添加一行文本

Dar*_*ley 14 file edit inject gulp

我一直试图弄清楚如何使用Gulp为任何类型的文件添加一行文本.

比如添加:

@import 'plugins'
Run Code Online (Sandbox Code Playgroud)

到我的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'));
});
Run Code Online (Sandbox Code Playgroud)

没有快乐.知道如何才能实现这一目标吗?

Sve*_*ung 26

取决于你想做什么.

如果您只想将文本添加到文件的开头或结尾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'));
});
Run Code Online (Sandbox Code Playgroud)

如果您的文件中有某种"锚"文本,您可以使用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'));
});
Run Code Online (Sandbox Code Playgroud)

最后是瑞士军刀的乙烯基文件操作: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'));
});
Run Code Online (Sandbox Code Playgroud)