Skip to content

Commit

Permalink
chore: update
Browse files Browse the repository at this point in the history
  • Loading branch information
czy88840616 committed Feb 13, 2024
1 parent 58929d9 commit 1521a68
Showing 1 changed file with 16 additions and 20 deletions.
36 changes: 16 additions & 20 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ function run() {

let runChild;
const restart = debounce(() => {
if (fileChangeList.length === 0) return;
if (hasPaths) {
// 这里使用全量替换,tsc 增量编译会把老文件修改回去
replaceTscAliasPaths({
Expand Down Expand Up @@ -122,6 +123,16 @@ function run() {
);
}

function cleanOutDirAndRestart() {
// 碰到任意的删除情况,直接删除整个构建目录
deleteFolderRecursive(path.join(cwd, outDir));
forkTsc(tscArgs,{
cwd,
});
runAfterTsc();
restart();
}

function onFileChange(p) {
// 这里使用了标识来判断是否编译成功,理论上会有时序问题,但是本质上事件还是同步执行的,测试下来感觉没有问题
if (!isCompileSuccess) return;
Expand All @@ -143,6 +154,7 @@ function run() {
runChild.onServerReady(
async (serverReportOption, isFirstCallback, during) => {
if (isFirstCallback) {
// 第一次启动把端口等信息打印出来
output(
`${colors.green('Node.js server')} ${colors.dim('started in')} ${during} ms\n`
);
Expand All @@ -161,36 +173,20 @@ function run() {

/**
* 第一次成功之后,开始监听文件变化
* 1、监听 sourceDir 中的 ts 文件或者目录,如果被删除,则同步删除 dist 中的文件
* 2、处理文件更新,比如 tsc-alias,或者 HMR 的情况
* 1、监听 sourceDir 中的 ts 文件或者目录,如果被删除,则做完整的清理
* 2、处理单个文件更新,触发单个文件 HMR 逻辑
*/
//
fileDeleteWatcher = chokidar.watch('**/**.ts', {
cwd: path.join(cwd, sourceDir),
});

fileDeleteWatcher
.on('unlink', p => {
output(`File ${p} has been removed`, true);
const filePath = path.join(cwd, outDir, p.replace(/\.ts$/, '.js'));
if (fs.existsSync(filePath)) {
fs.unlinkSync(filePath);
onFileChange(filePath);
}
});
.on('unlink', cleanOutDirAndRestart);

fileDirDeleteWatcher = chokidar.watch('**/**', {
cwd: path.join(cwd, sourceDir),
})
.on('unlinkDir', p => {
// 碰到任意的删除情况,直接删除整个构建目录
deleteFolderRecursive(path.join(cwd, outDir));
forkTsc(tscArgs,{
cwd,
});
runAfterTsc();
restart();
});
.on('unlinkDir', cleanOutDirAndRestart);

fileChangeWatcher = chokidar.watch('**/**.js', {
cwd: path.join(cwd, outDir),
Expand Down

0 comments on commit 1521a68

Please sign in to comment.