本人计划开发一个个人网站,后端语言选择go,主要是为了上手练习,之前已练习过node的nestjs框架
但go没有重载 在研究了一半之后群友告知air可以实现, 也罢事都做了那就有有终吧。也算记录一下过程了
- 1.首先要了解如何实现重载
重载首先需要监听文件 所以node的fs模块中我寻找到两个方法 分别是watch()与watchFile() 二者区别为 后者监听但个文件 但前者可以监听整个文件的变动 所以选择watch() 例子
const fs = require("fs");
const path = require("path");
//获取当前文件夹路径
let filePath = path.join(__dirname, "./");
fs.watch(filePath, { recursive: true }, (eventType, fileName) => {
if (eventType === 'change') {
console.log('文件修改')
}
})
- 其中recursive为是否监听当前子目录默认为false
- eventType为文件变动类型 有change 与 rename
- fileName为变动文件目录
- 2.实现重载的方法
实现重载就让我想到cmd命令输入go run .于是想起之前突发兴致写的米哈游启动器(实现了功能ui页面没法看doge)可使用node 中child_process模块中的exce去输入命令
代码
//exec 的cmd进程对象
let processID = null
//执行进程
function exection(cmd){
return exec(cmd, (err, stdout, stderr) => {
if (err) {
// start()
console.log(stderr);
return
}
console.log(stdout);
})
}
//启动
function start() {
processID = exection('go run .')
processID.stderr.on('data', chunk => {
console.log(chunk);
})
processID.stdout.on('data', chunk => {
console.log(chunk);
})
}
- exec方法第一个参数为执行的命令 列如npm dev / yarn dev /npnm dev
- 后面两个参数为输出控制台中的内容 stdout为输出正确执行后的内容 stderr为错误执行
- 所以我们可以在监听修改后调用该方法进行重新启动
const fs = require("fs");
const path = require("path");
const { exec } = require('child_process')
//获取当前文件夹路径
let filePath = path.join(__dirname, "./");
//防抖参数
let time = false
//exec 的cmd进程对象
let processID = null
//执行进程
function exection(cmd){
return exec(cmd, (err, stdout, stderr) => {
if (err) {
// start()
console.log(stderr);
return
}
console.log(stdout);
})
}
//启动
function start() {
processID = exection('go run .')
processID.stderr.on('data', chunk => {
console.log(chunk);
})
processID.stdout.on('data', chunk => {
console.log(chunk);
})
}
function debound(e, f) {
if (time) return
time = true
setTimeout(() => {
time = false
}, 100)
start()
}
//监听文件
fs.watch(filePath, { recursive: true }, (eventType, fileName) => {
if (eventType === 'change') {
debound(eventType, fileName)
}
})
- 当中加了个防抖函数主要是 ctrl s保存后会执行三次
当我以为快成功的时候,这时候里面有个大坑折磨了我好久,我还走了偏路,至于什么大坑下节再说~