组件化

基于UI 样式布局

没有过多 js 代码操作的 比如:一个导航栏 一个表单 一个搜索框 一个侧边栏 一个html 等等....

模块化

基于功能模块

一个可以替换的js部分称之为模块(module) 模块化:

将代码按照特定的逻辑组合到一起,进行编码和使用;简单的说就是一个或多个有特定功能的函数 要用某个功能时用一种规则将 模块引入使用;

原生JS不支持 模块化 不支持 commonjs 规则

有人就将js抽离出来开发出 node.js 但是node.js 全是本地资源 浏览器是执行的网络资源 要想执行js必须下载本地资源 需要异步加载,所有就有了异步加载概念;

异步加载概念 有两种代表: 国外的AMD模型: require.js CMD模型: 国内 淘宝 玉伯开发的 sea.js

模块与非模块之间的区别

 非模块:

1>将JS写至 页面中(优点:结构清晰;缺点:无法复用,js 库的依赖 版本变化 所有代码都得变 命名冲突几率大)

2> 使用js 文件编写 用script 标签引入 (优点:复用 ;缺点 : 依赖大量的js库)

模块: 

1> 按照功能进行分类 将一类功能定义成一个模块 (就是一个js文件) 易于维护;'

2>在页面中加载模块

3>优点:

1.关注点集中, 将重点放在业务逻辑中;

2.逻辑更加清晰,按照功能划分模块;

3.划分很细时, 数据共享不会受到影响(全局变量污染出现的问题概率变小);

模块有两种模型

1) 自己封装的库, 需要返回一个全局对象才能引入到模块化中使用

var bbb=(function(){
function func(){}
function func1(){}
return{
func:func,
func1:func1
};
})()
//引入 在baseUrl路径中设置添加 :
require.config({
baseUrl:"./lib",
paths:{
jquery:"sasas/saS/saS/jquery-3.2.0" },
shim{
模块名 :{
exports:"模块名"//!!!接收的变量名
},
bootstarp:{
deps:["jquery"] //加载bootstarp之前必须先加载jquery
}
})

2) 插件,本身不需要返回数据,但依赖一些代码 没有定义依赖需手动添加 shim{ 模块名 :{ deps:['模块名字'] }

一.引入js 定义简单模块

define('模块名',[依赖其他js库列表],function(依赖库需要返回的参数){ 
      //功能代码 业务逻辑
         /* 1>第一个参数,用于描述该模块的路径名字,如果提供了该参数, 表示当前模块为命名模块(named module),不提供参数为 匿名模块!!! 2>第二个参数描述当前模块需要使用的其他模块名
['jquery文件名','template文件名']

3>第三个参数
($,template)
4>这些依赖的js库必须支持require.js */
})

二.加载模块

require(["模块名字"])

注意:

1>模块名字 就是定义模块的文件名, 无后缀!

2>越简单的代码使用模块化(module)越复杂 越复杂的项目使用模块化越简单

3>加载模块后要执行一个很短小的代码 不用复用

require(["要加载的js库模块名字"],function(){})

如:

require(["jquery"],function($){ //功能代码 业务逻辑 })

三.模块路径

模块名字路径有三种

1>带有./ , ../, /(本地打开会从当前文件夹根目录(大盘)找寻 且必须写后缀)等等 路径名的形式:会按照路径来寻找文件

2>只有一个文件名: 默认路径搜索在HTML所在的文件夹(和html同级)

3>使用script 来加载模块 <script src='require.js' data-main="./(加后缀)"></script>

配置文件(路径)加载模块

1.引入require.js

2.调用require.config() 配置

3.使用baseUrl 来配置搜索路径

4.引入baseUrl , 在写模块名时, 都是在baseUrl给出路径作为跟目录中查找

5.lib中还是有很多文件夹 路径目录还是很长 可以用paths来设置:

require.config({ baseUrl:'./lib', paths:{ 短名字:长名字 a文件名: "文件名路径 : b/a", c文件名: "文件名路径 : d/c" }) require(['a']); //a 依赖于c !!文件引入失败可以在Network中刷新查看文件的路径是怎么加载的

四. 匿名模块 和 命名模块的区别

(define( )的第一个参数) 命名模块 :

注意 :

1.) 使文件的名字和命名模块的名字一样.且文件必须在当前目录 (很少使用)

2.)配置paths时 短名字(属性)必须和模块的名字一致!!!!! 命名规则很严谨 区分大小写 (防止开发人员随意对模块命名)

匿名模块 :

define( )的第一个参数,不提供参数为 匿名模块!!!

注意 : 去依赖的js库必须进入源代码 ctrl + F 找到 define( 把他定义的名字去掉 就行了

require.js 模块化简单理解的更多相关文章

  1. 初步理解require.js模块化编程

    初步理解require.js模块化编程 一.Javascript模块化编程 目前,通行的Javascript模块规范共有两种:CommonJS和AMD. 1.commonjs 2009年,美国程序员R ...

  2. require.js模块化

    require.js简单来说就是把js代码分装模块化了 模块化 模块就是实现特定功能的一组方法.只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块. 我拿一个运动框架来解释一下req ...

  3. require.js模块化管理和加载js(按需加载)简单实例教学

    一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载.下面的网页代 ...

  4. require.js模块化写法

    模块化 模块就是实现特定功能的一组方法.只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块. 下述两种写法等价 exports 对象是当前模块的导出对象,用于导出模块公有方法和属性. ...

  5. require.js 模块化

    什么是模块化? 将若干功能进行封装,以备将来被重复使用. 为什么要前端模块化? 将公共功能进行封装实现复用 灵活解决依赖 解决全局变量污染 如何实现前端模块化? <!DOCTYPE html&g ...

  6. require.js的简单使用

    <script src="js/require.js"></script> <script src="js/require.js" ...

  7. require.js模块化开发

    模块化开发的原因: 1.引入的js过多然后在加载的过程中容易出现假死的状态,导致页面会发生白屏 2.变量名的问题 在多人协作开发的时候容易出现变量名的冲突 面向对象 3.引入优先级的问题 模块化开发分 ...

  8. 关于js动画简单理解;

    1.CSS样式提供了运动 过度的属性:transition 过度的属性值:attr  ,time  , liner  ,  delay: 值分别是:属性(css),花费的时间,变化的速度(默认匀速), ...

  9. 转 JS模块化简单实现

    git示例地址:https://github.com/wufenfen/requireJS-Demo.git

随机推荐

  1. CF 438 E & bzoj 3625 小朋友和二叉树 —— 多项式开方

    题目:http://codeforces.com/contest/438/problem/E https://www.lydsy.com/JudgeOnline/problem.php?id=3625 ...

  2. MFS安装配置使用

    MFS server:192.168.209.18groupadd mfsuseradd -g mfs mfscd /usr/srctar xzvf mfs-1.6.27-5.tar.gzcd mfs ...

  3. 面向对象——final关键字

    继承的弊端:打破了封装性 解决方式:final final关键字的特点: 1.final是一个修饰符,即可以修饰类,也可以修饰方法,还可以修饰变量 2.final修饰的类不可以被继承 3.final修 ...

  4. 错误:(26, 13) Failed to resolve: com.android.support:appcompat-v7:27.+

    小编也是初学安卓,今天配置环境的时候遇到这个问题了,搞了半天终于找到了问题 在build.gradle中添加 allprojects { repositories { jcenter() maven ...

  5. Promise API

    Promise API     刚刚接触promise这个东西,网上看了很多博客,大部分是讲怎么用Promise,丝毫没提怎么实现Promise. 我不甘 心,可是真去看JQuery或者Angular ...

  6. asp.net mvc cookie超时返回登录页面问题

    filterContext.HttpContext.Response.Write("<script>top.location.href = '/Login/Index';< ...

  7. html中NAME和ID区别

    html中NAME和ID区别 NAME 的最大作用就是可以与服务端进行交互.Struts2中要设NAME的属性才能在Action中取到值,ID取不到. id与name的作用,作为标签的标识符,基本上是 ...

  8. 建立JNI层的本地对象,并与JAVA层交互方法

    最近在做OpenCV4Android开发的时候,需要从摄像头捕获多个图片,传值给本地对象,每次捕获到图片都更新数据,最后将计算得到的数据传给JAVA层,并在界面中显示.经过摸索和调试后,找到了通过本地 ...

  9. 伪类选择器 :nth-child(even) :nth-child(odd) :nth-of-type

    属性 描述 CSS :active 向被激活的元素添加样式. 1 :focus 向拥有键盘输入焦点的元素添加样式. 2 :hover 当鼠标悬浮在元素上方时,向元素添加样式. 1 :link 向未被访 ...

  10. FZU 2219【贪心】

    思路: 因为工人造完一个房子就死了,所以如果m<n则还需要n-m个工人. 最优的方案应该是耗时长的房子应该尽快建,而且最优的是越多的房子在建越好,也就是如果当前人数不到n,只派一个人去分裂. 解 ...