Gulp의 디렉토리에서 파일을 어떻게 생성합니까?
내 gulpfile에는 버전 번호가 있습니다. 버전 번호를 파일에 쓰고 싶습니다. Gulp 에서이 작업을 수행하는 좋은 방법이 있습니까? 아니면 좀 더 일반적인 NodeJS API를 사용하셨습니까?
꿀꺽 꿀꺽 같은 방식으로이 작업을 수행해야 "가짜"비닐 파일 스트림을 pipe
생성대로 호출 할 수 있습니다 . 다음은 스트림을 만드는 기능입니다. "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);
쉽게 액세스 할 수있는 파일에 빌드 날짜를 지정하는 데 사용 return gulp.src(...)
하고 있으므로 build
작업 에서 먼저이 코드를 사용합니다 .
require('fs').writeFileSync('dist/build-date.txt', new Date());
이것은 또한 vinyl-source-stream으로 할 수 있습니다 . 꿀꺽 저장소 에서이 문서 를 참조하십시오 .
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의 관리자에 따르면 파일에 쓰는 데 선호되는 방법 은 작업과 함께 사용 하는 것입니다.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
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/'))
});
꿀꺽-헤더 패키지는 헤더 배너 파일을 접두사로 사용할 수 있습니다.
예. 그러면 자바 펼쳐 파일의 헤더에 배너가 삽입됩니다.
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 object-를 사용할 수 있습니다 .
은 Using 문자열을 스트림 과 비닐 소스 스트림 모듈 :
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'));
이것은 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');
다음은 2019 년에 적용되는 답변입니다.
플러그인:
var Vinyl = require('vinyl');
var through = require('through2');
var path = require('path');
// https://github.com/gulpjs/gulp/tree/master/docs/writing-a-plugin#modifying-file-content
function stringSrc(filename, string) {
/**
* @this {Transform}
*/
var transform = function(file, encoding, callback) {
if (path.basename(file.relative) === 'package.json') {
file.contents = Buffer.from(
JSON.stringify({
name: 'modified-package',
version: '1.0.0',
}),
);
}
// if you want to create multiple files, use this.push and provide empty callback() call instead
// this.push(file);
// callback();
callback(null, file);
};
return through.obj(transform);
}
그리고 꿀꺽 꿀꺽 파이프 라인에서 :
gulp.src([
...
])
.pipe(stringSrc('version.json', '123'))
.pipe(gulp.dest(destinationPath))
출처 : https://github.com/gulpjs/gulp/tree/master/docs/writing-a-plugin#modifying-file-content
through.obj ()에 전달하는 함수 매개 변수는 입력 파일에서 작동하는 _transform 함수입니다. 스트림 끝에서 조금 더 많은 데이터를 내 보내야하는 경우 선택적 _flush 함수를 제공 할 수도 있습니다.
변형 함수 내에서 this.push (file)을 0 번 이상 호출하여 변형 / 복제 된 파일을 전달합니다. 모든 출력을 callback () 함수에 제공하는 경우 this.push (file)을 호출 할 필요가 없습니다.
현재 파일 (스트림 / 버퍼)이 완전히 소모 된 경우에만 콜백 함수를 호출합니다. 오류가 발생하면 콜백에 대한 첫 번째 인수로 전달하고 그렇지 않으면 null로 설정합니다. 모든 출력 데이터를 this.push ()에 전달한 경우 콜백에 대한 두 번째 인수를 생략 할 수 있습니다.
일반적으로 gulp 플러그인은 file.contents를 업데이트 한 다음 다음 중 하나를 선택합니다.
callback (null, file)을 호출하거나 this.push (file)을 한 번 호출합니다.
참고 URL : https://stackoverflow.com/questions/23230569/how-do-you-create-a-file-from-a-string-in-gulp
'ProgramingTip' 카테고리의 다른 글
파일 크기 형식 공급자 (0) | 2020.11.06 |
---|---|
PostgreSQL에서 두 날짜 사이에 시계열 생성 (0) | 2020.11.06 |
Rails에서 부울 매개 변수를 어떻게 사용합니까? (0) | 2020.11.06 |
{% URL 사용 ??? (0) | 2020.11.06 |
AngularJS에서 전화 및 신용 카드 번호 형식 지정 (0) | 2020.11.06 |