如何从Gulp中的string创build文件?

在我的gulpfile中,我有一个string的版本号。 我想写一个文件的版本号。 有没有一个很好的方式来做到这一点在Gulp,或者我应该看看更一般的NodeJS API?

如果您想要像吞咽一样的方式做到这一点,您可以创build一个“假”的乙烯基文件stream,并按照惯例调用pipe 。 这是一个创buildstream的函数。 “stream”是一个核心模块,所以你不需要安装任何东西:

 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'); 

或从package.json:

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

我正在使用它来在一个易于访问的文件中指定一个构builddate,因此我在build任务中通常return gulp.src(...)之前使用此代码:

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

这也可以用乙烯源stream来完成。 在gulp存储库中查看这个文档 。

 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的维护者,写一个string到文件的首选方法是使用fs.writeFile和任务callback。

 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

gulp-header软件包可用于为文件添加标题横幅。

例如。 这将注入一个横幅到您的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是利用pipe道的stream式构build系统。

如果你只是想用一个任意string写一个新文件,你可以使用内置的节点fs对象。

这也可以使用吞吐

如果您确定了多个需要此标头的文件,这可能会特别有用。 这里是相关的代码(也来自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'); 

使用串到stream和乙烯基源stream模块:

 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'));