来学习开源模块化前端框架—Layui【Layui 极致轻量前端框架】

简介: 它是一个开源的 Web UI 解决方案,采用自己的经典模块化规范,遵循原生 HTML/CSS/JS 开发模式。它很容易使用。它的风格简单轻巧,而组件优雅而丰富。从源代码到使用方法的每一个细节都经过精心雕琢,非常适合快速开发的 web 界面。Layui 不同于那些基于 MVVM 的前端框架,但它并不违背这条道路,而是相信回归自然的方式。准确地说,它更面向后端开发人员。不需要参与前端工具,只需面对浏览器本身,让您需要的所有元素和交互都来自这里。

一.为什么要学习layui?

网络异常,图片无法展示
|

它是一个开源的Web UI解决方案,采用自己的经典模块化规范,遵循原生HTML/CSS/JS开发模式。它很容易使用。它的风格简单轻巧,而组件优雅而丰富。从源代码到使用方法的每一个细节都经过精心雕琢,非常适合快速开发的web界面。Layui不同于那些基于MVVM的前端框架,但它并不违背这条道路,而是相信回归自然的方式。准确地说,它更面向后端开发人员。不需要参与前端工具,只需面对浏览器本身,让您需要的所有元素和交互都来自这里。

二.目录结构

目录结构如下:

├─css //css目录
  │  │─modules //模块 css 目录(一般如果模块相对较大,我们会单独提取,如下:)
  │  │  ├─laydate
  │  │  └─layer
  │  └─layui.css //核心样式文件
  ├─font  //字体图标目录
  └─layui.js //核心库

三.CDN 方式引入

UNPKG 和 CDNJS 均为第三方开源免费的 CDN,通过 NPM/GitHub 实时同步。UNPKG 引入示例

<!-- 引入 layui.css -->
<link rel="stylesheet" href="//unpkg.com/layui@2.6.8/dist/css/layui.css">
<!-- 引入 layui.js -->
<script src="//unpkg.com/layui@2.6.8/dist/layui.js">

四.经典的模块化”

Layui被定义为“经典的模块化”,并不是为了炫耀她有多么优秀,而是为了刻意避免当前JS社区的主流解决方案,并尝试以尽可能简单的方式解释效率!所谓的经典在于她对回归自然的痴迷。以当前浏览器普遍认可的方式组织模块!我们相信,这对中国的大多数程序员来说是一个很好的指南,可以帮助他们在未来从旧时代过渡到新标准。因此,layui本身并不完全遵循AMD时代。准确地说,她试图建立自己的模型:

layui 模块的定义(新 js 文件)

layui.define([mods], function(exports){
  //……
  exports('mod', api);
});  
//layui 模块的使用
layui.use(['mod1', 'mod2'], function(args){
  var mod = layui.mod1;
  //……
});

有早期AMD的影子,但不受commonjs的规章制度限制。Layui认为这种轻量级组织比webpack更适合大多数场景。因此,她坚持采用经典的模块化,正是为了让人们避免复杂的工具配置,回归简单,安静高效地编织原始的HTML/CSS/JS。然而,layui不是像requirejs那样的模块加载器,而是一个UI解决方案。与bootstrap的不同之处在于,layui结合了自己对经典模块化的理解。这使在layui组织的框架内更好地用更易维护的代码编织丰富的用户界面。

五.建立模块入口

可以根据layui的模块规范创建条目文件,并使用layui use()加载条目文件,如下所示:存放新模块的目录,注意,不是 layui 的模块目录:

<script src="./layui/layui.js"></script> 
<script>
layui.config({
  base: '/res/js/modules/' 
}).use('index');
</script>

上述指数为指数。js在/RES/js/modules/目录中。其内容应如下:

layui.define(['layer', 'form'], function(exports){
  var layer = layui.layer
  ,form = layui.form;
  layer.msg('Hello World');
  exports('index', {}); 
});

注意,这里是模块输出的核心,模块名必须和 use 时的模块名一致。

六.管理扩展模块

除了使用layui的内置模块外,还需要加载扩展模块(可以简单地理解为符合layui模块规范的JS文件)。我们假设许多扩展模块存储在项目中,如下所示:

//mod1.js
layui.define('layer', function(exports){
  //…
  exports(mod1, {});
});
//mod2.js,假设依赖 mod1 和 form
layui.define(['mod1', 'form'], function(exports){
  //…
  exports(mod2, {});
});  
//mod3.js
//… 
//main.js 主入口模块
layui.define('mod2', function(exports){
  //…
  exports('main', {});
});

在某些模块依赖性之后,还可以将上述扩展模块组合到一个文件中进行加载。我们可以使用gulp将上述扩展模块(如mod1、mod2、MOD3和main)合并到一个模块文件中:main.js。此时,只需加载它:

<script src="./layui/layui.js"></script>  
<script>
layui.config({
  base: '/res/js/modules/' //你的扩展模块所在目录
}).use('main'); //
</script>

这里的 main 模块包含了 mod1、mod2、mod3 等等扩展模块如我们所见,我们最多只需要加载两个JS文件:layui,js和main.js。这将显著减少对静态资源的请求。

七.全局配置

在使用该模块之前,请全局配置一些参数,尽管大多数情况下不需要这样做。因此,我们目前提供的全局配置项很少,这也是为了减少一些不必要的工作,并使使用尽可能简单。当前支持的全局配置项如下:

layui.config({
  dir: '/res/layui/'
  ,version: false 
  ,debug: false 
  ,base: '' 
});
  • layui.js 所在目录(如果是 script 单独引入 layui.js,无需设定该参数)一般可无视
  • 一般用于更新模块缓存,默认不开启。设为 true 即让浏览器不缓存。也可以设为一个固定的值,如:201610
  • 用于开启调试模式,默认 false,如果设为 true,则JS模块的节点会保留在页面
  • 设定扩展的 layui 模块的所在目录,一般用于外部模块扩展

如果对layui JS本身执行动态加载和其他特殊场景的看法是正确的,那么上述由config设置的layui-the-dir参数将变得无效。它将在加载某些组件的依赖文件(CSS)后执行。此时,我们可以动态加载layui JS定义了一个我们事先约定的全局对象:

<script>  
var LAYUI_GLOBAL = {
  dir: '/res/layui/' 
};
</script>

八.定义模块

使用此方法,可以在新的JS文件中定义layui模块。参数mods是可选的,用于声明模块依赖的模块。回调是加载模块后的回调函数。它返回一个exports参数以输出模块的接口。

layui.define(function(exports){
  //do something
  exports('demo', {
    msg: 'Hello Demo'
  });
});

与requirejs最大的区别在于接口输出。Exports是一个接受两个参数的函数。第一个参数是模块名,第二个参数是模件接口。声明上述模块后,可以在外部使用它。演示将在layui对象下注册,可以使用VaR demo=layui demo获得模块接口。还可以在定义模块时声明模块所需的依赖项,例如:

layui.define(['layer', 'laypage', 'mod1'], function(exports){ //此处 mod1 为你的任意扩展模块
  //do something
  exports('demo', {
    msg: 'Hello Demo'
  });
});

上述的 layer、laypage 都是 layui 的内置模块。

layui - 在每一个细节中,用心与你沟通

相关文章
|
2月前
|
缓存 移动开发 Rust
前端构建工具 Mako 开源了
Hi,我是 sorrycc,Mako 的主要负责人之一,也是 Umi、Dva、Father 等库的作者。 很开心,Mako 终于开源了! Github 地址:https://github.com/umijs/mako/ 今天和大家正式介绍下他。
114 3
|
28天前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
36 0
|
3月前
|
编解码 前端开发 JavaScript
.NET_web前端框架_layui_栅格布局
【8月更文挑战第27天】
46 4
|
9天前
|
前端开发 开发者 C++
独家揭秘:前端大牛们如何高效学习新技术,保持竞争力!
【10月更文挑战第31天】前端技术飞速发展,如何高效学习新技术成为关键。本文通过对比普通开发者与大牛们的策略,揭示了高效学习的秘诀:明确目标、主动探索、系统资源、实践应用和持续学习。通过这些方法,大牛们能更好地掌握新技术,保持竞争力。示例代码展示了如何通过实践加深理解。
23 4
|
19天前
|
前端开发 程序员 API
前端|基于 Layui 实现动态搜索选择框
网页端实现动态搜索选择框,要求下拉选项列表能根据用户输入内容动态刷新,最终提交的值必须是由选项列表中点选的。
38 3
|
21天前
|
存储 前端开发 JavaScript
前端的全栈之路Meteor篇(四):RPC方法注册及调用-更轻量的服务接口提供方式
RPC机制通过前后端的`callAsync`方法实现了高效的数据交互。后端通过`Meteor.methods()`注册方法,支持异步操作;前端使用`callAsync`调用后端方法,代码更简洁、易读。本文详细介绍了Methods注册机制、异步支持及最佳实践。
|
21天前
|
JSON 分布式计算 前端开发
前端的全栈之路Meteor篇(七):轻量的NoSql分布式数据协议同步协议DDP深度剖析
本文深入探讨了DDP(Distributed Data Protocol)协议,这是一种在Meteor框架中广泛使用的发布/订阅协议,支持实时数据同步。文章详细介绍了DDP的主要特点、消息类型、协议流程及其在Meteor中的应用,包括实时数据同步、用户界面响应、分布式计算、多客户端协作和离线支持等。通过学习DDP,开发者可以构建响应迅速、适应性强的现代Web应用。
|
1月前
|
JavaScript 前端开发 Java
VUE学习四:前端模块化,ES6和ES5如何实现模块化
这篇文章介绍了前端模块化的概念,以及如何在ES6和ES5中实现模块化,包括ES6模块化的基本用法、默认导出与混合导出、重命名export和import,以及ES6之前如何通过函数闭包和CommonJS规范实现模块化。
69 0
VUE学习四:前端模块化,ES6和ES5如何实现模块化
|
1月前
|
前端开发 JavaScript 开发者
深入解析前端开发中的模块化与组件化实践
【10月更文挑战第5天】深入解析前端开发中的模块化与组件化实践
23 1
|
1月前
|
前端开发 JavaScript 小程序
前端新机遇!为什么我建议学习鸿蒙?
【10月更文挑战第4天】前端新机遇!为什么我建议学习鸿蒙?
105 0
前端新机遇!为什么我建议学习鸿蒙?