Как использовать ts-nameof в цепочке сборки gulp, получив: Неизвестная опция компилятора 'getCustomTransformers'.?

Все строковые данные должны кодироваться в кодировке UTF-8.

$out = array(
   'render' => utf8_encode($renderOutput), 
   'text' => utf8_encode($textOutput)
);

$out = json_encode($out);
die($out);
0
задан kabeleced 25 January 2019 в 12:12
поделиться

1 ответ

Подготовка

Установка необходимых npm пакетов

npm install typescript
npm install gulp@^4.0.0                
npm install gulp-typescript@^5.0.0
npm install del
npm install ts-nameof

gulp-typescript БЕЗ проекта

Подготовка gulpfile.js

const gulp = require('gulp');
const ts = require('gulp-typescript');
const tsNameof = require("ts-nameof");
const del = require('del');

gulp.task('clean', () => {
    return del(['./dist/**']);
});    

gulp.task('ts', function () {
    return gulp.src('./src/**/*.ts')
        .pipe(ts({
            getCustomTransformers: () => ({ before: [tsNameof] })
        }))
        .pipe(gulp.dest('./dist'));
});

gulp.task('default',
    gulp.series(
        'clean',
        'ts',
    ));

gulp-typescript С проектом, использующим существующее tsconfig.json

Используя gulp-typescript с существующим tsconfig.json, необходимо настроить gulpfile.js там, где настроена опция getCustomTransformers:

Подготовка gulpfile.js

const gulp = require('gulp');
const ts = require('gulp-typescript');
const tsNameof = require("ts-nameof");
const del = require('del');

gulp.task('clean', () => {
    return del(['./dist/**']);
}); 

var tsProject = tsProject || null;
gulp.task('ts::Project', function () {
    if (!tsProject) {
        tsProject = ts.createProject(
            'tsconfig.json',
            {
                getCustomTransformers: () => ({ before: [tsNameof] })
            }
        );
    }
    return gulp.src('./src/**/*.ts')
        .pipe(tsProject())
        .pipe(gulp.dest("./dist"));
});

gulp.task('tsProject',
    gulp.series(
        'clean',
        'ts::Project',
    ));

Транспилирование

Выполнить gulpfile.js с

./node_modules/.bin/gulp

или

./node_modules/.bin/gulp tsProject

Выполнение

Выполнить переданный файл tsNameofTest.js

node dist/tsNameofTest.js  // expected output: nameString: log

Примечание: если цель typescript равна ESNext, я получил ошибки выполнения со следующим оператором в файле .ts, как это было в финале Файл .js тоже:

import 'ts-nameof';

Я получил исправлено, заменив его на

/// <reference path="../node_modules/ts-nameof/ts-nameof.d.ts" />

Обновление

Теперь даже можно установить определение типа из ts-nameof во всем мире:

npm install @types/ts-nameof --save-dev

Ни import, ни /// <reference path="" /> не является необходимым.

0
ответ дан kabeleced 25 January 2019 в 12:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: