mirror of
https://github.com/wavetermdev/wails.git
synced 2026-08-05 13:53:43 -07:00
[windows] initial wails dev support
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
" ",Mac,Windows,Linux
|
||||
`wails init`,:material-check-bold:,:material-check-bold:,:material-check-bold:
|
||||
`wails build`,:material-check-bold:,:material-check-bold:,:material-check-bold:
|
||||
`wails dev`," "," "," "
|
||||
`wails dev`," ",:material-check-bold:," "
|
||||
`wails package`," ",:material-check-bold:,:material-check-bold:
|
||||
|
||||
|
@@ -53,6 +53,7 @@ func main() {
|
||||
//plugin.NewSubCommandFunction("add", "Add a plugin", commands.PluginAdd)
|
||||
tool := app.NewSubCommand("tool", "Various tools")
|
||||
tool.NewSubCommandFunction("checkport", "Checks if a port is open. Useful for testing if vite is running.", commands.ToolCheckPort)
|
||||
tool.NewSubCommandFunction("watcher", "Watches files and runs a command when they change", commands.Watcher)
|
||||
|
||||
app.NewSubCommandFunction("version", "Print the version", commands.Version)
|
||||
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
module github.com/wailsapp/wails/v3
|
||||
|
||||
go 1.21
|
||||
go 1.21.1
|
||||
|
||||
toolchain go1.21.4
|
||||
|
||||
require (
|
||||
github.com/atterpac/refresh v0.2.4
|
||||
github.com/bep/debounce v1.2.1
|
||||
github.com/ebitengine/purego v0.4.0-alpha.4
|
||||
github.com/go-git/go-git/v5 v5.3.0
|
||||
@@ -22,7 +25,7 @@ require (
|
||||
github.com/leaanthony/gosod v1.0.3
|
||||
github.com/leaanthony/u v1.1.0
|
||||
github.com/leaanthony/winicon v1.0.0
|
||||
github.com/lmittmann/tint v1.0.0
|
||||
github.com/lmittmann/tint v1.0.3
|
||||
github.com/markbates/goth v1.77.0
|
||||
github.com/matryer/is v1.4.0
|
||||
github.com/mattn/go-colorable v0.1.13
|
||||
@@ -35,13 +38,14 @@ require (
|
||||
github.com/wailsapp/go-webview2 v1.0.9
|
||||
github.com/wailsapp/mimetype v1.4.1
|
||||
golang.org/x/net v0.10.0
|
||||
golang.org/x/sys v0.13.0
|
||||
golang.org/x/sys v0.14.0
|
||||
modernc.org/sqlite v1.21.0
|
||||
)
|
||||
|
||||
require (
|
||||
atomicgo.dev/cursor v0.1.1 // indirect
|
||||
atomicgo.dev/keyboard v0.2.8 // indirect
|
||||
github.com/BurntSushi/toml v1.3.2 // indirect
|
||||
github.com/Masterminds/semver/v3 v3.2.1 // indirect
|
||||
github.com/Microsoft/go-winio v0.4.16 // indirect
|
||||
github.com/StackExchange/wmi v1.2.1 // indirect
|
||||
@@ -77,10 +81,15 @@ require (
|
||||
github.com/radovskyb/watcher v1.0.7 // indirect
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
|
||||
github.com/rivo/uniseg v0.4.4 // indirect
|
||||
github.com/rjeczalik/notify v0.9.3 // indirect
|
||||
github.com/sajari/fuzzy v1.0.0 // indirect
|
||||
github.com/sergi/go-diff v1.2.0 // indirect
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
|
||||
github.com/tklauser/go-sysconf v0.3.12 // indirect
|
||||
github.com/tklauser/numcpus v0.6.1 // indirect
|
||||
github.com/xanzy/ssh-agent v0.3.0 // indirect
|
||||
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.3 // indirect
|
||||
github.com/zeebo/xxh3 v1.0.2 // indirect
|
||||
golang.org/x/crypto v0.9.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df // indirect
|
||||
@@ -108,5 +117,3 @@ require (
|
||||
modernc.org/token v1.0.1 // indirect
|
||||
mvdan.cc/sh/v3 v3.7.0 // indirect
|
||||
)
|
||||
|
||||
replace github.com/ebitengine/purego v0.4.0-alpha.4 => github.com/tmclane/purego v0.0.0-20230818202843-0b72c8c9140f
|
||||
|
||||
@@ -39,6 +39,8 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX
|
||||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
|
||||
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||
github.com/MarvinJWendt/testza v0.1.0/go.mod h1:7AxNvlfeHP7Z/hDQ5JtE3OKYT3XFUeLCDE2DQninSqs=
|
||||
github.com/MarvinJWendt/testza v0.2.1/go.mod h1:God7bhG8n6uQxwdScay+gjm9/LnO4D3kkcZX4hv9Rp8=
|
||||
@@ -63,6 +65,16 @@ github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYU
|
||||
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
|
||||
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
|
||||
github.com/atomicgo/cursor v0.0.1/go.mod h1:cBON2QmmrysudxNBFthvMtN32r3jxVRIvzkUiF/RuIk=
|
||||
github.com/atterpac/refresh v0.1.0 h1:vFdy+4+Q4X7ENyemskVpGFCGAUt8zi0S05vX1O5tfq8=
|
||||
github.com/atterpac/refresh v0.1.0/go.mod h1:KiBQUk5h76Z3Yvw/k3Ys2JGDrKmKmflwS9XB6B5N9qY=
|
||||
github.com/atterpac/refresh v0.2.1 h1:xWI4PsP88wFJueMq8DscZg+IA3pxMoaS9g8/Gl+p85I=
|
||||
github.com/atterpac/refresh v0.2.1/go.mod h1:KiBQUk5h76Z3Yvw/k3Ys2JGDrKmKmflwS9XB6B5N9qY=
|
||||
github.com/atterpac/refresh v0.2.2 h1:PD+zKYz4LBViPzLUqLPm9p6aiRr6vNd1m1UTHsx8ln8=
|
||||
github.com/atterpac/refresh v0.2.2/go.mod h1:KiBQUk5h76Z3Yvw/k3Ys2JGDrKmKmflwS9XB6B5N9qY=
|
||||
github.com/atterpac/refresh v0.2.3 h1:bV6VGbeUTUFiTvYGKadPZIfIWKhXgUbadHSp8r86JIo=
|
||||
github.com/atterpac/refresh v0.2.3/go.mod h1:KiBQUk5h76Z3Yvw/k3Ys2JGDrKmKmflwS9XB6B5N9qY=
|
||||
github.com/atterpac/refresh v0.2.4 h1:rTD9qchbLa0qPIVr+qpyqkePe6+1Cs14ETXDguEvttI=
|
||||
github.com/atterpac/refresh v0.2.4/go.mod h1:KiBQUk5h76Z3Yvw/k3Ys2JGDrKmKmflwS9XB6B5N9qY=
|
||||
github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY=
|
||||
github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
@@ -83,6 +95,7 @@ github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d/go.mod h1:tmAIfUFEirG/Y8jhZ9M+h36obRZAk/1fcSpXwAVlfqE=
|
||||
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
|
||||
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
github.com/ebitengine/purego v0.4.0-alpha.4/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ=
|
||||
github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=
|
||||
github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
|
||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
@@ -261,8 +274,8 @@ github.com/lestrrat-go/jwx v1.2.21/go.mod h1:9cfxnOH7G1gN75CaJP2hKGcxFEx5sPh1abR
|
||||
github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I=
|
||||
github.com/lithammer/fuzzysearch v1.1.5 h1:Ag7aKU08wp0R9QCfF4GoGST9HbmAIeLP7xwMrOBEp1c=
|
||||
github.com/lithammer/fuzzysearch v1.1.5/go.mod h1:1R1LRNk7yKid1BaQkmuLQaHruxcC4HmAH30Dh61Ih1Q=
|
||||
github.com/lmittmann/tint v1.0.0 h1:fzEj70K1L58uyoePQxKe+ezDZJ5pybiWGdA0JeFvvyw=
|
||||
github.com/lmittmann/tint v1.0.0/go.mod h1:HIS3gSy7qNwGCj+5oRjAutErFBl4BzdQP6cJZ0NfMwE=
|
||||
github.com/lmittmann/tint v1.0.3 h1:W5PHeA2D8bBJVvabNfQD/XW9HPLZK1XoPZH0cq8NouQ=
|
||||
github.com/lmittmann/tint v1.0.3/go.mod h1:HIS3gSy7qNwGCj+5oRjAutErFBl4BzdQP6cJZ0NfMwE=
|
||||
github.com/markbates/going v1.0.0/go.mod h1:I6mnB4BPnEeqo85ynXIx1ZFLLbtiLHNXVgWeFO9OGOA=
|
||||
github.com/markbates/goth v1.77.0 h1:s3scqnWv/Zq/a5M766V0FKsLfOdFNdh/HEkuWCKbvT8=
|
||||
github.com/markbates/goth v1.77.0/go.mod h1:X6xdNgpapSENS0O35iTBBcMHoJDQDfI9bJl+APCkYMc=
|
||||
@@ -318,6 +331,8 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qq
|
||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
|
||||
github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||
github.com/rjeczalik/notify v0.9.3 h1:6rJAzHTGKXGj76sbRgDiDcYj/HniypXmSJo1SWakZeY=
|
||||
github.com/rjeczalik/notify v0.9.3/go.mod h1:gF3zSOrafR9DQEWSE8TjfI9NkooDxbyT4UgRGKZA0lc=
|
||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||
github.com/rogpeppe/go-internal v1.10.1-0.20230524175051-ec119421bb97 h1:3RPlVWzZ/PDqmVuf/FKHARG5EMid/tl7cv54Sw/QRVY=
|
||||
github.com/rogpeppe/go-internal v1.10.1-0.20230524175051-ec119421bb97/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
|
||||
@@ -328,6 +343,8 @@ github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXn
|
||||
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
|
||||
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
|
||||
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI=
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
|
||||
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
|
||||
github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
@@ -348,6 +365,10 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU
|
||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/tc-hib/winres v0.1.6 h1:qgsYHze+BxQPEYilxIz/KCQGaClvI2+yLBAZs+3+0B8=
|
||||
github.com/tc-hib/winres v0.1.6/go.mod h1:pe6dOR40VOrGz8PkzreVKNvEKnlE8t4yR8A8naL+t7A=
|
||||
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
|
||||
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
|
||||
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
|
||||
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
|
||||
github.com/tmclane/purego v0.0.0-20230818202843-0b72c8c9140f h1:/HXk9aFXP97CJRzOIphm4pzySmJLqIMhKu1kD5usz1E=
|
||||
github.com/tmclane/purego v0.0.0-20230818202843-0b72c8c9140f/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ=
|
||||
github.com/wailsapp/go-webview2 v1.0.9 h1:lrU+q0cf1wgLdR69rN+ZnRtMJNaJRrcQ4ELxoO7/xjs=
|
||||
@@ -363,6 +384,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
|
||||
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
|
||||
github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ=
|
||||
github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
|
||||
github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=
|
||||
@@ -477,6 +500,7 @@ golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=
|
||||
golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
@@ -519,8 +543,10 @@ golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
|
||||
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
|
||||
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"net/http/httputil"
|
||||
"net/url"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -62,6 +63,9 @@ type AssetServer struct {
|
||||
// External dev server proxy
|
||||
wsHandler *httputil.ReverseProxy
|
||||
|
||||
// External dev server URL
|
||||
devServerURL string
|
||||
|
||||
assetServerWebView
|
||||
}
|
||||
|
||||
@@ -91,13 +95,16 @@ func NewAssetServer(options *Options, servingFromDisk bool, logger *slog.Logger,
|
||||
}
|
||||
|
||||
// Check if proxy required
|
||||
externalURL, err := options.getExternalURL()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if externalURL != nil {
|
||||
result.wsHandler = httputil.NewSingleHostReverseProxy(externalURL)
|
||||
err := result.checkExternalURL()
|
||||
result.devServerURL = GetDevServerURL()
|
||||
if result.devServerURL != "" {
|
||||
logger.Info("Using External DevServer", "url", result.devServerURL)
|
||||
// Parse devServerURL into url.URL
|
||||
devserverURL, err := url.Parse(result.devServerURL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.wsHandler = httputil.NewSingleHostReverseProxy(devserverURL)
|
||||
err = result.checkDevServerURL()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -105,7 +112,7 @@ func NewAssetServer(options *Options, servingFromDisk bool, logger *slog.Logger,
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (d *AssetServer) checkExternalURL() error {
|
||||
func (d *AssetServer) checkDevServerURL() error {
|
||||
req, err := http.NewRequest("OPTIONS", "/", nil)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -113,19 +120,23 @@ func (d *AssetServer) checkExternalURL() error {
|
||||
w := httptest.NewRecorder()
|
||||
d.wsHandler.ServeHTTP(w, req)
|
||||
if w.Code != http.StatusNoContent {
|
||||
return fmt.Errorf("unable to connect to external server: %s. Please check it's running.", d.options.ExternalURL)
|
||||
return fmt.Errorf("unable to connect to external server: %s. Please check it's running", d.devServerURL)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *AssetServer) LogDetails() {
|
||||
if d.debug {
|
||||
d.logger.Info("AssetServer Info:",
|
||||
var info = []any{
|
||||
"assetsFS", d.options.Assets != nil,
|
||||
"middleware", d.options.Middleware != nil,
|
||||
"handler", d.options.Handler != nil,
|
||||
"externalURL", d.options.ExternalURL,
|
||||
)
|
||||
"devServerURL", d.devServerURL,
|
||||
}
|
||||
if d.devServerURL != "" {
|
||||
info = append(info, "devServerURL", d.devServerURL)
|
||||
}
|
||||
d.logger.Info("AssetServer Info:", info...)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,23 +2,10 @@
|
||||
|
||||
package assetserver
|
||||
|
||||
/*
|
||||
The assetserver for the dev mode.
|
||||
Depending on the UserAgent it injects a websocket based IPC script into `index.html` or the default desktop IPC. The
|
||||
default desktop IPC is injected when the webview accesses the devserver.
|
||||
*/
|
||||
//func NewDevAssetServer(handler http.Handler, servingFromDisk bool, logger *slog.Logger, runtime RuntimeAssets, runtimeHandler RuntimeHandler) (*AssetServer, error) {
|
||||
// result, err := NewAssetServerWithHandler(handler, servingFromDisk, logger, runtime, true, runtimeHandler)
|
||||
// if err != nil {
|
||||
// return nil, err
|
||||
// }
|
||||
//
|
||||
// result.ipcJS = func(req *http.Request) []byte {
|
||||
// if strings.Contains(req.UserAgent(), WailsUserAgentValue) {
|
||||
// return runtime.DesktopIPC()
|
||||
// }
|
||||
// return runtime.WebsocketIPC()
|
||||
// }
|
||||
//
|
||||
// return result, nil
|
||||
//}
|
||||
import (
|
||||
"os"
|
||||
)
|
||||
|
||||
func GetDevServerURL() string {
|
||||
return os.Getenv("WAILS_DEVSERVER_URL")
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
//go:build production
|
||||
|
||||
package assetserver
|
||||
|
||||
func GetDevServerURL() string {
|
||||
return ""
|
||||
}
|
||||
@@ -4,7 +4,6 @@ import (
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
// Options defines the configuration of the AssetServer.
|
||||
@@ -34,10 +33,6 @@ type Options struct {
|
||||
// Multiple Middlewares can be chained together with:
|
||||
// ChainMiddleware(middleware ...Middleware) Middleware
|
||||
Middleware Middleware
|
||||
|
||||
// ExternalURL is the URL that the assets are served from
|
||||
// This is useful when using a development server like `vite` or `snowpack` which serves the assets on a different port.
|
||||
ExternalURL string
|
||||
}
|
||||
|
||||
// Validate the options
|
||||
@@ -48,10 +43,3 @@ func (o Options) Validate() error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (o Options) getExternalURL() (*url.URL, error) {
|
||||
if o.ExternalURL == "" {
|
||||
return nil, nil
|
||||
}
|
||||
return url.Parse(o.ExternalURL)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package commands
|
||||
|
||||
import (
|
||||
"github.com/atterpac/refresh/engine"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type WatcherOptions struct {
|
||||
Path string `description:"The path to watch" default:"."`
|
||||
PreExec string `description:"The command to run before the main command"`
|
||||
Exec string `description:"The command to run when a change is detected"`
|
||||
PostExec string `description:"The command to run after the main command"`
|
||||
IgnoreFiles string `description:"The files to ignore (comma separated)"`
|
||||
IgnoreDirs string `description:"The directories to ignore (comma separated)"`
|
||||
IgnoreExtensions string `description:"The extensions to ignore (comma separated)"`
|
||||
Debounce int `description:"The debounce time in milliseconds" default:"1000"`
|
||||
PreWait bool `description:"Wait for the pre-exec command to finish before running the main command"`
|
||||
}
|
||||
|
||||
func Watcher(options *WatcherOptions) error {
|
||||
|
||||
ignore := engine.Ignore{
|
||||
File: strings.Split(options.IgnoreFiles, ","),
|
||||
Dir: strings.Split(options.IgnoreDirs, ","),
|
||||
Extension: strings.Split(options.IgnoreExtensions, ","),
|
||||
}
|
||||
config := engine.Config{
|
||||
RootPath: options.Path,
|
||||
PreExec: options.PreExec,
|
||||
ExecCommand: options.Exec,
|
||||
PostExec: options.PostExec,
|
||||
Ignore: ignore,
|
||||
LogLevel: "info",
|
||||
Debounce: options.Debounce,
|
||||
PreWait: options.PreWait,
|
||||
}
|
||||
|
||||
watch := engine.NewEngineFromConfig(config)
|
||||
|
||||
watch.Start()
|
||||
<-make(chan struct{})
|
||||
return nil
|
||||
}
|
||||
@@ -25,6 +25,7 @@ tasks:
|
||||
build:windows:
|
||||
summary: Builds the application for Windows
|
||||
deps:
|
||||
- task: go:mod:tidy
|
||||
- task: build:frontend
|
||||
- task: generate:icons
|
||||
- task: generate:syso
|
||||
@@ -75,6 +76,7 @@ tasks:
|
||||
build:darwin:
|
||||
summary: Creates a production build of the application
|
||||
deps:
|
||||
- task: go:mod:tidy
|
||||
- task: build:frontend
|
||||
- task: generate:icons
|
||||
cmds:
|
||||
@@ -85,9 +87,9 @@ tasks:
|
||||
GOOS: darwin
|
||||
CGO_ENABLED: 1
|
||||
GOARCH: {{ "'{{.ARCH | default ARCH}}'" }}
|
||||
CGO_CFLAGS: "-mmacosx-version-min=10.13"
|
||||
CGO_LDFLAGS: "-mmacosx-version-min=10.13"
|
||||
MACOSX_DEPLOYMENT_TARGET: "10.13"
|
||||
CGO_CFLAGS: "-mmacosx-version-min=10.15"
|
||||
CGO_LDFLAGS: "-mmacosx-version-min=10.15"
|
||||
MACOSX_DEPLOYMENT_TARGET: "10.15"
|
||||
PRODUCTION: {{ "'{{.PRODUCTION | default \"false\"}}'" }}
|
||||
|
||||
build:darwin:prod:arm64:
|
||||
@@ -126,6 +128,7 @@ tasks:
|
||||
build:linux:
|
||||
summary: Builds the application for Linux
|
||||
deps:
|
||||
- task: go:mod:tidy
|
||||
- task: build:frontend
|
||||
- task: generate:icons
|
||||
vars:
|
||||
@@ -374,4 +377,55 @@ tasks:
|
||||
deps:
|
||||
- install:frontend:deps
|
||||
cmds:
|
||||
- npm run build
|
||||
- npm run build -q
|
||||
|
||||
go:mod:tidy:
|
||||
summary: Runs `go mod tidy`
|
||||
internal: true
|
||||
generates:
|
||||
- go.sum
|
||||
sources:
|
||||
- go.mod
|
||||
cmds:
|
||||
- go mod tidy
|
||||
|
||||
# ----------------------- dev ----------------------- #
|
||||
|
||||
|
||||
run:
|
||||
summary: Runs the application
|
||||
cmds:
|
||||
- task: run:{{ "{{OS}}" }}
|
||||
|
||||
run:windows:
|
||||
cmds:
|
||||
- {{ "'{{.BIN_DIR}}\\\\{{.APP_NAME}}.exe'" }}
|
||||
|
||||
dev:frontend:
|
||||
summary: Runs the frontend in development mode
|
||||
dir: frontend
|
||||
cmds:
|
||||
- npm run dev
|
||||
|
||||
dev:
|
||||
summary: Runs the application in development mode
|
||||
cmds:
|
||||
- wails3 tool watcher -path {{ "{{.PATH}}" }} -preexec {{ "\"{{.PREEXEC}}\""}} {{ "{{.PREWAIT}}" }} -postexec {{ "\"{{.POSTEXEC}}\"" }} -ignorefiles {{ "{{.IGNOREFILES}}" }} -ignoredirs {{ "{{.IGNOREDIRS}}" }} -ignoreextensions {{ "{{.IGNOREEXTENSIONS}}" }} -exec {{ "\"{{.EXEC}}\"" }} -debounce {{ "{{.DEBOUNCE}}" }}
|
||||
vars:
|
||||
PATH: '.'
|
||||
PREEXEC: 'wails3 task build'
|
||||
PREWAIT: '-prewait true'
|
||||
EXEC: 'wails3 task run'
|
||||
POSTEXEC: ''
|
||||
IGNOREFILES: 'Taskfile.yml'
|
||||
IGNOREDIRS: '.git,frontend'
|
||||
IGNOREEXTENSIONS: '.exe,.syso'
|
||||
DEBOUNCE: 1000
|
||||
env:
|
||||
# This is the default vite dev server port
|
||||
WAILS_DEVSERVER_URL: 'http://localhost:5173'
|
||||
|
||||
dev:reload:
|
||||
summary: Reloads the application
|
||||
cmds:
|
||||
- task: run
|
||||
@@ -69,10 +69,9 @@ func New(appOptions Options) *App {
|
||||
result.Events = NewWailsEventProcessor(result.dispatchEventToWindows)
|
||||
|
||||
opts := &assetserver.Options{
|
||||
Assets: appOptions.Assets.FS,
|
||||
Handler: appOptions.Assets.Handler,
|
||||
Middleware: assetserver.Middleware(appOptions.Assets.Middleware),
|
||||
ExternalURL: appOptions.Assets.ExternalURL,
|
||||
Assets: appOptions.Assets.FS,
|
||||
Handler: appOptions.Assets.Handler,
|
||||
Middleware: assetserver.Middleware(appOptions.Assets.Middleware),
|
||||
}
|
||||
|
||||
srv, err := assetserver.NewAssetServer(opts, false, result.Logger, wailsruntime.RuntimeAssetsBundle, result.isDebugMode, NewMessageProcessor(result.Logger))
|
||||
|
||||
@@ -80,10 +80,6 @@ type AssetOptions struct {
|
||||
// Multiple Middlewares can be chained together with:
|
||||
// ChainMiddleware(middleware ...Middleware) Middleware
|
||||
Middleware Middleware
|
||||
|
||||
// External URL can be set to a development server URL so that all requests are forwarded to it. This is useful
|
||||
// when using a development server like `vite` or `snowpack` which serves the assets on a different port.
|
||||
ExternalURL string
|
||||
}
|
||||
|
||||
// Middleware defines HTTP middleware that can be applied to the AssetServer.
|
||||
|
||||
@@ -1453,11 +1453,12 @@ func (w *windowsWebviewWindow) setupChromium() {
|
||||
chromium.NavigateToString(w.parent.options.HTML)
|
||||
} else {
|
||||
var startURL = "http://wails.localhost"
|
||||
if globalApplication.options.Assets.ExternalURL != "" {
|
||||
devServerURL := assetserver.GetDevServerURL()
|
||||
if devServerURL != "" {
|
||||
// Parse the port
|
||||
parsedURL, err := url.Parse(globalApplication.options.Assets.ExternalURL)
|
||||
parsedURL, err := url.Parse(devServerURL)
|
||||
if err != nil {
|
||||
globalApplication.fatal("Error parsing ExternalURL: " + err.Error())
|
||||
globalApplication.fatal("Error parsing environment variable 'WAILS_DEVSERVER_URL`: " + err.Error())
|
||||
}
|
||||
port := parsedURL.Port()
|
||||
if port != "" {
|
||||
|
||||
Reference in New Issue
Block a user