如何热重载一个ts项目?

740 阅读1分钟

方法一: 启动两个终端,先用一个终端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

图片.png

图片.png

图片.png

方法三:通过配置文件指定ts文件的处理方式;可以针对不同的文件类型运行指定的可执行文件或命令

npx nodemon src\index.ts

图片.png

方法四: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

图片.png

方法六:使用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

图片.png 图片.png

PS: