- 新答案 -
自从我第一次回答这个问题以来,我就开始使用不同的解决方案。
使用新解决方案,您可以直接向 nginx/apache Web 服务器发出请求。Web 服务器充当代理并将请求重定向到 webpack-dev-server 或 php 应用程序。php 应用程序暴露了它的所有端点/api/<actual/endpoint>
(请参阅下面的未经测试的示例配置,其中localhost:8080
指的是 webpack-dev-server)。
Apache config(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>"
}
]
}
请注意, path 属性是一个匹配所有内容的正则表达式。这将导致所有请求都被转发到 php 后端。如果您希望前端处理一些请求,您可能必须更改正则表达式。
webpack 开发服务器文档还说你必须将你的脚本标签 src 属性更改http://localhost:8080/<path_to_bundle>/<bundleFilename.js>
为-内联标志。
要使用 react 进行热模块更换:
现在你所要做的就是奔跑webpack-dev-server --inline --hot
,希望你是金子。