Как создать файл из строки в Gulp?



в моем gulpfile у меня есть номер версии в строке. Я хотел бы записать номер версии в файл. Есть ли хороший способ сделать это в Gulp, или я должен смотреть на более общие API NodeJS?

771   8  

8 ответов:

Если вы хотите сделать это глотком, вы можете создать поток "поддельных" виниловых файлов и позвонить pipe в обычное время. Вот функция для создания потока. "поток" - это основной модуль, поэтому вам не нужно ничего устанавливать:

function string_src(filename, string) {
  var src = require('stream').Readable({ objectMode: true })
  src._read = function () {
    this.push(new gutil.File({
      cwd: "",
      base: "",
      path: filename,
      contents: new Buffer(string)
    }))
    this.push(null)
  }
  return src
}

вы можете использовать его как это:

gulp.task('version', function () {
  var pkg = require('package.json')
  return string_src("version", pkg.version)
    .pipe(gulp.dest('build/'))
})

это в значительной степени один лайнер в узле:

require('fs').writeFileSync('dist/version.txt', '1.2.3');

или из пакета.json:

var pkg = require('./package.json');
var fs = require('fs');
fs.writeFileSync('dist/version.txt', 'Version: ' + pkg.version);

я использую его, чтобы указать дату сборки в легкодоступном файле, поэтому я использую этот код перед обычным return gulp.src(...) на build задачи:

require('fs').writeFileSync('dist/build-date.txt', new Date());

Это также можно сделать с помощью винил-источник-поток. Смотрите документ в хранилище глотка.

var gulp = require('gulp'),
    source = require('vinyl-source-stream');

gulp.task('some-task', function() {
    var stream = source('file.txt');

    stream.end('some data');
    stream.pipe(gulp.dest('output'));
});

вы также можете использовать gulp-file:

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

gulp.task('version', function () {
    var pkg = require('package.json')

    return gulp.src('src/**')
        .pipe(file('version', pkg.version))
        .pipe(gulp.dest('build/'))
});

или без использования gulp.src():

gulp.task('version', function () {
    var pkg = require('package.json')

    return file('version', pkg.version, {src: true})
        .pipe(gulp.dest('build/'))
});

согласно сопровождающему Gulp, предпочтительным способом записи строки в файл является использование fs.writeFile с обратным вызовом задачи.

var fs = require('fs');
var gulp = require('gulp');

gulp.task('taskname', function(cb){
  fs.writeFile('filename.txt', 'contents', cb);
});

Источник:https://github.com/gulpjs/gulp/issues/332#issuecomment-36970935

на залпом-заголовок пакет может использоваться для префикса файлов с заголовочными баннерами.

например. Это введет баннер в заголовок ваших файлов javascript.

var header = require('gulp-header');
var pkg = require('./package.json');
var banner = ['/**',
  ' * <%= pkg.name %> - <%= pkg.description %>',
  ' * @version v<%= pkg.version %>',
  ' * @link <%= pkg.homepage %>',
  ' * @license <%= pkg.license %>',
  ' */',
  ''].join('\n');

gulp.src('./foo/*.js')
  .pipe(header(banner, { pkg: pkg } ))
  .pipe(gulp.dest('./dist/')

Gulp-это потоковая система сборки, использующая трубы.

Если вы просто хотите записать новый файл с произвольной строкой, вы можете использовать встроенный узел fs "объект".

Это также может быть достигнуто с помощью gulp-tap

Это может быть особенно полезно, если вы выделили несколько файлов, которые требуют этот заголовок. Вот соответствующий код (также из документации gulp-tap)

var gulp = require('gulp'),
    tap = require('gulp-tap');

gulp.src("src/**")
    .pipe(tap(function(file){
           file.contents = Buffer.concat([
             new Buffer('Some Version Header', 'utf8'),
             file.contents
           ]);
         }))
    .pipe(gulp.dest('dist');

С помощью строка-поток и винил-источник-поток модули:

var str = require('string-to-stream');
var source = require('vinyl-source-stream');
var gulp = require('gulp');

str('1.4.27').pipe(source('version.txt')).pipe(gulp.dest('dist'));

Comments

    Ничего не найдено.