requirejs是一个简单的javascript框架,支持模块化编码和模块的异步载入。

在requireJS中模块能够分为:匿名模块和命名模块这2种。

requireJS定义一个匿名模块

define(function(){  

	return {id:"noName"};

}); 

requireJS定义一个命名模块

define("constantModule",[],function(){  

	return {id:"hasName"};

}); 

requireJS官网上也说: It is normally best to avoid coding in a name for the module and just let the optimization tool burn in the module names。就是说推荐使用匿名模块。

jquery从1.7版本号開始支持AMD(Asynchronous Module Definition)。而且是一个命名模块,模块名就是jquery。我使用的是jquery-1.11.1.js,源代码例如以下:

if ( typeof define === "function" && define.amd ) {
define( "jquery", [], function() {
return jQuery;
});
}

如今看下使用requireJS框架载入jquery。仅仅要路径是正确的。以下代码是可以正确载入jquery的。

require.config({
baseUrl:"./../",
paths: {
jquery: 'jquery-1.11.1'
}
}); //jquery框架的模块名是jquery,这里不能改动,不然载入不成功
require(["jquery"], function(jq) { //假设载入成功,应该显示1.11.1
alert(jq().jquery); });

上面的代码可以正常载入jquery框架之后,我们略微改动下上面的代码

require.config({
baseUrl:"./../",
paths: {
jquery_name: 'jquery-1.11.1'
}
}); //jquery框架的模块名是jquery,这里不能改动,不然载入不成功
require(["jquery_name"], function(jq) { //假设载入成功,应该显示1.11.1
alert(jq().jquery); });

能够发现。这次jquery框架不能正常载入。我们不过改变了模块名而已。这里能够得出一个结论:

假设是命名模块,那么使用require载入该模块的时候。模块名一定要正确,不能任意改动

接下来我们载入自定义的匿名模块和命名模块。验证下我们的结论。

require.config({
baseUrl:"./../",
paths: {
jquery: 'jquery-1.11.1',
hehe: 'require_demo/module_noName',
constantModule: 'require_demo/module_hasName',
}
}); //jquery框架的模块名是jquery,这里不能改动,不然载入不成功
require(["jquery","hehe","constantModule"], function(jq,noName,hasName) { alert(jq().jquery);
alert(noName.id);
alert(hasName.id);
});

调整文件路径,保证上面的代码可以正常载入。接下来我们可以改动上面的代码

require.config({
baseUrl:"./../",
paths: {
jquery: 'jquery-1.11.1',
xx: 'require_demo/module_noName',
constantModule_hehe: 'require_demo/module_hasName',
}
}); //jquery框架的模块名是jquery,这里不能改动,不然载入不成功
require(["jquery","xx","constantModule_hehe"], function(jq,noName,hasName) { alert(jq().jquery);
alert(noName.id);
alert(hasName.id);
});

能够发现:xx模块能够正常载入,constantModule_hehe不能正常载入。

我们能够看到:匿名模块具有更大的灵活性。载入匿名模块的时候,名称能够任意指定

requireJS的匿名模块和命名模块的区别和最佳实践的更多相关文章

  1. shell 匿名管道和命名管道

    管道的特点:如果管道中没有数据,那么取管道数据的操作就会滞留,直到管道内进入数据,然后读出后才会终止这一操作:同理,写入管道的操作如果没有读取管道的操作,这一动作也会滞留. 1,匿名管道 匿名管道使用 ...

  2. 使用RequireJS并实现一个自己的模块加载器 (一)

    RequireJS & SeaJS 在 模块化开发 开发以前,都是直接在页面上引入 script 标签来引用脚本的,当项目变得比较复杂,就会带来很多问题. JS项目中的依赖只有通过引入JS的顺 ...

  3. 使用RequireJS并实现一个自己的模块加载器 (二)

    2017 新年好 ! 新年第一天对我来说真是悲伤 ,早上兴冲冲地爬起来背着书包跑去实验室,结果今天大家都休息 .回宿舍的时候发现书包湿了,原来盒子装的牛奶盖子松了,泼了一书包,电脑风扇口和USB口都进 ...

  4. seajs模块标识命名和解析规则

    模块标识采用路径形式,但要注意与路径的区别.require.require.async的第一个参数是模块标识.而seajs.use第一个参数为文件路径. use是全局的,require是局部的.模块标 ...

  5. Python下OS模块重命名方法renames

    在python中有很多强大的模块,其中我们经常要使用的就是OS模块,OS模块提供了超过200个方法来供我们使用,并且这些方法都是和数据处理相关的,这里介绍下重命名这个方法. OS的重命名方法是os.r ...

  6. requireJS使用shim注入非标准模块详解

    在javascript中定义全局变量有2种方式,本质上是等价的,都是向window对象注入属性或者方法. // global.js var g_name = "aty"; wind ...

  7. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  8. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

  9. NodeJS模块和ES6模块系统语法及注意点

    社区模块规范: 1.CommonJS规范 规范实现者: NodeJS 服务端 Browserify 浏览器 2.AMD规范 全称 异步模块定义 规范实现者: RequireJS 浏览器 3.CMD规范 ...

随机推荐

  1. Mybatis中动态SQL多条件查询

    Mybatis中动态SQL多条件查询 mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件. choose(when otherwise)相当于Ja ...

  2. Linux 服务器环境启动

    1.PHP 关闭php killall php-fpm php重启 /usr/local/php/sbin/php-fpm & 或者 /usr/local/php/sbin/php-fpm { ...

  3. FastDFS安装配置过程中出现错误提示"/home/yuqing/fastdfs" can't be accessed, error info: No such file or directory

    解决: mkdir -p /home/yuqing/fastdfs 这回正常了,查看启动成功与否 [root@localhost FastDHT]# ps -ef |grep track |grep ...

  4. vConsole

    说明 由于移动端项目在手机中调试时不能使用chrome的控制台,而vconsole是对pc端console的改写 使用方法 使用 npm 安装: npm install vconsole 使用webp ...

  5. html热点区域

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. static、final修饰符、内部类

    static修饰符: static修饰符能够与属性.方法和内部类一起使用,表示静态的.类中的静态变量和静态方法能够与类名一起使用.不须要创建一个类的对象来訪问该类的静态成员. class Static ...

  7. CAS 与 无锁队列

    http://coolshell.cn/articles/8239.html http://www.tuicool.com/articles/VZ3IBv http://blog.csdn.net/r ...

  8. Tomcat 监控的几种方法

    Tomcat 监控方法 方法1:.使用tomcat自带的status页 具体方法: 步骤1:修改%tomcat安装路径%\conf \tomcat-users文件,配置admin设置权限.在<t ...

  9. Com与.Net互操作

    Com与.Net互操作 .Net调用Com组件主要分为两类:静态调用及动态调用.所谓静态调用:指通过tlbimp.exe命名产生Com组件在.Net环境下的包装类,然后通过这个包装类来访问Com组件. ...

  10. SuperMap iClient如何使用WMTS地图服务

    SuperMap iClient如何使用WMTS地图服务 什么是WMTS服务 WMTS,切片地图Web服务(Web Map Tile Service)当前版本是1.0.0.该服务符合 OGC(Open ...