使用typescript开发字节轻服务(云工程)

官网写得很简单
按照官网的思路确实可以使用ts开发,但是缺少路径别名处理,监听ts文件更改等功能。

1. 增加typescript支持

1.1 把源文件都改成ts,当然前提要安装typescript依赖以及配置tsconfig.json

目录结构

1.2 使用tsc编译所有ts文件

这里我配置的是编译到dist目录:

编译后的文件

编译完成后在根目录的index.js中修改一下,因为以前是启动的src/app.js,现在编译完成后当然位置就不一样了:

// 把这里的地址改成编译后的app.js的地址
const app = require('./dist/app')
module.exports = app.callback()

如果你把所有的requiremodule.exports改成了importexports,启动项目的时候报错,那么index.js中导入方式可能要改一下

module.exports = app.default.callback()

2. 路径别名处理

为了方便经常设置路径别名,ts中的别名和webpack中的别名是一个意思,但是有个问题就是编译的时候确没有替换掉别名。

// tsconfig.json
    "paths": {
      "@/*": ["src/*"]
    }

2.1 使用tsconfig-paths(不得行)

以前我的项目就是用的这个,但是这里不能用,主要是因为这个插件是运行时插件,也就相当于中间件,当你使用node或者ts-node启动项目的时候可以用它。
而目前云工程部署并不支持额外的node参数,如果能有和pm2一样的这个命令就好了

pm2 start bootstrap.js --node-args="-r tsconfig-paths/register"
如果参考pm2就可以这样
inspirecloud dev --node-args="-r tsconfig-paths/register"
控制台增加一个添加node参数的地方,再把这参数加上就完美了 

2.2 使用tscpaths

安装完成后把打包命令改成
tsc --project tsconfig.json && tscpaths -p tsconfig.json -s ./src -o ./dist
就行了

3. 添加监控

开发阶段肯定不能改一下去build一下,最好有自动化,官方项目上面有个inspirecloud.json文件

{
  "main": "index.js",
  "watch": [
    "**/*.js"
  ]
}

这里面有watch的选项,但是没有更多可控的选项,所以我使用了gulp来辅助监听

3.1 添加gulp

gulp安装完成,编写gulpfile.js,这里我用到了gulp-shell插件:

const gulp = require('gulp')
const shell = require('gulp-shell')
// 原理很简单就是监听`src`下的文件,一有改变就执行`build`
const watch =  async () => {
  gulp.watch('src/**/*', {ignoreInitial: false}, shell.task('tsc --project tsconfig.json && tscpaths -p tsconfig.json -s ./src -o ./dist'))
}
module.exports = {
  watch,
}

我本来想把buildinspirecloud dev和在一起,但是好像没办法同时执行两个监听任务。

4 结果

最后的效果就是要开两个任务。

左边使用`gulp watch`,右边使用`inspirecloud dev`

这样当src里面的文件变化的时候就会触发构建,然后inspirecloud dev监听了所有js文件,发现有新的js文件就会触发重启服务。

由于我用过的工具不是很多,所以只能想到这种方法,如果有更好的方法欢迎讨论!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容