如何从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'));