首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有创建/复制TypeScript类型文件

没有创建/复制TypeScript类型文件
EN

Stack Overflow用户
提问于 2016-04-29 18:20:48
回答 3查看 1.9K关注 0票数 2

当我从命令行运行tsc时,将创建.js.map.d.ts文件:

代码语言:javascript
复制
C:\Users\{user}\Documents\My Projects\BEPS\angular2-soap>tsc -version
Version 1.8.10

...but当我调用以下Gulp函数时,除了.d.ts文件没有被创建/复制到./app/目录之外,一切都正常:

代码语言:javascript
复制
gulp.task('compile-typescript', function () {
    var sourcemaps = require('gulp-sourcemaps');
    var typescript = require('gulp-typescript');
    var typescriptCompiler = typescript({typescript: require('typescript')});
    var typescriptProject = typescript(typescript.createProject('tsconfig.json'));

    var tsResults = gulp.src(['!./src/**/spec*.ts', './src/**/*.ts'])
        .pipe(typescriptProject)
        .pipe(sourcemaps.init())
        .pipe(sourcemaps.write('../map/'))
        .pipe(gulp.dest('./app/'))
        .pipe(typescriptCompiler).dts.pipe(gulp.dest('./app/'));

    return tsResults;
});

来自我的package.json文件的片段:

代码语言:javascript
复制
"devDependencies": {
   "autoprefixer": "6.3.6",
   "concurrently": "2.0.0",
   "cssnano": "3.5.2",
   "del": "2.2.0",
   "gulp": "3.9.1",
   "gulp-ext-replace": "0.3.0",
   "gulp-imagemin": "2.4.0",
   "gulp-postcss": "6.1.0",
   "gulp-sourcemaps": "1.6.0",
   "gulp-typescript": "2.13.0",
   "http-server": "0.9.0",
   "jasmine-core": "2.4.1",
   "karma": "0.13.22",
   "karma-chrome-launcher": "0.2.3",
   "karma-jasmine": "0.3.8",
   "karma-spec-reporter": "0.0.26",
   "lite-server": "2.2.0",
   "postcss": "5.0.19",
   "postcss-scss": "0.1.7",
   "precss": "^1.3.0",
   "run-sequence": "1.1.5",
   "systemjs": "0.19.26",
   "typescript": "latest",
   "typings": "0.8.1"
 },

我的tsconfig.json文件:

代码语言:javascript
复制
{
  "compileOnSave": true,
  "compilerOptions": {
    "target": "ES5",
    "module": "System",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": true,
    "noImplicitAny": true,
    "declaration": true,
    "sourceMap": true,
    "mapRoot": "map/",
    "diagnostics": true
  },
  "exclude": [
    "node_modules",
    "typings"
  ]
}

我认为我所需要做的就是使用dts管道将输入文件发送到./app/

我错过了什么/做错了什么?谢谢!

试图应用t34t5的建议:

代码语言:javascript
复制
gulp.task('compile-typescript', function () {
    var sourcemaps = require('gulp-sourcemaps');
    var typescript = require('gulp-typescript');
    var project = typescript.createProject('tsconfig.json', {declaration: true});
    var merge = require('merge2');

    var tsResults = gulp.src(['!./src/**/spec*.ts', './src/**/*.ts'])
        .pipe(sourcemaps.init())
        .pipe(typescript(project))
        .pipe(sourcemaps.write('../map/'));

    return merge([
        tsResults.dts.pipe(gulp.dest('./app/')),
        tsResults.js.pipe(gulp.dest('./app/'))
    ]);
});

我在访问tsResults.dts时出错

代码语言:javascript
复制
TypeError: Cannot read property 'pipe' of undefined

我的猜测是sourcemaps流是正在使用的(不是typescript流).这有道理吗?如果是的话,我能做些什么来解决这个问题?

以下内容同时生成了.js.d.ts文件--因为它并不试图也生成.map文件:

代码语言:javascript
复制
gulp.task('compile-typescript', function () {
    var typescript = require('gulp-typescript');
    var project = typescript.createProject('tsconfig.json', {declaration: true});
    var merge = require('merge2');

    var tsResults = gulp.src(['!./src/**/spec*.ts', './src/**/*.ts'])
        .pipe(typescript(project));

    return merge([
        tsResults.dts.pipe(gulp.dest('./app/')),
        tsResults.js.pipe(gulp.dest('./app/'))
    ]);
});
EN

回答 3

Stack Overflow用户

发布于 2016-04-29 19:39:45

我认为您需要使用诸如merge之类的方法来同时编写js文件和类型定义文件。我可能错了,但我相信流在第一个gulp.dest()之后就关闭了,所以没有任何东西通过dts管道发送。看看自述文件中的gulp打字本。在基本用法部分下。

更新:我能够使用您的tsconfig文件获得以下内容。不过,我只使用了一个类型记录源文件。这生成了.js、.d.ts和.map文件。

代码语言:javascript
复制
gulp.task('compile-typescript', function () {
    var typescript = require('gulp-typescript');
    var project = typescript.createProject('tsconfig.json', {declaration: true});
    var merge = require('merge2');

    var tsResults = gulp.src(['!./src/**/spec*.ts', './src/**/*.ts'])
        .pipe(sourcemaps.init())
        .pipe(typescript(project);

    return merge([
        tsResults.dts.pipe(gulp.dest('./app/')),
        tsResults.js.pipe(sourcemaps.write('./app/')).pipe(gulp.dest('./app/'))
    ]);


});
票数 1
EN

Stack Overflow用户

发布于 2016-05-01 20:03:29

下面实现了我正在寻找的效果--但它需要编译两次.ts源文件(一次是生成.js.map文件,一次是生成.d.ts文件)

代码语言:javascript
复制
gulp.task('compile-typescript', function () {
    var sourcemaps = require('gulp-sourcemaps');
    var typescript = require('gulp-typescript');
    var merge = require('merge2');

    var src = gulp.src(['!./src/**/spec*.ts', './src/**/*.ts']);
    var dst = gulp.dest('./app/');

    var jsMap = src.pipe(typescript(typescript.createProject('tsconfig.json')))
                   .pipe(sourcemaps.init())
                   .pipe(sourcemaps.write('../map/'));

    var dts = src.pipe(typescript(typescript.createProject('tsconfig.json')));

    return merge([
        jsMap.pipe(dst),   // writes .js and .map files
        dts.dts.pipe(dst)  // writes .d.ts files
    ]);
});

我不满意这种方法,因为冗余-优化建议是受欢迎的。

票数 1
EN

Stack Overflow用户

发布于 2016-04-29 20:06:39

你应该有一个类型记录编译器,而不是两个。

代码语言:javascript
复制
var typescriptProject = typescript.createProject('tsconfig.json', {
  typescript: require('typescript'), 
  declaration: true,
});

var tsResults = gulp.src(['!./src/**/spec*.ts', './src/**/*.ts'])
    .pipe(sourcemaps.init())
    .pipe(typescript(typescriptProject))
    .pipe(sourcemaps.write('../map/'))
    .pipe(gulp.dest('./app/'));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36945095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档