ProgramingTip

Gulp의 디렉토리에서 파일을 어떻게 생성합니까?

bestdevel 2020. 11. 6. 19:00
반응형

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

반응형