- 新答案-
自从我第一次回答这个问题以来,我就开始使用不同的解决方案。
使用新解决方案,您可以直接向 nginx/apache Web 服务器发出请求。 Web 服务器充当代理并将请求重定向到 webpack-dev-server 或 php 应用程序。 php 应用程序在/api/<actual/endpoint> 下公开了它的所有端点(请参阅下面的未经测试的示例配置,其中localhost:8080 指的是webpack-dev-server)。
Apache 配置(http://php-application 指的是单独的 VirtualHost,此处未显示)
<VirtualHost *:80>
ServerName my-website.dev
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ProxyPassMatch ^\/api\/.+$ http://php-application/
ProxyPassReverse / http://php-application/
</VirtualHost>
Nginx 配置 (PHP7.1)
server {
listen 80;
server_name my-website.dev;
root /path/to/backend/public;
index index.php index.html;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://localhost:8080;
}
location ~ ^/api/.+$ {
try_files /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
- 旧答案-
我知道你让它成功了,但是当我自己遇到这个问题时,我偶然发现了这篇文章,并在解决它之后想分享我的解决方案。
我没有使用 Laravel,但在 apache 服务器上有一个 PHP 后端。我只需要在 webpack.config.js 中进行两处更改即可使 webpack 开发服务器正常工作:
改变这个
publicPath: __dirname + '<path_to_bundle>'
对此(注意:http://localhost:8080 是 webpack-dev-server 的 url)
publicPath: "http://localhost:8080/<path_to_bundle>/"
并添加一些代理设置以将请求转发到 php 后端
devServer: {
proxy: [
{
path: /./,
target: "http://<php_backend_url>"
}
]
}
请注意,路径属性是一个匹配所有内容的正则表达式。这将导致所有请求都被转发到 php 后端。 如果您希望前端处理某些请求,您可能需要更改正则表达式。
webpack 开发服务器文档还说您必须将脚本标签的 src 属性更改为 http://localhost:8080/<path_to_bundle>/<bundleFilename.js>,但这仅在我想从旧 (apache) url 而不是 localhost 访问应用程序时才需要:8080 使用 --inline 标志时。
要使用 react 进行热模块替换:
现在你要做的就是运行webpack-dev-server --inline --hot,希望你是金子。