You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LNMP部署Laravel Livewire报Livewire is not defined如何修复

问题描述

Laravel Livewire项目部署到LNMP环境(Nginx为Web服务器)时,livewire.js无法正常加载,浏览器控制台抛出如下错误:

Livewire is not defined

已知可通过发布静态资源的方式修复:执行php artisan livewire:publish将vendor目录下相关文件复制到项目public目录,但该方案后续升级Livewire时需要手动同步更新JS文件,不采用该方案。经排查判断问题为Nginx拦截了Livewire的JS动态响应,当前服务器Nginx全局配置如下:

user  www www;
worker_processes auto;
error_log  /www/wwwlogs/nginx_error.log  crit;
pid        /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;

events
    {
        use epoll;
        worker_connections 51200;
        multi_accept on;
    }

http
    {
#AAPANEL_FASTCGI_CONF_BEGIN
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_path /dev/shm/nginx-cache/wp levels=1:2 keys_zone=WORDPRESS:100m inactive=60m max_size=1g;
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
#AAPANEL_FASTCGI_CONF_END

        include       mime.types;
        #include luawaf.conf;

        include proxy.conf;

        default_type  application/octet-stream;

        server_names_hash_bucket_size 512;
        client_header_buffer_size 32k;
        large_client_header_buffers 4 32k;
        client_max_body_size 50m;

        sendfile   on;
        tcp_nopush on;

        keepalive_timeout 60;

        tcp_nodelay on;

        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;
        fastcgi_intercept_errors on;

        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_http_version 1.1;
        gzip_comp_level 2;
        gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
        gzip_vary on;
        gzip_proxied   expired no-cache no-store private auth;
        gzip_disable   "MSIE [1-6]\.";

        limit_conn_zone $binary_remote_addr zone=perip:10m;
        limit_conn_zone $server_name zone=perserver:10m;

        server_tokens off;
        access_log off;

server
    {
        listen 888;
        server_name phpmyadmin;
        index index.html index.htm index.php;
        root  /www/server/phpmyadmin;
            location ~ /tmp/ {
                return 403;
            }

        #error_page   404   /404.html;
        include enable-php.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log  /www/wwwlogs/access.log;
    }
include /www/server/panel/vhost/nginx/*.conf;
}
问题根源

你贴出的配置中,带js/css缓存规则的是phpMyAdmin站点的配置,并非Laravel项目的站点配置。aaPanel/宝塔面板默认生成的Laravel站点Nginx配置中,会对所有.js/.css后缀的请求直接匹配静态文件读取规则,不会将请求转发给PHP解析。
Livewire默认的/livewire/livewire.js是框架注册的动态路由,不存在实际的静态文件,请求被Nginx静态规则拦截后直接返回404,前端无法加载到对应的JS文件,就会抛出Livewire is not defined错误。

修复步骤
  • 打开Laravel项目对应的Nginx虚拟主机配置文件,路径为配置中指定的/www/server/panel/vhost/nginx/目录,找到对应域名的.conf文件编辑,不要修改全局Nginx配置或phpMyAdmin的站点配置。
  • 在配置中找到匹配js/css静态资源的location块,通常内容如下:
location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log /dev/null;
    access_log off;
}
  • 在该静态规则的上方新增一条优先级更高的规则,优先放行Livewire的动态JS请求,转发给PHP处理:
# 放行Livewire动态JS路由
location ^~ /livewire/livewire.js {
    expires off;
    try_files $uri $uri/ /index.php?$query_string;
}

如果自定义过Livewire的静态资源路径,将规则中的路径替换为实际配置的路径即可。

  • 保存配置文件后,执行命令验证配置语法是否正确:
nginx -t
  • 语法验证通过后,重载Nginx配置使规则生效:
nginx -s reload
  • 清理浏览器缓存后强制刷新页面即可恢复正常。
验证方式

直接在浏览器访问https://你的项目域名/livewire/livewire.js,如果能正常返回JS代码内容而非404页面,说明规则已经生效。


内容的提问来源于stack exchange,提问作者DIGITAL JEDI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:36:18