V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
abcbuzhiming
V2EX  ›  Node.js

如何解决:"可方便修改的一级路径"这个需求

  •  
  •   abcbuzhiming · 2018-12-20 17:16:55 +08:00 · 3370 次点击
    这是一个创建于 1925 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们的后端是 Java。Java 的 web 程序有一个一级上下文路径,每个应用都不同,比如:
    Http://xx.xx.xx:/上下文路径 /user/1

    为了和后台一致,来区分应用的上下文,我们的前端资源虽然和后端分离,但是访问的时候,也是带有同样的上下文路径的:
    Http://xx.xx.xx:/上下文路径 /html/xxx.html
    Http://xx.xx.xx:/上下文路径 /img/xxx.png
    Http://xx.xx.xx:/上下文路径 /js/xxx.js
    Http://xx.xx.xx:/上下文路径 /css/xxx.css

    我们在 html 页面里,无论是链接资源,还是访问接口,都是绝对路径,比如:
    <a href="/上下文路径 /js/xxx.html">xxxx</a>

    但是现在比较坑爹的是,这个上下文路径,在实际部署的时候,可能会因为客户要求,而发生变化。
    Java 后端的这个上下文路径非常好改,然而到了前端这块就出了大麻烦,如果这个上下文路径是硬编码写在页面上,那改起来就致命了。所以这个问题该怎么办呢,该如何搞出在部署时可以方便修改的一级路径来?
    22 条回复    2018-12-24 00:49:57 +08:00
    nfroot
        1
    nfroot  
       2018-12-20 18:05:08 +08:00 via Android
    使用相对路径啊,随便放什么目录都可以
    RH
        2
    RH  
       2018-12-20 18:05:13 +08:00
    也许可以全局变量定义一个 window.$APP.asset_prefix,部署时替换为需要的路径。
    annielong
        3
    annielong  
       2018-12-20 18:11:22 +08:00
    如果是有规律的客户要求,就加参数变量,如果随机指定这种,还是硬编码写进去
    imshf
        4
    imshf  
       2018-12-20 18:12:48 +08:00
    为何你的帖子点进来是黑色背景。。
    maichael
        5
    maichael  
       2018-12-20 18:14:40 +08:00
    全局变量呗。
    vishva
        6
    vishva  
       2018-12-20 18:35:10 +08:00
    写一个脚本,每次部署完以后运行一下扫描指定目录中的页面文件,把旧的路径替换成新的
    freed
        7
    freed  
       2018-12-20 18:54:13 +08:00
    @imshf node.js 节点的风格就这样..

    V2 在一些节点下有单独的 CSS 样式..游戏.美食之类..
    ipwx
        8
    ipwx  
       2018-12-20 18:56:06 +08:00
    Java 传给 JS ?
    imn1
        9
    imn1  
       2018-12-20 19:00:12 +08:00
    哇靠,这个节点的主题不错

    url re-write,把「上下文路径」作为参数
    abcbuzhiming
        10
    abcbuzhiming  
    OP
       2018-12-20 20:35:31 +08:00
    @nfroot 相对路径在开发中很容易出错,我现在是能不用,就不想用上下文路径
    lihongjie0209
        11
    lihongjie0209  
       2018-12-20 20:46:45 +08:00
    没有反向代理?
    aaahhh123
        12
    aaahhh123  
       2018-12-20 20:49:56 +08:00
    这背景看的脑壳痛
    tabris17
        13
    tabris17  
       2018-12-20 21:25:00 +08:00
    用配置解决
    abcbuzhiming
        14
    abcbuzhiming  
    OP
       2018-12-20 23:36:48 +08:00
    @imn1 想过这个方案,然而还是无法接受,太丑陋了,引入了中间环节,更容易出问题
    abcbuzhiming
        15
    abcbuzhiming  
    OP
       2018-12-20 23:37:57 +08:00
    @tabris17 你如何用配置解决
    abcbuzhiming
        16
    abcbuzhiming  
    OP
       2018-12-20 23:38:23 +08:00
    @lihongjie0209 当然用了,但是你反向代理解决不了这个问题
    TwoDays91
        17
    TwoDays91  
       2018-12-21 08:09:14 +08:00 via iPhone
    最简单后台接口告诉你上下文 再 js 动态加载

    或者打包的时候配置文件做逻辑判断 比如 webpack 这种东西 再或者自己写脚本对应修改
    imshf
        18
    imshf  
       2018-12-21 08:57:53 +08:00
    @freed 原来如此,第一次进 Node 节点。。
    nfroot
        19
    nfroot  
       2018-12-21 09:28:50 +08:00
    @abcbuzhiming web 程序相对路径是最方便和安全的,要不你就程序安装时或者每次加载时自动生成这个变量咯,如果你不嫌麻烦的话。
    kevinkim
        20
    kevinkim  
       2018-12-21 09:49:58 +08:00
    可以考虑用 base 标签看看?
    tabris17
        21
    tabris17  
       2018-12-21 10:12:53 +08:00
    @abcbuzhiming html 里的路径通过后端模板生成呗。还有种笨办法就是前端构建时生成,路径变化了再生成发布一次
    LeoEatle
        22
    LeoEatle  
       2018-12-24 00:49:57 +08:00
    没有用 webpack 吗....定义 publicPath 就好了啊

    然后源代码里用相对路径去引用对应资源
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5890 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:14 · PVG 10:14 · LAX 19:14 · JFK 22:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.