我目前正在编写一个侧面项目,我可以在其中了解有关TypeScript和ES6(使用babel)的更多信息.

我想在我的TypeScript中使用ES6,所以我选择了以下工作流程.

打字稿(ES6) – > Babel(ES6) – > ES5

现在我正在使用Gulp来自动完成所有这些,并且我很难让源图正确生成.我应该提一下,用户在/ r / typescript上向我建议了这种风格,所以我甚至不确定它是否可行.

无论如何,这是我目前的gulp任务

var server = $.typescript.createProject('src/server/tsconfig.json');
gulp.task('build',['vet'],function () {
  var sourceRoot = path.join(__dirname,'src/server/**/*.ts');
  return gulp.src('src/server/**/*.ts')
    .pipe($.sourcemaps.init())
      .pipe($.typescript(server))
      .pipe($.babel())
    .pipe($.sourcemaps.write('.',{ sourceRoot: sourceRoot}))
    .pipe(gulp.dest('build/server'));
});

我尝试了很多不同的方法,但都没有用.在VSCode中调试时,我的app:build / server / index.js的入口点正确加载并找到源文件src / server / index.ts.

但是,当VSCode尝试进入另一个文件时,说build / server / utils / logger / index.js它会查找它找不到的src / server / utils / logger / index.js,因为它应该寻找*. ts文件.

那么我做错了什么?或者这甚至可能吗?我现在已经盯着这个约5个小时了.所以任何见解都会很棒.

此外,VSCode 0.9.x显示未找到’… / .js’文件,VSCode 1.0只是静默失败.

我的tsconfig.json,它被$.typescript.createProject()传入

{
  "compilerOptions": {
    "module": "commonjs","noImplicitAny": true,"removeComments": true,"preserveConstEnums": true,"target": "ES6","sourceMap": true,"outDir": "build/server"
  }
}

.babelrc

{
  "presets": ["es2015"]
}

这是相关的npm包

"devDependencies": {
    "babel-polyfill": "^6.2.0","babel-preset-es2015": "^6.1.18","gulp-babel": "^6.1.0","gulp-sourcemaps": "^1.6.0","gulp-typescript": "^2.9.2"
}

编辑:
我已经对gulp-sourcemaps进行了一些调查,当不使用babel时,源图可以正常工作. (删除了所有不相关的信息)

src / server / up / up2 / four.ts – 没有Babel

{
  "history": [ "/home/user/code/test/src/server/up/up2/four.js" ],"base": "/home/user/code/test/src/server/","sourceMap": {
    "sources": ["up/up2/four.ts"],"file": "up/up2/four.js"
  }
}

请注意它在sourceMap.sources中如何列出正确的源文件up / up2 / four.ts

现在这里是一个例子,当我将gulp-babel添加到任务中时.

src / server / up / up2 / four.ts – 使用Babel

{
  "history": [ "/home/user/code/test/src/server/up/up2/four.js" ],"sourceMap": {
    "sources": ["four.js"],"file": "up/up2/four.js"
  },"babel": {
    "...": "..."
  }
}

注意sourceMap.sources现在如何错误地显示four.js而不是typescript文件.

奇怪的是,只要打字稿文件位于根目录src / server中,他们就可以很好地构建源映射.

src / server / two.ts – 使用Babel

{
  "history": [ "/home/user/code/test/src/server/two.js" ],"sourceMap": {
    "sources": ["two.ts"],"file": "two.js"
  },"babel": {
    "...": "..."
  }
}

解决方法

更新

看来这个问题中的具体问题与Babel对不在工作目录中的文件的错误源映射生成有关. here已经提交了一个问题.

对于像这样的乙烯基File对象

new File({
  cwd: '.',base: './test/',path: './test/some/file.js'
  ...
});

生成的源映射应该有类似的东西

{
  ...
  "sources": ["some/file.js"]
  ...
}

但gulp-babel给出了

{
  ...
  "sources": ["file.js"]
  ...
}

这会导致Typescript源映射和Babel源映射错误地合并,但仅在文件比工作目录更深时才会合并.

虽然这个问题正在解决,但我建议使用Typescript定位ES5并完全绕过Babel.这会生成正确的源映射.

gulp.task('build',function () {
  return gulp.src('src/server/**/*.ts')
    .pipe(sourcemaps.init())
    .pipe(typescript({
      noImplicitAny: true,removeComments: true,preserveConstEnums: true,target: 'es5',module: 'commonjs'
    }))
    .pipe(sourcemaps.write('.',{ sourceRoot: 'src/server' }))
    .pipe(gulp.dest('build/server'));
});

上一个答案

你很接近,但我在你的配置中注意到了一些错误:

>“module”:“commonjs”与“target”不兼容:“es6”.使用Typescript输出ES6模块,让Babel将它们转换为Commonjs.
>使用Gulp时不需要“outDir”,因为您正在使用流.中间结果(即Typescript的结果)根本不写入磁盘.
>“sourceMap”:与Gulp源图一起使用true是不必要的.

我创建了一个为我编译的项目,使用babel@6.1.18和typescript@1.6.2.

目录结构

.
├── gulpfile.js
└── src
    └── server
        ├── one.ts
        └── two.ts

one.ts

export class One {};

two.ts

import { One } from './one';

export class Two extends One {}

gulpfile.js

我已经为简洁性内联了所有配置,但您应该能够轻松地使用配置文件.

var gulp = require('gulp');

var sourcemaps = require('gulp-sourcemaps');
var typescript = require('gulp-typescript');
var babel = require('gulp-babel');

gulp.task('build',target: 'es6'
    }))
    .pipe(babel({
      presets: [ 'es2015' ]
    }))
    .pipe(sourcemaps.write('.',{ sourceRoot: 'src/server' }))
    .pipe(gulp.dest('build/server'));
});

javascript – 使用TypeScript和Babel的Gulp源图的更多相关文章

  1. android – bundling failed:错误:插件0提供了“default”的无效属性

    我正在尝试使用此命令在我的AVD上运行react本机应用程序:但得到以下错误:.babelrc:package.json:我正在使用Windows,node.jsv8.11.3&反应原生v0.55.4我已经尝试过在互联网上推荐的所有内容,但仍然没有运气.如果有人可以提供帮助,真的很感激.解决方法这是babel-preset-react-native中的错误设置版本:

  2. Angular.js项目中使用gulp实现自动化构建以及压缩打包详解

    基于流的前端自动化构建工具,利用gulp可以提高前端开发效率,特别是在前后端分离的项目中。下面这篇文章主要给大家介绍了关于在Angular.js项目中使用gulp实现自动化构建以及压缩打包的相关资料,需要的朋友可以参考下。

  3. gulp加批处理(.bat)实现ng多应用一键自动化构建

    这篇文章主要给大家介绍了利用gulp加上批处理(.bat)实现ng多应用一键自动化构建的相关资料,文中介绍的很详细,需要的朋友可以参考借鉴,下面来一起看看吧。

  4. 使用typescript类型实现ThreeSum

    这篇文章主要介绍了使用typescript类型实现ThreeSum,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以一下,希望对你学习又是帮助

  5.  typeScript入门基础介绍

    这篇文章主要介绍了 typeScript入门基础,TypeScript 是由微软开发的开源、跨平台的编程语言,是 javaScript 的超集,最终被编译为 javaScript代码。常常被简称为TS支持JS、ES语法,下文将继续其他基础介绍,需要的朋友可以参考一下

  6. typescript返回值类型和参数类型的具体使用

    本文主要介绍了typescript返回值类型和参数类型的具体使用文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  7. 详解Webpack+Babel+React开发环境的搭建的方法步骤

    本篇文章主要介绍了详解Webpack+Babel+React开发环境的搭建的方法步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  8. 详解webpack2+node+react+babel实现热加载(hmr)

    这篇文章主要介绍了详解webpack2+node+react+babel实现热加载(hmr) ,非常具有实用价值,需要的朋友可以参考下

  9. Vue3 携手 TypeScript 搭建完整项目结构

    TypeScript 是JS的一个超级,主要提供了类型系统和对ES6的支持,使用 TypeScript 可以增加代码的可读性和可维护性,在 react 和 vue 社区中也越来越多人开始使用TypeScript,这篇文章主要介绍了Vue3 携手 TypeScript 搭建完整项目结构,需要的朋友可以参考下

  10. 在Mac OS上安装使用Node.js的项目自动化构建工具Gulp

    Gulp是一个在使用上比Grunt更加简洁的自动化工具(文中附有对比),和Node的npm包管理器配合使用非常方便,下面就记录一下在Mac OS上安装使用Node.js的项目自动化构建工具Gulp的方法:

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部