因为一些原因,最近需要在公司推广使用nodejs写服务器,因为之前用es6开发过很多个人项目,所以知道新手开发node非常容易。代码写得零散,后人不易看懂。刚入行的时候,我是做java的。我觉得强类型语言更适合组织代码和团队合作。而且,由于强类型语言的类型强制声明,IDE可以达到很好的代码感知能力。因为有IDE的支持,所以,大型系统和复杂系统的开发更有保障。所以我折衷的选择了typescript开发,我用的是vsc(visualstudiocode)。不管是什么语言,什么项目,都得搭建一个足够高效的开发环境,让你开心的写代码(或者叫开发过程?不知道怎么形容,词穷).以下是我对typescript开发过程的最低要求:typescript代码在我保存文件时自动编译。编译完成后,服务会自动重启。您可以直接中断打字稿代码的调试。Gulp插件列表:gulp-nodemongulp-sourcemapsgulp-typescript先附上我的目录结构:用gulp任务编译ts文件最基本的就是编译ts文件,这里用到了gulp-typescript和gulp-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任务,比较简单,需要注意这些流程的顺序vargulp=require('gulp');varts=require('gulp-typescript');varsourcemaps=require('gulp-sourcemaps');vartsProject=ts.createProject('tsconfig.json');gulp.task('compile',function(){returntsProject.src()//注意order.pipe(sourcemaps.init()).pipe(tsProject()).pipe(sourcemaps.write()).pipe(gulp.dest('dist'));});这样,当我们在命令行运行gulpcompile时,就会生成js文件。打开js文件,文件底部会有sourcemap的url。如果需要生成.map文件,需要给.write方法传递一个相对路径:vargulp=require('gulp');varplugin1=require('gulp-plugin1');varplugin2=require('gulp-plugin2');varsourcemaps=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插件。详细的使用方法,直接点击上面的链接即可。这个东西踩了几个坑,需要大家注意下面的注释内容。这是最终的gulpfilevargulp=require('gulp');varts=require('gulp-typescript');varsourcemaps=require('gulp-sourcemaps');varnodemon=require('gulp-nodemon');vartsProject=ts.createProject('tsconfig.json');gulp.task('compile',function(){returntsProject.src().pipe(sourcemaps.init()).pipe(tsProject()).pipe(sourcemaps.write()).pipe(gulp.dest('dist'));});gulp.task('watch',['compile'],function(){returnnodemon({script:'dist/bin/www.js',//服务启动文件watch:'src',//源代码目录tasks:['compile'],//服务重启前要执行的任务ext:'ts',//.ts结尾的文件必须要监控//设置环境env:{'NODE_ENV':'development'},//必须开启调试模式exec:'node--debug'});});当然,你也可以使用vsc中的任务功能,将其集成到vsc中,参考这个即可,因为我用的是mac,直接把终端拖到另一个屏幕上,想看输出内容的时候,轻扫一下只需单击一下,所以我没有使用此功能。使用vsc进行代码调试这里使用attach方式进行调试,即通过nodemon--debug启动服务,并提供一个调试端口,然后我们使用vsc访问进行调试。点击进入调试菜单,点击生成调试配置文件(launch.json)。这是我配置的。使用时请删除这些评论。{"version":"0.2.0","configurations":[{"name":"Attach","type":"node",//必须是node,不是node2"request":"attach","port":5858,//节点调试模式的端口号,默认为5858"address":"localhost","restart":true,//与nodemon一起使用"sourceMaps":true,//启用sourcemap"outDir":"${workspaceRoot}/dist",//输出目录"outFiles":[],"localRoot":"${workspaceRoot}","remoteRoot":null}]}然后点进去,注意首先运行gulpwatch命令。
