Webpack & Encore:远程服务器上的 PHP 项目,代理到本地,带有 HMR/自动重新加载 这不会这么难吧?我认为这服务器代理本地主机将是 Webpack/Encore 与 HMR 的一个非常常见的应用程序?

如何解决Webpack & Encore:远程服务器上的 PHP 项目,代理到本地,带有 HMR/自动重新加载 这不会这么难吧?我认为这服务器代理本地主机将是 Webpack/Encore 与 HMR 的一个非常常见的应用程序?

我现在正在为一个问题苦苦挣扎:
我想要一个带有 HMR(热模块替换)的本地 webpack/encore 开发环境,它使用服务器生成的索引文件(来自 Contao-CMS/PHP/MySQL)。

详情:
我有一个远程服务器,可通过 HTTPS(端口 443)访问。我使用的是托管托管包,所以很遗憾我无法在替代端口上运行任何 webpack 服务器,我必须坚持使用端口 80 和 443。
在这个远程服务器上,一个 MySQL 数据库和 PHP (Composer) 正在运行。页面内容由CMS Contao管理。
此远程服务器生成 PHP/HTML/DOM 结构和数据/内容。

我还有一个本地编程环境,其中包含 Webpack、Encore 和我的样式/javascripts。我不想在那里复制我当前的远程 Contao/MySQL 安装。我宁愿从远程服务器获取结构以在我的本地环境中使用。

我最喜欢的设置是:

远程服务器可在https://myserver.de:443
下访问 (端口 443,HTTPS,由 npm run build 构建,运行稳定,可公开访问)

本地服务器在 https://localhost:443(自签名)下运行,用于开发新样式/脚本:它基本上应该从远程服务器(HTML/structure /DOM、一些脚本、图像、所有内容),但提供本地样式/布局/脚本并激活热模块替换 (HMR) 以在更改时自动重新加载。基本上,我想使用现有远程页面中的框架(和内容)实时编辑/重写我的样式。

我的问题是:

这应该可以通过使用代理来管理。
然而,通常你只是代理一个 API-Request 来从远程站点提取数据。
在本地主机上(通常),您拥有索引 (.html/php)、脚本/样式和其他所有内容,并且您仅通过代理 API 请求获取数据/内容。

在我最喜欢的设置中,这不起作用。结构和内容包含在我的(PHP/MySQL/Contao 生成和模板化)index.php 中,这里必须注入来自 localhost 的正确样式/脚本/HMR。 (哪个 webpack 应该开箱即用)

所以基本上,我必须从远程服务器请求/下载/代理 index.php 并在那里注入我的 webpack/encore 样式/脚本,以便进行样式更改和 HMR 工作。

我的计划是:

  1. 代理远程服务器上的所有内容,除了 /layout/(存储 Encore 生成的样式/脚本)
  2. https://myserver.de
  3. 下载/代理 index.php(服务器生成的根页面,包含来自 Contao-CMS-Templates 的所有结构、来自 MySQL 数据库的数据以及指向脚本/样式的链接)
  4. Webpack 应该“以某种方式”替换样式/脚本文件(以 index.php 中的 /layout/ 开头)并添加 HMR 脚本并将其作为根页面从 https://localhost 提供
  5. 在 https://localhost 上,来自远程服务器的 HTML/DOM/Data/Template 结构被传递,但来自本地环境的样式和脚本 (/layout/) 被 HMR 使用并动态重新加载。立>

这不会这么难吧?我认为这(服务器代理本地主机)将是 Webpack/Encore 与 HMR 的一个非常常见的应用程序?

到目前为止我尝试过的:

  • 我设法在本地主机 npm run local 上制作了一个开发服务器,并在远程 npm run server 上制作了第二个开发服务器。 https://mydomain.de 处的服务器从本地服务器 https://localhost:443/layout/ 加载 /layout/ 文件。保存本地文件时,它们会立即上传到远程服务器。两个 webpack 服务器都被重建,并且 https://mydomain.de 上的 HMR 被重新加载。是的,这很丑陋,是的,它有效! 但是,如果没有使用本地 webpack 服务器的人想要查看页面,则无法加载样式(因为从 https://localhost:443/layout 加载当然会导致超时)。
  • 我设法将所有内容(/layout/ 除外)代理到本地主机。在根页面 (/) 上,我禁用了压缩 (否则 gzip 会导致问题,即使使用来自 onProxyRes: responseInterceptor() 的新 http-proxy-middleware 函数,这对我来说仍然有点问题) 。然后,我可以将文件从 https://mydomain.de/layout/xyz.hexcode.css 正则表达式替换为 https://localhost/layout/xyz.css。 但是,webpack 会动态生成(并组合)这些文件,我无法确定 xyz 文件是否在 localhost 上具有完全对应的文件。此外,我还没有设法注入 HMR 代码。

但是“不知何故”这必须更容易实现而无需手动“搜索和替换”? Webpack/Encore/HMR 已经知道需要哪些文件,所以他们应该“以某种方式”将它们注入(代理/下载的)根页面!?
我错过了什么?

我的文件:

来自 https://myserver.de 的 index.php 的一部分

<!-- these layouts/scripts are from Contao and not served via Webpack/Encore -->
<link rel="stylesheet" href="assets/css/layout.min.css,responsive.min.css,colorbox.min.css,tablesorter.m...-0568d07b.css"> 
<script src="assets/js/jquery.min.js-55e8b57b.js"></script>

<!-- these layout/scripts are generated via Encore and should be served lokally with HMR -->
<link rel="stylesheet" href="/layout/css/base.a195259b3b6d1c0ea116.css">
<link rel="stylesheet" href="/layout/css/3.c051ea961ca07ebe9603.css">
<link rel="stylesheet" href="/layout/css/fonts.1cad325240e751e2982a.css">
<link rel="stylesheet" href="/layout/css/news.25dbe26df9e81062227b.css">
<link rel="stylesheet" href="/layout/css/player.ab38e835c60a5569740b.css">
<link rel="stylesheet" href="/layout/css/nav.bae121a49552892e1ec9.css">
<link rel="stylesheet" href="/layout/css/search.424f2d130fdf3fc848dd.css">
<link rel="stylesheet" href="/layout/css/image.8f8b30f024d7de8ae5dd.css">
<link rel="stylesheet" href="/layout/css/accordion.3167aff65e6d694465f3.css">
<link rel="stylesheet" href="/layout/css/lyrics_chords.b7c98d9b5fe8443510de.css">
<script src="/layout/js/runtime.de3cb55993caa785606e.js"></script>
<script src="/layout/js/0.68475f916dd09a70f2ed.js"></script>
<script src="/layout/js/1.b0717b92f1874e527d29.js"></script>
<script src="/layout/js/base.5b6ff652693c4338465a.js"></script>
<script src="/layout/js/3.a860c6c3271280c8338d.js"></script>
<script src="/layout/js/fonts.fd828da43496442d0bd4.js"></script>
<link rel="stylesheet" href="/layout/css/code.59f6e92a9deeff93d3c4.css">
<script src="/layout/js/nav.f5f43f643bacbe9a2b0f.js"></script>

package.json 的一部分:

  "https": {
    "cert": "key/private.pem","key": "key/private.key","port": "443"
  },"scripts": {
    "local": "encore dev-server --hot --watch --disable-host-check --https --port 443 --cert key/private.pem --key key/private.key","server": "encore dev-server --hot --watch --disable-host-check --host localhost --https --port 443","dev": "encore dev-server --hot --disable-host-check --host localhost --proxy https://mydomain.de","build": "encore production --progress --profile",... and some other test scripts
     ... and lots of dependencies
  },

(不幸的是,--https、--cert 和--key 必须由 CLI 显式添加。否则,它会尝试通过 HTTP 加载 /layout/ - 文件。但让我们专注于 {{1 }} 这里)

(非常小的)webpack.config.js 的一部分

npm run dev

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-