惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Project Zero
Project Zero
D
DataBreaches.Net
博客园_首页
罗磊的独立博客
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Forbes - Security
Forbes - Security
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
雷峰网
雷峰网
Jina AI
Jina AI
O
OpenAI News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园 - 三生石上(FineUI控件)
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
SegmentFault 最新的问题
V
Visual Studio Blog
Webroot Blog
Webroot Blog
GbyAI
GbyAI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
腾讯CDC
IT之家
IT之家
C
Cyber Attacks, Cyber Crime and Cyber Security
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
T
Troy Hunt's Blog
博客园 - 叶小钗
N
News and Events Feed by Topic
B
Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
C
Check Point Blog
T
Threatpost
SecWiki News
SecWiki News
爱范儿
爱范儿
阮一峰的网络日志
阮一峰的网络日志
P
Privacy International News Feed
J
Java Code Geeks
L
LINUX DO - 最新话题
PCI Perspectives
PCI Perspectives
T
Tailwind CSS Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Cisco Blogs
S
Schneier on Security

博客园 - 神游虚空

解决 GDAL 用 C# 访问时,中文乱码问题。 学习AI编程 安装 RAGFlow 安装 KTransformer 量化投资赚的哪方面的钱? python中调用 .net 的 dll 时,报错:Exception has occurred: TypeLoadException 使用 Open XML SDK 实现 html 富文本转换为 docx 格式示例 在python中 先调用C#的dll 返回了一个类的列表,如何把这个列表转换为 python 中的 DataFrame? vue3 + ts + element_plus 创建后台管理系统,学习记录 大A指数周内效应分析 两个通达信公式 如何在.netcore 上实现 Rbac 权限管理 修道是精神上的减熵过程 BPMN2.0 Specifaction 节选翻译,10.4.6 事件处理(handling Events,原文 275页) BPMN2.0 Specifaction 节选翻译,10.4 事件 Events (原文233页) 使用ef或dbcontext的时候主要注意三个问题 EFCore 中 group 分组后,只选出每组中含有最大值的数据行 BPMN2.0 Specifaction 节选翻译,10.2.8 循环特征 Loop Characteristics (原文 189页) BPMN2.0 Specifaction 节选翻译,10.2.5 子流程 Sub-Processes (原文173页) BPMN2.0 Specifaction 节选翻译,10 Process (原文145页)
vue项目服务器部属源码调试解决办法
神游虚空 · 2023-01-06 · via 博客园 - 神游虚空

一、问题来源

     希望在远程发布的测试服务器上直接启用 vscode 的调试模试,来解决项目实际部属时的问题。

也就是在调试模式下,会有子域名的问题。

二、如何在调试模式下引入子域名

2.1、 运行环境

测试服务器上直接安装了 vscode 来调试前端 vue 代码。

会直接使用 npn run dev 来调试。这一版使用的 vue 版本为 2X ,用 webpack 发布。

服务器启动后为 http://localhost:8080 

子域名定为 /client , 用 nginx 来应射。下面内容来源于 nginx.conf 文件。

    ...
    location /client {
            if (-d $request_filename) {
                rewrite [^/]$ $scheme://$http_host$uri/ permanent;
            }
            proxy_pass                    http://localhost:8080;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header   Host             $http_host;
        }

这时在url 后不加斜杠"/" 不能访问页面。所以,nginx.conf 中,还需要补充如下配置

    location ~* ^/[a-z]+$ {
        rewrite ^/(.*)([^/])$ $scheme://$host/$1$2/ permanent;
    }

用于url地址自动补全最后的/(反斜杠)

2.2、如何让 webpack 发布为有子域名的运行环境

下面内容来源于 webpack.config.dev.js

const bundleOutputDir = '../wwwroot/dist'
const publishName = '/client' 
const HOST = 'localhost'
const PORT = 8080
...

devServer: {
      ...
      host: HOST,
      port: PORT,
      disableHostCheck: true,     
      publicPath: publishName + '/',
    },    

这里 publishName 值为 /client ,就是子域名  http://localhost/client

这里 disableHostCheck: true  关闭用于 DNS 重绑定的 HTTP 请求的 HOST 检查。

如果这时运行,会出现 index.html 中的静态资源无法定位。

2.3、解决index.html 中的静态资源无法定位问题

下面内容来源于 webpack.config.dev.js

   output: {
      path: path.resolve(__dirname, bundleOutputDir),
      filename: '[name].[hash].js',
      publicPath: publishName + '/'
    },

需要在 output 项目再次申明 publicPath !

2.4、如何把环境变量带到 vue 页面中去?

下面内容来源于 webpack.config.dev.js

    plugins: [
      new webpack.DefinePlugin({
        'process.env': {
          NODE_ENV: '"development"',
          VUE_APP_API: '"' + publishName + '/"',
          VUE_APP_TITLE: '"vue demo"',
          BASE_URL: '"' + publishName + '/"',
          UPLOAD_CHUNK_SIZE: uploadChunkSize,
        }
      }),
      new webpack.HotModuleReplacementPlugin(),
      new InsertHtmlPlugin({
        container: '<body>',
        content: `<div id="mount-loading" style="width: 100vw;height: 100vh;text-align: center;"> 
                  <img alt="" src="${publishName}/static/img/loading.gif" style="margin-top: calc(50vh - 145px);" />
                </div>`
      }),
    ]

通过 DefinePlugin() 中的 'process.env' 中传入需要传递的 key:value 对。

 这样在vue 文件中就可以使用了。

不过,这时查看 chrome 的开发者工具,会发现不时 sockjs.js 有报错:

 这是 sockjs-node 库,提供跨浏览器JavaScript的API,创建了一个低延迟、全双工的浏览器和web服务器之间通信通道。

开发时,如果变更网络环境(如切换wifi导致开发服务器的IP地址更换),服务器不知道如何确定访问源,就有可能造成上述情况

  2.5、vue-cli3 一直运行 /sockjs-node/info?t=解决办法

找到/node_modules/sockjs-client/dist/sockjs.js

上面报错时为 1609 行,把这行的 self.xhr.send,注释掉:

  存盘后,vscode 会自动重编译项目。

三、参考文章

nginx location配置详细解释     nginx 配置中 url地址自动补全最后的/(反斜杠)

关于Vue项目中publicPath的二三事

解决vue项目中的“Invalid Host header”      disableHostCheck配置

vue使用去掉路由上面的#,打包后请求404或者空白页