如何在gulp构建链中使用ts-nameof,获得:未知的编译器选项'getCustomTransformers'。

时间:2019-01-18 10:18:12

标签: typescript gulp gulp-typescript

我在TypeScript文件中使用ts-nameof,就像在此.ts文件中一样:

import 'ts-nameof';

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

我的Gulp构建任务-如此处Gulp configuration所建议:

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 :(得分:2)

准备

安装必需的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',
    ));

转载

使用{p>运行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="" />都是不必要的。