打字稿打字文件没有被创建/复制

打字稿打字文件没有被创建/复制

问题描述:

当我在命令行中我.js.map.d.ts文件被创建运行tsc打字稿打字文件没有被创建/复制

C:\Users\{user}\Documents\My Projects\BEPS\angular2-soap>tsc -version 
Version 1.8.10 

...但是当我调用以下Gulp功能一切作品除了未创建.d.ts文件/复制到./app/目录:

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文件:

"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文件:

{ 
    "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应用建议:

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

TypeError: Cannot read property 'pipe' of undefined 

我的猜测是,sourcemaps流是使用什么样的(不流typescript)...这有意义吗?如果是的话,我能做些什么来解决它?


下生成两个.js.d.ts文件 - 因为它没有试图也产生.map文件:

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/')) 
    ]); 
}); 
+0

尝试在保存'tsResults'时删除sourcmaps.write,而是在'merge'调用'tsResults.js.pipe(sourcemaps.write())。pipe(gulp.dest())'中使用它。有很大的可能性,可能无法正常工作。我对吞咽不太熟悉。 –

+0

我试过几种翻译'sourcemaps.init()'和'sourcemaps.write()'的顺序来无济于事......但'sourcemaps'似乎是干涉... – Neoheurist

我认为你需要使用的东西,如合并写两个JS文件和类型定义文件。我可能是错的,但我相信流在你的第一个gulp.dest()之后关闭,所以没有任何东西通过dts管道发送。看看readme file吞噬打字稿。在基本使用部分下。

更新:我能够得到以下使用您的tsconfig文件工作。尽管我只使用单个打印源文件。这会生成.js,.d.ts和.map文件。

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/')) 
    )] 


}); 
+0

I made尝试应用你的建议 - 但我得到一个错误 - “TypeError:无法读取属性'管'的undefined' ...我添加了我的新gulp函数到我的问题描述结束(上面) - 再次感谢 – Neoheurist

你应该有一个打字稿编译器,而不是两个。

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

谢谢,这简化了我的功能,但它仍然不会生成/写入任何'.d.ts'文件。 – Neoheurist

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

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 
    ]); 
}); 

由于冗余,我对此方法不满意 - 欢迎提供优化建议。