出于某些原因,近期开始需要在公司推广使用nodejs写服务端,因为之前使用es6开发过多个个人项目,所以知道新手开发node非常容易将代码写的散乱并且不易后人理解。本人刚入行的时候做的是java,觉得强类型的语言更加适合组织代码和团队合作,而且强类型语言因为类型强制声明,所以IDE可以做到很好的代码感知能力,因为有IDE的撑腰,所以开发大型系统,复杂系统比较有保障。所以折中的选择了typescript开发,也就用起了vsc(visual studio code)。
无论什么语言什么项目,总得搭建起一个足够高效可以让自己开心的写代码的开发环境(还是叫开发流程?不知道怎么描述了,词穷),以下是我对typescript开发流程的最低要求:

  1. typescript代码在我保存文件时自动编译

  2. 编译完成之后自动重启服务

  3. 可以直接在typescript代码上打断点调试

最终效果:

大家也看到了用的就是gulp+vsc内置的debug工具(使用attach模式),用到的gulp插件列表:

  • gulp-nodemon

  • gulp-sourcemaps

  • gulp-typescript

先附上我的目录结构:

使用gulp任务编译ts文件

最最基础的肯定是编译ts文件了,这里用到的就是gulp-typescriptgulp-sourcemaps(用于生成映射),详细的使用方法和可配置项可以直接点上面的链接进去看,这里我们需要根据tsconfig.json里的配置进行编译,tsconfig.json都差不多的,我这里贴下我的。

{"compilerOptions": {"target": "ES5","module": "commonjs","sourceMap": true,"outDir": "dist","emitDecoratorMetadata": true,"experimentalDecorators": true,"removeComments": false,"noImplicitAny": false},"includes": ["src/**/*"]
}

需要注意的地方就是为了调试ts代码的时候映射到编译后的文件上,sourceMap必须要开启,outDir也必须要指向正确的目录。
然后就开始编写gulp任务了,也是比较简单的,就需要注意下这些流的顺序

var gulp = require('gulp');
var ts = require('gulp-typescript');
var sourcemaps = require('gulp-sourcemaps');var tsProject = ts.createProject('tsconfig.json');gulp.task('compile', function () {return tsProject.src()// 注意顺序.pipe(sourcemaps.init()).pipe(tsProject()).pipe(sourcemaps.write()).pipe(gulp.dest('dist'));
});

这样我们在命令行运行gulp compile的时候,就会生成js文件了,打开js文件,在文件最下方也会有用于sourcemap的url,如果需要生成.map文件的话需要传递一个相对路径给.write方法:

var gulp = require('gulp');
var plugin1 = require('gulp-plugin1');
var plugin2 = require('gulp-plugin2');
var sourcemaps = require('gulp-sourcemaps');gulp.task('javascript', function() {gulp.src('src/**/*.js').pipe(sourcemaps.init()).pipe(plugin1()).pipe(plugin2()).pipe(sourcemaps.write('../maps')).pipe(gulp.dest('dist'));
});

监听文件变更自动编译并重启服务

要实现这个功能就要使用到gulp-nodemon这个插件了,详细的使用方法也直接点上面链接看就行了,这个东西踩过几个坑需大家注意一下下面注释的内容。这个也就是最后的gulpfile

var gulp = require('gulp');
var ts = require('gulp-typescript');
var sourcemaps = require('gulp-sourcemaps');
var nodemon = require('gulp-nodemon');var tsProject = ts.createProject('tsconfig.json');gulp.task('compile', function () {return tsProject.src().pipe(sourcemaps.init()).pipe(tsProject()).pipe(sourcemaps.write()).pipe(gulp.dest('dist'));
});gulp.task('watch', ['compile'], function () {return nodemon({script: 'dist/bin/www.js',  // 服务的启动文件watch: 'src',    // 源代码目录tasks: ['compile'], // 在重启服务前需要执行的任务ext: 'ts', // 监听.ts结尾的文件 必须// 设置环境env: {'NODE_ENV': 'development'},// 必须开启debug模式exec: 'node --debug'});
});

当然啦,你也可以使用vsc里面task的功能,把他集成到vsc里面去,参考这个去做就行了,因为我用的是mac,直接把终端拖到另一个屏幕去了,要看输出内容的时候直接划一下就行,所以没有使用这个功能。

使用vsc进行代码调试

这里使用的是attach模式进行调试,也就是由nodemon --debug来启动服务,并提供出一个debug的端口,然后我们用vsc接入进行调试。
点击进入debug菜单

然后点击

生成debug的配置文件(launch.json),这里提供下我配置好的,使用的时候注意把那些注释删掉。

{"version": "0.2.0","configurations": [{"name": "Attach","type": "node", // 必须为node,不能为node2"request": "attach","port": 5858, // 为node debug模式的端口号,默认为5858"address": "localhost","restart": true, // 配合nodemon使用"sourceMaps": true, // 开启了sourcemap"outDir": "${workspaceRoot}/dist", // 输出目录"outFiles": [],"localRoot": "${workspaceRoot}","remoteRoot": null}]
}

然后点击

就可以了,注意要先运行gulp watch命令。

使用gulp和vsc构建高效的typescript开发环境相关推荐

  1. Visual Studio Code搭建TypeScript开发环境

    转载 http://www.cnblogs.com/sunjie9606/p/5945540.html 使用Visual Studio Code搭建TypeScript开发环境 1.TypeScrip ...

  2. 使用Visual Studio Code搭建TypeScript开发环境

    使用Visual Studio Code搭建TypeScript开发环境 1.TypeScript是干什么的 ? TypeScript是由微软Anders Hejlsberg(安德斯·海尔斯伯格,也是 ...

  3. docker mysql开发环境_Docker 构建PHP+Apache+MySQL 开发环境

    文章目錄 通过Docker 构建PHP+Apache+MySQL 开发环境,所有的服务(Apache,MySQL)和语言环境(PHP)都将在容器中运行,代码编写在宿主机内编写,并在宿主机的浏览器进行查 ...

  4. 构建scala+IDEA+sbt开发环境

    构建scala+IDEA+sbt开发环境 @(SCALA)[scala] 设置build.sbt后,idea不会自动下载依赖关系??后台运行sbt compile成功,但idea没有自动将相应的包放到 ...

  5. 使用Visual Studio Code + Node.js搭建TypeScript开发环境

    Visual Studio Code搭建Typescript开发环境 -- 相关文章: http://www.cnblogs.com/sunjie9606/p/5945540.html [注意:这里仅 ...

  6. mac brew 测速 软件_Mac已到手?从零开始,八步打造一个高效舒适的开发环境

    俗话说,写代码两分钟,配置环境两小时.不过俗话又说,环境配得好,编程没烦恼. 新机器到手?且慢. 漫漫"调教"机器的路才刚刚开始. 作为深度Mac系程序媛,笔者从新机器到手 顺手, ...

  7. 初学 ASP.NET AJAX (一):构建 ASP.NET AJAX 开发环境

    1 概述 Microsoft ASP.NET AJAX 是 Microsoft 公司对 Ajax 技术的完美封装.它能使你已快速的创建包含丰富用户体验的用户界面的 Web 页面,提供加入了跨浏览器的 ...

  8. vscode 构建Python ,和C++ 开发环境

    1.For Python 我们大家都知道,若是小白用户,想简单方便的话,就直接怼上 anacoda 集成开发神器,然后,在vscode 的设置下面的python 的解释器设置成 anacoda 的py ...

  9. 手牵手系列之TypeScript开发环境搭建

    新建项目 初始化 npm init 安装全局依赖 npm install typescript tslint -g 执行命令初始化,项目根目录生成tsconfig.json文件 tsc --init ...

最新文章

  1. 克服过拟合和提高泛化能力的20条技巧和诀窍
  2. 魔兽最多人的服务器,魔兽怀旧服:70级热门服务器人口一览!这4大服最值得建号投入!...
  3. SpringBoot集成thymeleaf增删改查示例
  4. pythonmkdir语法错误_Python mkdir一个有难度的问题
  5. linux看磁盘空间du df,df与du查看磁盘空间使用不一致的解决方法
  6. 1、varargout与nargout区别
  7. git SourceTree 客户端 安装/使用教程
  8. IIS 配置 PHP 环境搭建:web 文件管理器
  9. 首席赚钱源码(外卖券+电影+淘宝客+提现裂变流量主)功能强大
  10. keil 4c语言 百度经验,Keil教程(4)
  11. 浅析openvn redirect-gateway组建公司专网的使用
  12. vbscript mysql_vbscript 数据库操作
  13. Mysql获取当天用户生日
  14. Error obtaining UI hierarchy Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncExc
  15. 烧洋芋、苞谷、饵块和昭通酱
  16. python实现数的逆序_python怎么逆序
  17. atob解码图片base64时候报错
  18. 交互技术前沿学习心得——利用眼动追踪改良广告界面
  19. EditText属性大全
  20. Dubbo经典之作(Dubbo使用详解)

热门文章

  1. mysql中文注释语法报错_Linux系统Python配置MySQL详细教程
  2. SLAM学习--2D激光SLAM-圣经-概率机器人学各种扩展
  3. 如何查看进程的运行路径
  4. 北斗导航 | 大规模点云地图的自动化构建(高翔:SLAM十四讲)
  5. CEdit 控件 更新内容的 方法(可以自动滚动至末尾)
  6. html em vw,CSS3 的视口单位vw、vh实现自适应(带有px,em,rem的简单介绍)
  7. dr优先级默认_OSPF中的DR/BDR的选取规则:DR优先级,Router ID
  8. 监控服务器怎么增加碟机,微服务业务监控方法及服务器专利_专利申请于2017-12-15_专利查询 - 天眼查...
  9. C指针原理(24)-C指针基础
  10. 【深度学习】网络架构设计:CNN based和Transformer based