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

Я использую ts-nameof в моих файлах TypeScript, как в этом .ts -файле:

import 'ts-nameof';

export class MyTsNameOfTest {
  public testTsNameOf() {
    const nameString = nameof(console.log);
  }
}

Моя задача сборки Gulp - как рекомендуется здесь Конфигурация Gulp :

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

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

Запуск gulp Я получаю ошибку:

error TS5023: Unknown compiler option 'getCustomTransformers'.

Версии, которые я использую:

gulp 3.9.1
gulp-typescript 3.2.4
typescript 2.9.2
ts-nameof 2.0.0

Что я делаю не так? Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 19 января 2019

Подготовка

Требуется установка 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',
    ));

Transpiling

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

./node_modules/.bin/gulp

или

./node_modules/.bin/gulp tsProject

Исполнение

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

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

Примечание: , если typescript target is 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="" /> не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...