我们一起来喜欢TypeScript

现在写js不用TypeScript,伦家可能会觉得你是外星人。

是的,TypeScript很大程度增强了代码的可读性,可跟踪性,可维护性和减少了bug。

那么没有理由不适用TypeScript进行js开发,但是回归本质,要根据实际出发,不是盲目的一来直接上TS。


我参与过一些使用TS开发的项目,也发现使用TS出现的问题。

举点例子:

  1. 无处不见的any
  2. 无视TS

    高版本的express已经内置TS, 实际上到处还是any。
app.get("/", function(req:  any, res: any) {
res.send("Hello," + data.name);
});
  1. 本身一个函数能写完的代码,却写一个class来完成
  2. tslint编译一堆错误,依旧无视

    这条倒是其次, 因为很多时候,也许你没有那么多时间去处理这些问题。也说明我们在工程化下的功夫不足。

node和typescript

node + typescript 入门级别的配置真的特别简单。

  1. npm安装typescript
  2. 配置tsconfig.json
  3. 配置package.json的scripts命令

简单三步,你就可以通过简单的一步npm run xxx,TS文件们就乖乖的变为了js文件。

然后执行node dist/xx.js就能启动你的服务了。

但是,这不是我们所期望的。

我们希望我修改ts文件后,自动编译为js文件,然后启动服务。


我了解的相对较好的有下面三种方式:

ts-node-dev

这个方案是无意中看到的,star并不是特别多,400左右。

ts-node-dev 是基于 ts-node 的。

ts-node 可以直接执行ts文件,是不是很酷。

一句代码就可以监听文件变化,并运行编译后的代码。

ts-node-dev --respawn app.ts

我为什么要将Typescript与Express、nodejs一起使用(译文)

TypeScript-Node-Starter

微软这也有一个参考。也有对tslint的支持。

基本思路就是package.json 的scripts。

其主要使用的是 concurrently 和# nodemon

package.json的scripts如下:

  "scripts": {
"start": "npm run serve",
"build": "npm run build-sass && npm run build-ts && npm run tslint && npm run copy-static-assets",
"serve": "node dist/server.js",
"watch-node": "nodemon dist/server.js",
"watch": "concurrently -k -p \"[{name}]\" -n \"Sass,TypeScript,Node\" -c \"yellow.bold,cyan.bold,green.bold\" \"npm run watch-sass\" \"npm run watch-ts\" \"npm run watch-node\"",
"test": "jest --forceExit --coverage --verbose",
"watch-test": "npm run test -- --watchAll",
"build-ts": "tsc",
"watch-ts": "tsc -w",
"build-sass": "node-sass src/public/css/main.scss dist/public/css/main.css",
"watch-sass": "node-sass -w src/public/css/main.scss dist/public/css/main.css",
"tslint": "tslint -c tslint.json -p tsconfig.json",
"copy-static-assets": "ts-node copyStaticAssets.ts",
"debug": "npm run build && npm run watch-debug",
"serve-debug": "nodemon --inspect dist/server.js",
"watch-debug": "concurrently -k -p \"[{name}]\" -n \"Sass,TypeScript,Node\" -c \"yellow.bold,cyan.bold,green.bold\" \"npm run watch-sass\" \"npm run watch-ts\" \"npm run serve-debug\""
}

TypeScript with Node.js里面提供了更加简单的方法。 nodemon + ts-node

 "scripts": {
"start": "npm run build:live",
"build": "tsc -p .",
"build:live": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts"
},

TypeScript-Node-Starter的package.json可以好好看看,具有很好的扩展性。

3. gulp-typescript + gulp-nodemon

gulp-typescript负责编译ts

gulp-nodemon负责启动服务

主要任务就是copy, compile和watch

const gulp = require("gulp");
const ts = require("gulp-typescript");
const nodemon = require('gulp-nodemon')
const del = require('del');
const sourcemaps = require('gulp-sourcemaps'); const tsProject = ts.createProject("tsconfig.json", { noImplicitAny: true }); // 默认任务
gulp.task("default", ["copy", "compile", "watch"], function () {
console.log('started .....')
}) // 复制配置文件
gulp.task('copy', function () {
return gulp.src("./src/config/**/*.json")
.pipe(gulp.dest("./dist/config"))
}) // 编译
gulp.task("compile", function () {
return gulp.src("./src/**/*.ts")
.pipe(sourcemaps.init({ loadMaps: true }))
.pipe(tsProject())
.js
.pipe(sourcemaps.write('./maps'))
.pipe(gulp.dest("dist"));
}) gulp.task('build',['compile','copy']) // 删除
gulp.task('del', function (cb) {
return del([
'dist/**',
], cb);
}); // 监听变化
gulp.task('watch', ['compile'], function (done) {
var stream = nodemon({
script: 'dist/app.js',
watch: 'src/**',
tasks: ['copy', 'compile'],
done: done,
ext: 'ts html json'
})
return stream
})

使用typescript开发node js

TypeScript with Node.js


ESLint

到这里,我们已经又进了一步。

VSCode本身有插件TSLint插件,而且有新旧版。

ESLint插件默认是 可以读取tslint.json的配置的,如果没有,他有自己的默认配置。

新版的,如果有错误,默认是警告,而不是错误提示。

你去首选项勾选掉:tslint.alwaysShowRuleFailuresAsWarnings即可。


我们是需要添加eslint.json配置的

  1. 方便自定义
  2. eslint编译检查,比如你的同事是用txt文件编写的呢。

因此,我们还需要安装tslint包。

还需要在package.json的文件里面添加一个脚本

"tslint": "tslint -c tslint.json -p tsconfig.json",

Prettier

代码美化。很多编辑器都有类似功能, VSCode也不例外。

VSCode的Prettier内置了prettier-eslintprettier-tslint插件。

你可以在配置里面json文件修改或者配置面板修改。

"prettier.eslintIntegration": false,

这样一来,Prettier使用的就是tslint的配置。

在这里以后, windows换将下,默认情况,你就可以Ctl + Shift + F 自动格式化代码了。而且是按照你的tslint配置来格式化的, 就问你怕不怕。

总结

我们最后来看一下package.json下scripts的配置

"scripts": {
"build": "npm run tslint && npm run build-ts",
"build-ts": "tsc",
"watch-ts": "tsc -w",
"watch-node": "nodemon dist/app.js",
"tslint": "tslint -c tslint.json -p tsconfig.json",
"dev": "concurrently \\"npm:watch-ts\\" \\"npm run watch-node\\""
}
  • build: 最终的构建
  • build-ts: 仅仅是build TS文件
  • watch-ts: 文件变化时,就build
  • watch-node: build后的文件变化后,就重启服务
  • tslint: TS语法检查
  • dev: 开发模式下,修改ts文件后,自动build为js文件,并启动服务。

这样一来,感觉轻松多了。

想想就没好,自动美化代码,编写后自动启动服务。

喝点茶,出去走走。

VSCode搭建node + typescript开发环境的更多相关文章

  1. 快速搭建 Node.js 开发环境以及加速 npm

    如何快速搭建 node 开发环境 npm 超慢 github 无法打开的问题 于是我觉得应该写一篇文章解答所有这些起步问题,让新同学也能顺顺利利入门. 快速搭建 Node.js 开发环境 如果你想长期 ...

  2. 【转】使用nvm快速搭建 Node.js 开发环境

    原文链接:http://www.cnblogs.com/shuoer/p/7802891.html 快速搭建 Node.js 开发环境 如果你想长期做 node 开发, 或者想快速更新 node 版本 ...

  3. ES6 学习笔记 (2)-- Liunx环境安装Node.js 与 搭建 Node.js 开发环境

    笔记参考来源:廖雪峰老师的javascript全栈教程 一.安装Node.js 目前Node.js的最新版本是6.2.x.首先,从Node.js官网下载对应平台的安装程序. 1.下载 选择对应的Liu ...

  4. 手把手教你学node之搭建node.js开发环境

    搭建node.js开发环境 本文只针对在Linux或者Mac下面.至于使用 Windows 并坚持玩新技术的同学,我坚信他们一定有着过人的.甚至是不可告人的兼容性 bug 处理能力,所以这部分同学麻烦 ...

  5. 1.0搭建 Node.js 开发环境

    <搭建 Node.js 开发环境> 本课程假设大家都是在 Linux 或者 Mac 下面.至于使用 Windows 并坚持玩新技术的同学,我坚信他们一定有着过人的.甚至是不可告人的兼容性 ...

  6. 阿里云ECS搭建node/mongodb开发环境及部署

    一.前端的er在window或mac上安装开发环境应该再清楚不过了.但在服务器上安装还是有点不同的,毕竟是 centOS,从此不得不走上用命令操作…… 二.前期准备 1.首先,我们去阿里云网站阿里云服 ...

  7. MongoDB 搭建Node.js开发环境

    理解Mongoose Elegant MongoDB object modeling for Node.js   安装Mongoose   $ cnpm install --save mongoose ...

  8. 如何搭建 node,react 开发环境

    项目相关内容:Sublime + Node + React --注意:在 windows 操作系统中,如果把 node 安装在系统盘(一般是C盘),会导致 node 没有操作文件的权限的问题,如无法新 ...

  9. Oracle 搭建Node.js开发环境

      先决条件 安装oralce客户端驱动. 安装node.js.   创建项目 安装oracledb模块 $npm install oracledb 如果失败了,你可能要爬墙.   参考package ...

随机推荐

  1. Eclipse打JAR包,插件FatJar安装与使用

    下载fatJar插件,解压缩后是一个.../plugins/(net...)把plugins下面的(net..)文件夹拷贝到eclipse 的plugins下,重新启动Eclipse3.1,Windo ...

  2. ASCII 对照表

    ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字母的一套电脑编码系统.它主要用于显示现代英 ...

  3. P2048 [NOI2010]超级钢琴 (RMQ,堆)

    大意: 给定n元素序列a, 定义一个区间的权值为区间内所有元素和, 求前k大的长度在[L,R]范围内的区间的权值和. 固定右端点, 转为查询左端点最小的前缀和, 可以用RMQ O(1)查询. 要求的是 ...

  4. vijos 1423 最短路or环(有向图)

    最佳路线 描述 年久失修的赛道令国际汽联十分不满.汽联命令主办方立即对赛道进行调整,否则将取消其主办权.主办方当然必须马上开始行动. 赛道测评人员经过了三天三夜的数据采集,选出了若干可以使用的道路和各 ...

  5. 联想笔记本V470安装Win8.1 X64位系统,关机黑屏、电源灯亮

    以前的WIN7 X86系统用了很长时间了,软件业装了很多,现在使用的时候就有点卡了,最近决定重装个系统,后台发现开发的有一个东西要求WIN8 X64位的,就下载了一个准备直接安装了,也从此开始了整整2 ...

  6. 将 HttpPostedFile 转换成 Image 或者 Bitmap

    代码如下: HttpFileCollection httpfiles = context.Request.Files; files = httpfiles[i]; Image im = Image.F ...

  7. page上BeanId与ActionType中的ParameterId

    今天遇到一件有意思的异常. 一个基于EO的VO在页面加载进来之后就CreateRow了一行数据,主键HeaderId也相应的插入了值,但是在保存的时候,老是报HeaderId不能为空的异常. 经查,页 ...

  8. 在Windows下配置svn服务端钩子程序(部分)

    需求一,svn提交时必须填写log日志的需求,如何进行配置呢?请看下面. 需要在版本库目录下找到hooks文件夹,我的版本库是dxoffice,所以是这个目录,你要找自己的目录 然后进入,创建一个pr ...

  9. Mac安装zsh oh-my-zsh

    我们将安装 zsh ,其拓展功能和主题将由 oh-my-zsh 提供.其中Env.sh 文件用于维护别名(aliases),输出(exports)和路径改变(path changes)等等,以免影响  ...

  10. iOS系统版本与机型的对应关系

    1.手机系统版本:10.3 NSString* phoneVersion = [[UIDevice currentDevice] systemVersion]; 2.手机类型:iPhone 6 NSS ...