mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-09 00:20:26 +08:00
编译时生成components.js
This commit is contained in:
@@ -58,6 +58,10 @@ function build() {
|
|||||||
rm -f $(basename $EDGE_API_ZIP_FILE)
|
rm -f $(basename $EDGE_API_ZIP_FILE)
|
||||||
cd -
|
cd -
|
||||||
|
|
||||||
|
# generate files
|
||||||
|
echo "generating files ..."
|
||||||
|
go run -tags $TAG $ROOT/../cmd/edge-admin/main.go generate
|
||||||
|
|
||||||
# build
|
# build
|
||||||
echo "building "${NAME}" ..."
|
echo "building "${NAME}" ..."
|
||||||
env GOOS=$OS GOARCH=$ARCH go build -tags $TAG -ldflags="-s -w" -o $DIST/bin/${NAME} $ROOT/../cmd/edge-admin/main.go
|
env GOOS=$OS GOARCH=$ARCH go build -tags $TAG -ldflags="-s -w" -o $DIST/bin/${NAME} $ROOT/../cmd/edge-admin/main.go
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeAdmin/internal/apps"
|
"github.com/TeaOSLab/EdgeAdmin/internal/apps"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/configs"
|
"github.com/TeaOSLab/EdgeAdmin/internal/configs"
|
||||||
teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
|
teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
|
||||||
|
"github.com/TeaOSLab/EdgeAdmin/internal/gen"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/nodes"
|
"github.com/TeaOSLab/EdgeAdmin/internal/nodes"
|
||||||
_ "github.com/TeaOSLab/EdgeAdmin/internal/web"
|
_ "github.com/TeaOSLab/EdgeAdmin/internal/web"
|
||||||
_ "github.com/iwind/TeaGo/bootstrap"
|
_ "github.com/iwind/TeaGo/bootstrap"
|
||||||
@@ -70,6 +71,13 @@ func main() {
|
|||||||
}
|
}
|
||||||
fmt.Println("change demo mode successfully")
|
fmt.Println("change demo mode successfully")
|
||||||
})
|
})
|
||||||
|
app.On("generate", func() {
|
||||||
|
err := gen.Generate()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("generate failed: " + err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
})
|
||||||
app.Run(func() {
|
app.Run(func() {
|
||||||
adminNode := nodes.NewAdminNode()
|
adminNode := nodes.NewAdminNode()
|
||||||
adminNode.Run()
|
adminNode.Run()
|
||||||
|
|||||||
129
internal/gen/generate.go
Normal file
129
internal/gen/generate.go
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
||||||
|
|
||||||
|
package gen
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/conds/condutils"
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs"
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
||||||
|
"github.com/iwind/TeaGo/Tea"
|
||||||
|
"github.com/iwind/TeaGo/files"
|
||||||
|
"github.com/iwind/TeaGo/logs"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Generate() error {
|
||||||
|
err := generateComponentsJSFile()
|
||||||
|
if err != nil {
|
||||||
|
return errors.New("generate 'components.js' failed: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成Javascript文件
|
||||||
|
func generateComponentsJSFile() error {
|
||||||
|
var buffer = bytes.NewBuffer([]byte{})
|
||||||
|
|
||||||
|
var webRoot string
|
||||||
|
if Tea.IsTesting() {
|
||||||
|
webRoot = Tea.Root + "/../web/public/js/components/"
|
||||||
|
} else {
|
||||||
|
webRoot = Tea.Root + "/web/public/js/components/"
|
||||||
|
}
|
||||||
|
f := files.NewFile(webRoot)
|
||||||
|
|
||||||
|
f.Range(func(file *files.File) {
|
||||||
|
if !file.IsFile() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if file.Ext() != ".js" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
data, err := file.ReadAll()
|
||||||
|
if err != nil {
|
||||||
|
logs.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
buffer.Write(data)
|
||||||
|
buffer.Write([]byte{'\n', '\n'})
|
||||||
|
})
|
||||||
|
|
||||||
|
// 条件组件
|
||||||
|
typesJSON, err := json.Marshal(condutils.ReadAllAvailableCondTypes())
|
||||||
|
if err != nil {
|
||||||
|
logs.Println("ComponentsAction marshal request cond types failed: " + err.Error())
|
||||||
|
} else {
|
||||||
|
buffer.WriteString("window.REQUEST_COND_COMPONENTS = ")
|
||||||
|
buffer.Write(typesJSON)
|
||||||
|
buffer.Write([]byte{'\n', '\n'})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 条件操作符
|
||||||
|
requestOperatorsJSON, err := json.Marshal(shared.AllRequestOperators())
|
||||||
|
if err != nil {
|
||||||
|
logs.Println("ComponentsAction marshal request operators failed: " + err.Error())
|
||||||
|
} else {
|
||||||
|
buffer.WriteString("window.REQUEST_COND_OPERATORS = ")
|
||||||
|
buffer.Write(requestOperatorsJSON)
|
||||||
|
buffer.Write([]byte{'\n', '\n'})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 请求变量
|
||||||
|
requestVariablesJSON, err := json.Marshal(shared.DefaultRequestVariables())
|
||||||
|
if err != nil {
|
||||||
|
logs.Println("ComponentsAction marshal request variables failed: " + err.Error())
|
||||||
|
} else {
|
||||||
|
buffer.WriteString("window.REQUEST_VARIABLES = ")
|
||||||
|
buffer.Write(requestVariablesJSON)
|
||||||
|
buffer.Write([]byte{'\n', '\n'})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 指标
|
||||||
|
metricHTTPKeysJSON, err := json.Marshal(serverconfigs.FindAllMetricKeyDefinitions(serverconfigs.MetricItemCategoryHTTP))
|
||||||
|
if err != nil {
|
||||||
|
logs.Println("ComponentsAction marshal metric http keys failed: " + err.Error())
|
||||||
|
} else {
|
||||||
|
buffer.WriteString("window.METRIC_HTTP_KEYS = ")
|
||||||
|
buffer.Write(metricHTTPKeysJSON)
|
||||||
|
buffer.Write([]byte{'\n', '\n'})
|
||||||
|
}
|
||||||
|
|
||||||
|
// IP地址阈值项目
|
||||||
|
ipAddrThresholdItemsJSON, err := json.Marshal(nodeconfigs.FindAllIPAddressThresholdItems())
|
||||||
|
if err != nil {
|
||||||
|
logs.Println("ComponentsAction marshal ip addr threshold items failed: " + err.Error())
|
||||||
|
} else {
|
||||||
|
buffer.WriteString("window.IP_ADDR_THRESHOLD_ITEMS = ")
|
||||||
|
buffer.Write(ipAddrThresholdItemsJSON)
|
||||||
|
buffer.Write([]byte{'\n', '\n'})
|
||||||
|
}
|
||||||
|
|
||||||
|
// IP地址阈值动作
|
||||||
|
ipAddrThresholdActionsJSON, err := json.Marshal(nodeconfigs.FindAllIPAddressThresholdActions())
|
||||||
|
if err != nil {
|
||||||
|
logs.Println("ComponentsAction marshal ip addr threshold actions failed: " + err.Error())
|
||||||
|
} else {
|
||||||
|
buffer.WriteString("window.IP_ADDR_THRESHOLD_ACTIONS = ")
|
||||||
|
buffer.Write(ipAddrThresholdActionsJSON)
|
||||||
|
buffer.Write([]byte{'\n', '\n'})
|
||||||
|
}
|
||||||
|
|
||||||
|
fp, err := os.OpenFile(filepath.Clean(Tea.PublicFile("/js/components.js")), os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0777)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = io.Copy(fp, buffer)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
13
internal/gen/generate_test.go
Normal file
13
internal/gen/generate_test.go
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
||||||
|
|
||||||
|
package gen
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestGenerate(t *testing.T) {
|
||||||
|
err := Generate()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Log("ok")
|
||||||
|
}
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
package ui
|
package ui
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"compress/gzip"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
|
"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/helpers"
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/helpers"
|
||||||
"github.com/iwind/TeaGo"
|
"github.com/iwind/TeaGo"
|
||||||
"github.com/iwind/TeaGo/actions"
|
"github.com/iwind/TeaGo/Tea"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@@ -16,11 +15,6 @@ func init() {
|
|||||||
// 公共可以访问的链接
|
// 公共可以访问的链接
|
||||||
Get("/image/:fileId", new(ImageAction)).
|
Get("/image/:fileId", new(ImageAction)).
|
||||||
|
|
||||||
// 以下的需要压缩
|
|
||||||
Helper(&actions.Gzip{Level: gzip.BestCompression}).
|
|
||||||
Get("/components.js", new(ComponentsAction)).
|
|
||||||
EndHelpers().
|
|
||||||
|
|
||||||
// 以下需要登录
|
// 以下需要登录
|
||||||
Helper(helpers.NewUserMustAuth(configloaders.AdminModuleCodeCommon)).
|
Helper(helpers.NewUserMustAuth(configloaders.AdminModuleCodeCommon)).
|
||||||
Get("/download", new(DownloadAction)).
|
Get("/download", new(DownloadAction)).
|
||||||
@@ -31,7 +25,13 @@ func init() {
|
|||||||
Post("/hideTip", new(HideTipAction)).
|
Post("/hideTip", new(HideTipAction)).
|
||||||
Post("/theme", new(ThemeAction)).
|
Post("/theme", new(ThemeAction)).
|
||||||
Post("/validateIPs", new(ValidateIPsAction)).
|
Post("/validateIPs", new(ValidateIPsAction)).
|
||||||
|
|
||||||
EndAll()
|
EndAll()
|
||||||
|
|
||||||
|
// 开发环境下总是动态加载,以便于调试
|
||||||
|
if Tea.IsTesting() {
|
||||||
|
server.
|
||||||
|
Get("/js/components.js", new(ComponentsAction)).
|
||||||
|
EndAll()
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
12042
web/public/js/components.js
Executable file
12042
web/public/js/components.js
Executable file
File diff suppressed because it is too large
Load Diff
@@ -15,7 +15,7 @@
|
|||||||
{$TEA.VUE}
|
{$TEA.VUE}
|
||||||
{$echo "header"}
|
{$echo "header"}
|
||||||
<script type="text/javascript" src="/_/@default/@layout.js"></script>
|
<script type="text/javascript" src="/_/@default/@layout.js"></script>
|
||||||
<script type="text/javascript" src="/ui/components.js?v=v{$.teaVersion}"></script>
|
<script type="text/javascript" src="/js/components.js"></script>
|
||||||
<script type="text/javascript" src="/js/utils.js"></script>
|
<script type="text/javascript" src="/js/utils.js"></script>
|
||||||
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
||||||
<script type="text/javascript" src="/js/date.tea.js"></script>
|
<script type="text/javascript" src="/js/date.tea.js"></script>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<link rel="stylesheet" type="text/css" href="/_/@default/@layout_override.css" media="all"/>
|
<link rel="stylesheet" type="text/css" href="/_/@default/@layout_override.css" media="all"/>
|
||||||
{$echo "header"}
|
{$echo "header"}
|
||||||
<script type="text/javascript" src="/_/@default/@layout.js"></script>
|
<script type="text/javascript" src="/_/@default/@layout.js"></script>
|
||||||
<script type="text/javascript" src="/ui/components.js?v=v{$.teaVersion}"></script>
|
<script type="text/javascript" src="/js/components.js"></script>
|
||||||
<script type="text/javascript" src="/js/utils.js"></script>
|
<script type="text/javascript" src="/js/utils.js"></script>
|
||||||
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
||||||
<script type="text/javascript" src="/js/date.tea.js"></script>
|
<script type="text/javascript" src="/js/date.tea.js"></script>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<script type="text/javascript" src="/js/md5.min.js"></script>
|
<script type="text/javascript" src="/js/md5.min.js"></script>
|
||||||
<script type="text/javascript" src="/js/utils.js"></script>
|
<script type="text/javascript" src="/js/utils.js"></script>
|
||||||
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
||||||
<script type="text/javascript" src="/ui/components.js?v=1.0.0"></script>
|
<script type="text/javascript" src="/js/components.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
<script type="text/javascript" src="/js/md5.min.js"></script>
|
<script type="text/javascript" src="/js/md5.min.js"></script>
|
||||||
<script type="text/javascript" src="/js/utils.js"></script>
|
<script type="text/javascript" src="/js/utils.js"></script>
|
||||||
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
||||||
<script type="text/javascript" src="/ui/components.js"></script>
|
<script type="text/javascript" src="/js/components.js"></script>
|
||||||
<link rel="stylesheet" href="/_/@default/@layout.css"/>
|
<link rel="stylesheet" href="/_/@default/@layout.css"/>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
<script type="text/javascript" src="/js/md5.min.js"></script>
|
<script type="text/javascript" src="/js/md5.min.js"></script>
|
||||||
<script type="text/javascript" src="/js/utils.js"></script>
|
<script type="text/javascript" src="/js/utils.js"></script>
|
||||||
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
||||||
<script type="text/javascript" src="/ui/components.js"></script>
|
<script type="text/javascript" src="/js/components.js"></script>
|
||||||
<link rel="stylesheet" href="/_/@default/@layout.css"/>
|
<link rel="stylesheet" href="/_/@default/@layout.css"/>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
<script type="text/javascript" src="/js/md5.min.js"></script>
|
<script type="text/javascript" src="/js/md5.min.js"></script>
|
||||||
<script type="text/javascript" src="/js/utils.js"></script>
|
<script type="text/javascript" src="/js/utils.js"></script>
|
||||||
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
<script type="text/javascript" src="/js/sweetalert2/dist/sweetalert2.all.min.js"></script>
|
||||||
<script type="text/javascript" src="/ui/components.js"></script>
|
<script type="text/javascript" src="/js/components.js"></script>
|
||||||
<link rel="stylesheet" href="/_/@default/@layout.css"/>
|
<link rel="stylesheet" href="/_/@default/@layout.css"/>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
Reference in New Issue
Block a user