V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
darknoll
V2EX  ›  程序员

vue 和 go 开发前后端分离的网站,现在想把 vue 打包生成的 dist 部署到 go 上,前后端使用同一个端口,可以做到吗?

  •  
  •   darknoll · 2020-06-28 14:39:27 +08:00 · 5047 次点击
    这是一个创建于 1391 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前端还使用原来的路由,后端路由统一加个 /api 之类的,咋整?

    第 1 条附言  ·  2020-06-28 16:37:16 +08:00
    我已经用 go-bindata 把前端嵌进去了,但是能不能后后端共用一个端口啊
    第 2 条附言  ·  2020-06-28 17:47:23 +08:00
    领导要求跑在 win 上,不装任何 web 服务器,只跑一个 exe,要是能用 nginx,我也不要来问了啊
    29 条回复    2021-03-18 19:40:34 +08:00
    fucker
        1
    fucker  
       2020-06-28 14:44:43 +08:00
    1. 反向代理
    2. 将 index.html 作为静态文件让 go 返回给前端,其他目录我记得 gin 有 r.StaticFS("/static", http.Dir("./static"))
    hoosin
        2
    hoosin  
       2020-06-28 14:58:08 +08:00
    nginx 反向代理吧
    deprecatedCoder
        3
    deprecatedCoder  
       2020-06-28 15:07:21 +08:00   ❤️ 1
    ```

    ginRootPath.Use(static.Serve("/", static.LocalFile(common.Cfg.Web.FrontDir, true)))
    ginRootPath.StaticFile("situation", common.Cfg.Web.FrontDir+"/index.situation.html")
    ```
    deprecatedCoder
        4
    deprecatedCoder  
       2020-06-28 15:08:14 +08:00
    import "github.com/gin-contrib/static"
    api 的路由组前缀不要和 前端编译好的代码冲突就可以了
    zhwithsweet
        5
    zhwithsweet  
       2020-06-28 15:09:45 +08:00
    反带
    darknoll
        6
    darknoll  
    OP
       2020-06-28 15:45:29 +08:00
    统一回复下,领导说不用反代,不装 nginx 之类的 web 服务器,直接运行一个 exe
    HanMeiM
        7
    HanMeiM  
       2020-06-28 15:50:29 +08:00
    前端或者 api 单独一个 location 就好了
    Fitz
        8
    Fitz  
       2020-06-28 15:53:27 +08:00
    http.Handle("/", http.FileServer( http.Dir("./static")))
    wszbdyyy
        9
    wszbdyyy  
       2020-06-28 15:53:48 +08:00
    nginx 反代
    maoxs2
        10
    maoxs2  
       2020-06-28 15:56:52 +08:00 via Android
    1. Vue 用 npm 生成 dist 文件夹
    2. Go 里用 statik 打包成变量指向文件夹(类似的好几个)
    3. 确认 server 里 static 等目录指向这个变量
    4. go build .
    5. 就一个文件,不用夹带文件夹了
    Hanggi
        11
    Hanggi  
       2020-06-28 16:16:53 +08:00
    之前正好用 Angular 做过这事:

    首先 ng build 生成 dist 。
    然后把生成的文件放到 public 里:r.Static("/public", "./public")

    然后把里面的 index.html 移动到 views 里,并修改名称为 index.tmpl:r.LoadHTMLGlob("views/*")

    然后写个 router:
    c.HTML( http.StatusOK, "index.tmpl", gin.H{})

    这是你想要的吧。
    gamexg
        12
    gamexg  
       2020-06-28 16:22:43 +08:00 via Android
    可以,
    做过类似的

    使用 vfsgen 等类似的库内嵌 html 文件到 exe 即可。
    scukmh
        13
    scukmh  
       2020-06-28 16:23:13 +08:00
    emmmm, 我做过这件事,但可执行文件比较大。大概就是楼上的思路,把前端生成的代码打包进二进制文件里。
    xiayun
        14
    xiayun  
       2020-06-28 17:21:48 +08:00
    为啥要起一个端口···nginx 代理一下不就行了么
    mlboy
        15
    mlboy  
       2020-06-28 17:41:54 +08:00 via iPhone
    可以,了解下 go 打包资源文件二进制
    labulaka521
        16
    labulaka521  
       2020-06-28 17:56:09 +08:00 via iPhone
    我们前段时间也遇到这个问题 可以参考一下我写的一篇文章 https://labulaka521.top/posts/4868566 不知道你用的 web 框架是啥 如果是 gin /目录就不能使用了 前端的 url 需要修改为别的路径
    darknoll
        17
    darknoll  
    OP
       2020-06-28 18:58:00 +08:00 via Android
    @labulaka521 原来这就是你写的啊,我现在就是按照这个弄起来了,但是 /路径没法用,资源文件还要跳转,这俩问题你们最后是怎么处理的啊
    yrj
        18
    yrj  
       2020-06-28 19:12:33 +08:00 via iPad
    把静态站嵌入 go
    labulaka521
        19
    labulaka521  
       2020-06-28 19:31:11 +08:00 via iPhone
    @darknoll 对我没用 /路径了 做了一个重定向 把 /路径重定向了一个新的路径 你可以参考 https://github.com/labulaka521/crocodile/blob/dev/core/router/router.go 这里面的代码
    thtznet
        20
    thtznet  
       2020-06-28 19:31:43 +08:00
    还是微软大法好,WebAPI 都现成的。
    djoiwhud
        21
    djoiwhud  
       2020-06-28 20:12:19 +08:00 via Android
    很多种方案。
    1,cdn 部署前端
    2,go+go http file server
    3,go+nginx
    如果是非管理后台类型,推荐方案 1
    Nzelites
        22
    Nzelites  
       2020-06-28 23:01:13 +08:00
    不嵌二进制也可以 go 直接 load 文件做静态资源返回,build 的时候目录管理下就好
    phpbest
        23
    phpbest  
       2020-06-29 10:08:56 +08:00
    skiy
        24
    skiy  
       2020-06-29 11:33:48 +08:00
    可以。搞过。
    Vue 走的是 hash 路由,跟 Go,没多大关系,就相当于你只要给一个 Controller.Func 一个入口,那个入口指向 dist 位置就好(也可以像上面有仁兄说的用 FileServer )静态文件也要配置一下。
    viazure
        25
    viazure  
       2020-06-29 14:07:19 +08:00
    IIS 总可以吧,代理 + url 重写组件
    zhuweiyou
        26
    zhuweiyou  
       2020-06-29 14:30:57 +08:00
    你的 go 框架应该有设置 assets / static / public dir 之类的方法吧,指向你的静态目录就行了呀。
    AAAmos
        27
    AAAmos  
       2021-03-17 10:17:23 +08:00
    遇到了同样的情况?题主怎么解决的?
    AAAmos
        28
    AAAmos  
       2021-03-18 17:46:38 +08:00
    @darknoll 老铁你的问题怎么处理的啊?
    darknoll
        29
    darknoll  
    OP
       2021-03-18 19:40:34 +08:00
    @AAAmos 后端用 gin-contrib/static 托管静态网站,前端使用子路径
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3000 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 11:08 · PVG 19:08 · LAX 04:08 · JFK 07:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.