V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
darknoll
V2EX  ›  程序员

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

  •  
  •   darknoll · Jun 28, 2020 · 5858 views
    This topic created in 2142 days ago, the information mentioned may be changed or developed.

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

    Supplement 1  ·  Jun 28, 2020
    我已经用 go-bindata 把前端嵌进去了,但是能不能后后端共用一个端口啊
    Supplement 2  ·  Jun 28, 2020
    领导要求跑在 win 上,不装任何 web 服务器,只跑一个 exe,要是能用 nginx,我也不要来问了啊
    29 replies    2021-03-18 19:40:34 +08:00
    fucker
        1
    fucker  
       Jun 28, 2020
    1. 反向代理
    2. 将 index.html 作为静态文件让 go 返回给前端,其他目录我记得 gin 有 r.StaticFS("/static", http.Dir("./static"))
    hoosin
        2
    hoosin  
       Jun 28, 2020
    nginx 反向代理吧
    deprecatedCoder
        3
    deprecatedCoder  
       Jun 28, 2020   ❤️ 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  
       Jun 28, 2020
    import "github.com/gin-contrib/static"
    api 的路由组前缀不要和 前端编译好的代码冲突就可以了
    zhwithsweet
        5
    zhwithsweet  
       Jun 28, 2020
    反带
    darknoll
        6
    darknoll  
    OP
       Jun 28, 2020
    统一回复下,领导说不用反代,不装 nginx 之类的 web 服务器,直接运行一个 exe
    HanMeiM
        7
    HanMeiM  
       Jun 28, 2020
    前端或者 api 单独一个 location 就好了
    Fitz
        8
    Fitz  
       Jun 28, 2020
    http.Handle("/", http.FileServer( http.Dir("./static")))
    wszbdyyy
        9
    wszbdyyy  
       Jun 28, 2020
    nginx 反代
    maoxs2
        10
    maoxs2  
       Jun 28, 2020 via Android
    1. Vue 用 npm 生成 dist 文件夹
    2. Go 里用 statik 打包成变量指向文件夹(类似的好几个)
    3. 确认 server 里 static 等目录指向这个变量
    4. go build .
    5. 就一个文件,不用夹带文件夹了
    Hanggi
        11
    Hanggi  
       Jun 28, 2020
    之前正好用 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  
       Jun 28, 2020 via Android
    可以,
    做过类似的

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