MCPcopy
hub / github.com/tailscale/tailscale / startDevServer

Function startDevServer

client/web/assets.go:76–103  ·  view source on GitHub ↗

startDevServer starts the JS dev server that does on-demand rebuilding and serving of web client JS and CSS resources.

()

Source from the content-addressed store, hash-verified

74// startDevServer starts the JS dev server that does on-demand rebuilding
75// and serving of web client JS and CSS resources.
76func startDevServer() (cleanup func()) {
77 root := gitRootDir()
78 webClientPath := filepath.Join(root, "client", "web")
79
80 yarn := filepath.Join(root, "tool", "yarn")
81 node := filepath.Join(root, "tool", "node")
82 vite := filepath.Join(webClientPath, "node_modules", ".bin", "vite")
83
84 log.Printf("installing JavaScript deps using %s...", yarn)
85 out, err := exec.Command(yarn, "--non-interactive", "-s", "--cwd", webClientPath, "install").CombinedOutput()
86 if err != nil {
87 log.Fatalf("error running tailscale web's yarn install: %v, %s", err, out)
88 }
89 log.Printf("starting JavaScript dev server...")
90 cmd := exec.Command(node, vite)
91 cmd.Dir = webClientPath
92 cmd.Stdout = os.Stdout
93 cmd.Stderr = os.Stderr
94 if err := cmd.Start(); err != nil {
95 log.Fatalf("Starting JS dev server: %v", err)
96 }
97 log.Printf("JavaScript dev server running as pid %d", cmd.Process.Pid)
98 return func() {
99 cmd.Process.Signal(os.Interrupt)
100 err := cmd.Wait()
101 log.Printf("JavaScript dev server exited: %v", err)
102 }
103}
104
105// devServerProxy returns a reverse proxy to the vite dev server.
106func devServerProxy() *httputil.ReverseProxy {

Callers 1

assetsHandlerFunction · 0.85

Calls 7

PrintfMethod · 0.80
CombinedOutputMethod · 0.80
gitRootDirFunction · 0.70
FatalfMethod · 0.65
StartMethod · 0.65
WaitMethod · 0.65
SignalMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…