mirror of
https://github.com/beego/bee.git
synced 2024-11-22 05:00:54 +00:00
improve live reload
This commit is contained in:
parent
268a9d8346
commit
b867a57d65
12
run.go
12
run.go
@ -137,6 +137,11 @@ func runApp(cmd *Command, args []string) int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Start the Reload server (if enabled)
|
||||||
|
if conf.EnableReload {
|
||||||
|
startReloadServer()
|
||||||
|
}
|
||||||
if gendoc == "true" {
|
if gendoc == "true" {
|
||||||
NewWatcher(paths, files, true)
|
NewWatcher(paths, files, true)
|
||||||
AutoBuild(files, true)
|
AutoBuild(files, true)
|
||||||
@ -145,11 +150,6 @@ func runApp(cmd *Command, args []string) int {
|
|||||||
AutoBuild(files, false)
|
AutoBuild(files, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start the Reload server (if enabled)
|
|
||||||
if conf.EnableReload {
|
|
||||||
startReloadServer()
|
|
||||||
}
|
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-exit:
|
case <-exit:
|
||||||
@ -190,7 +190,7 @@ func readAppDirectories(directory string, paths *[]string) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if path.Ext(fileInfo.Name()) == ".go" {
|
if path.Ext(fileInfo.Name()) == ".go" || (ifStaticFile(fileInfo.Name()) && conf.EnableReload) {
|
||||||
*paths = append(*paths, directory)
|
*paths = append(*paths, directory)
|
||||||
useDirectory = true
|
useDirectory = true
|
||||||
}
|
}
|
||||||
|
43
watch.go
43
watch.go
@ -28,10 +28,18 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
cmd *exec.Cmd
|
cmd *exec.Cmd
|
||||||
state sync.Mutex
|
state sync.Mutex
|
||||||
eventTime = make(map[string]int64)
|
eventTime = make(map[string]int64)
|
||||||
scheduleTime time.Time
|
scheduleTime time.Time
|
||||||
|
watchExts = []string{".go"}
|
||||||
|
watchExtsStatic = []string{".html", ".tpl", ".js", ".css"}
|
||||||
|
ignoredFilesRegExps = []string{
|
||||||
|
`.#(\w+).go`,
|
||||||
|
`.(\w+).go.swp`,
|
||||||
|
`(\w+).go~`,
|
||||||
|
`(\w+).tmp`,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewWatcher starts an fsnotify Watcher on the specified paths
|
// NewWatcher starts an fsnotify Watcher on the specified paths
|
||||||
@ -45,8 +53,12 @@ func NewWatcher(paths []string, files []string, isgenerate bool) {
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case e := <-watcher.Events:
|
case e := <-watcher.Events:
|
||||||
isbuild := true
|
isBuild := true
|
||||||
|
|
||||||
|
if ifStaticFile(e.Name) || conf.EnableReload {
|
||||||
|
sendReload(e.String())
|
||||||
|
continue
|
||||||
|
}
|
||||||
// Skip ignored files
|
// Skip ignored files
|
||||||
if shouldIgnoreFile(e.Name) {
|
if shouldIgnoreFile(e.Name) {
|
||||||
continue
|
continue
|
||||||
@ -58,12 +70,12 @@ func NewWatcher(paths []string, files []string, isgenerate bool) {
|
|||||||
mt := getFileModTime(e.Name)
|
mt := getFileModTime(e.Name)
|
||||||
if t := eventTime[e.Name]; mt == t {
|
if t := eventTime[e.Name]; mt == t {
|
||||||
logger.Infof(bold("Skipping: ")+"%s", e.String())
|
logger.Infof(bold("Skipping: ")+"%s", e.String())
|
||||||
isbuild = false
|
isBuild = false
|
||||||
}
|
}
|
||||||
|
|
||||||
eventTime[e.Name] = mt
|
eventTime[e.Name] = mt
|
||||||
|
|
||||||
if isbuild {
|
if isBuild {
|
||||||
logger.Infof("Event fired: %s", e)
|
logger.Infof("Event fired: %s", e)
|
||||||
go func() {
|
go func() {
|
||||||
// Wait 1s before autobuild until there is no file change.
|
// Wait 1s before autobuild until there is no file change.
|
||||||
@ -239,6 +251,15 @@ func Start(appname string) {
|
|||||||
started <- true
|
started <- true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ifStaticFile(filename string) bool {
|
||||||
|
for _, s := range watchExtsStatic {
|
||||||
|
if strings.HasSuffix(filename, s) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// shouldIgnoreFile ignores filenames generated by Emacs, Vim or SublimeText.
|
// shouldIgnoreFile ignores filenames generated by Emacs, Vim or SublimeText.
|
||||||
// It returns true if the file should be ignored, false otherwise.
|
// It returns true if the file should be ignored, false otherwise.
|
||||||
func shouldIgnoreFile(filename string) bool {
|
func shouldIgnoreFile(filename string) bool {
|
||||||
@ -255,14 +276,6 @@ func shouldIgnoreFile(filename string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
var watchExts = []string{".go"}
|
|
||||||
var ignoredFilesRegExps = []string{
|
|
||||||
`.#(\w+).go`,
|
|
||||||
`.(\w+).go.swp`,
|
|
||||||
`(\w+).go~`,
|
|
||||||
`(\w+).tmp`,
|
|
||||||
}
|
|
||||||
|
|
||||||
// shouldWatchFileWithExtension returns true if the name of the file
|
// shouldWatchFileWithExtension returns true if the name of the file
|
||||||
// hash a suffix that should be watched.
|
// hash a suffix that should be watched.
|
||||||
func shouldWatchFileWithExtension(name string) bool {
|
func shouldWatchFileWithExtension(name string) bool {
|
||||||
|
Loading…
Reference in New Issue
Block a user