layui怎么将一个老旧的jQuery项目重构成Layui模块化架构

老晨大大_3300

老晨大大_3300

2026-10-02

616人浏览

原创

不能重构成layui模块化架构,只能在layui环境中安全复用原有jquery代码;因其内置jquery移除了全局$和jquery变量,老旧插件依赖window.jquery导致报$ is not defined或cannot read property 'fn' of undefined。

layui怎么将一个老旧的jquery项目重构成layui模块化架构

直接说结论:不能“重构成 Layui 模块化架构”,只能“在 Layui 环境中安全复用原有 jQuery 代码”。Layui 不是重构目标,而是运行约束环境;它的模块机制不兼容全局 $,强行迁移旧插件会报 $ is not defined 或 Cannot read property 'fn' of undefined。

为什么直接引入老旧 jQuery 插件会报错

Layui 内置了 jQuery(v1.12.4),但主动移除了全局 $ 和 jQuery 变量——这是为避免与页面已存在的 jQuery 冲突。而绝大多数老旧插件(比如 siam.js)依赖立即执行函数包裹的 (function($){ ... })($) 模式,且默认从 window.jQuery 取值。Layui 的模块加载顺序又常早于你手动引入的外部 jQuery,导致闭包里传入的 $ 是 undefined。

常见错误现象:

  • Uncaught ReferenceError: $ is not defined(插件脚本第一行就崩)
  • TypeError: Cannot read property 'fn' of undefined(插件试图挂载方法到 $.fn)
  • 插件初始化成功,但后续调用时报 $(...).siam is not a function

必须用 layui.define 封装旧插件

把插件逻辑包进 Layui 模块,显式声明对 jquery 模块的依赖,并通过 layui.$ 获取受控的 jQuery 实例。这是唯一能绕过全局变量缺失、又能复用原逻辑的方式。

实操步骤:

jQuery 1.12.4
jQuery 1.12.4

jQuery 1.12.4是jQuery 1.x系列的最后一个正式稳定版本,由jQuery团队于2016年发布。该版本主要面向需要兼容旧版浏览器环境的网站和Web应用,尤其适用于仍需支持Internet Explorer 6、Internet Explorer 7、Internet Explorer 8等老旧浏览器的项目。

下载
  • 新建文件 src/modules/siam.js(路径需与 layui.js 同级或按 layui.config({base: 'xxx/'}) 配置)
  • 内容结构固定:
    layui.define('jquery', function(exports){
      var $ = layui.$;
      // ✅ 此处粘贴原 siam.js 的核心函数体(去掉外层 IIFE 包裹)
      // ❌ 不要保留 (function($){ ... })(window.jQuery);
      $.fn.siam = function(params) {
        var dom = this;
        dom.html(params);
        return this; // 记得链式返回
      };
      exports('siam', {}); // 模块名与文件名一致,值可空
    });
  • 使用时必须先 layui.use(['jquery', 'siam'], function(){...}),否则 layui.$ 还没加载完成

遇到依赖其他 jQuery 插件怎么办

比如你的 siam.js 内部调用了 $.fn.draggable,而该方法来自另一个老旧插件 jquery-ui-draggable.js。这时不能只封装 siam,必须一并封装依赖项:

  • 将 jquery-ui-draggable.js 同样改写为 src/modules/draggable.js,导出空对象即可
  • 在 siam.js 的 layui.define 第一个参数里加上 'draggable',确保加载顺序
  • 注意:Layui 不支持 AMD/CMD 的依赖自动解析,所有依赖必须显式声明在数组里

参数差异关键点:layui.define(['jquery', 'draggable'], callback) 中,callback 执行时,draggable 模块已加载完毕,其内部对 layui.$ 的扩展已生效,siam 才能安全调用 $.fn.draggable。

别碰 layui.config({jquery: true}) 这个坑

文档里提过这个配置项,它会让 Layui 放弃内置 jQuery、转而使用全局 $。看起来是捷径,但实际埋雷:

  • 若你页面引入的是 jQuery 3.x,而 Layui 组件(如 form、table)内部依赖 1.12.4 的行为(比如事件委托写法),大概率崩溃
  • 多个第三方库共存时,$.noConflict() 会破坏 Layui 对 jQuery 的控制权
  • FastAdmin 等基于 Layui 的框架明确禁用此配置,因其破坏模块隔离性

真正需要的不是“让 Layui 屈服于旧代码”,而是“让旧代码适应 Layui 的模块契约”。最易被忽略的一点:所有 DOM 操作必须发生在 layui.use 回调内——哪怕只是 $('#test').siam('xxx'),也得等模块加载完,否则 layui.$ 还没准备好,$ 就是 undefined。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2223

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

4743

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5870

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5338

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

763

5

jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.12

581

5

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

976

3

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.10

2102

8

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

2023.12.04

2128

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 12.6万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 10.9万人学习

Layui 快速入门精讲
Layui 快速入门精讲

共5课时 | 1.6万人学习