方法一: 启动两个终端,先用一个终端tsc编译,再用另一终端nodemon监听dist目录里的文件变动,前提是要安装开发依赖nodemon和ts-node
npm i -D nodemon ts-node
npm run build
npm run start
方法二:直接运行;nodemon ≥1.19.0默认使用ts-node解析ts文件,前提是要安装开发依赖nodemon和ts-node
npx nodemon src\index.ts
方法三:通过配置文件指定ts文件的处理方式;可以针对不同的文件类型运行指定的可执行文件或命令
npx nodemon src\index.ts
方法四:nodemon --exec "你要执行的命令"; 监听文件改变去执行exec后面的命令
nodemon --watch src/**/*.ts --exec \"ts-node\" src/index.ts
方法五:ts-node-dev只对依赖于入口文件(即由入口文件导入)的文件进行更改时才会重新加载; 修改静态资源的时候不会重启;比nodemon的可定制性要差一些;图中写法等同下面写法
npm i ts-node-dev -D
npx ts-node-dev --respawn src\index.ts
方法六:使用pm2监听文件改变,ts-node解析ts文件,来进行重启;未成功不再尝试
方法七:DIY; 别人的实现(gist.github.com/chroline/c8…
- 在runner.js中编写以下内容
// make sure you have @parcel/core and @parcel/config-default
// installed as devDependencies
import {Parcel} from '@parcel/core';
import {spawn, ChildProcessWithoutNullStreams} from 'child_process';
let bundler = new Parcel({
entries: 'src/index.ts',
defaultConfig: '@parcel/config-default',
defaultTargetOptions: { distDir: `${process.cwd()}/dist` },
});
async function main() {
let cp: ChildProcessWithoutNullStreams;
await bundler.watch(() => {
cp?.kill()
cp = spawn("node",[`${process.cwd()}/dist/index.js`])
cp.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
})
cp.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
});
}
main()
- 运行以下命令
ts-node runner.ts
PS:
- 原文:Configuring nodemon with TypeScript
- 个人仅作整理,如有更好方法请指教。