requireJS的匿名模块和命名模块的区别和最佳实践
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的匿名模块和命名模块的区别和最佳实践的更多相关文章
- shell 匿名管道和命名管道
管道的特点:如果管道中没有数据,那么取管道数据的操作就会滞留,直到管道内进入数据,然后读出后才会终止这一操作:同理,写入管道的操作如果没有读取管道的操作,这一动作也会滞留. 1,匿名管道 匿名管道使用 ...
- 使用RequireJS并实现一个自己的模块加载器 (一)
RequireJS & SeaJS 在 模块化开发 开发以前,都是直接在页面上引入 script 标签来引用脚本的,当项目变得比较复杂,就会带来很多问题. JS项目中的依赖只有通过引入JS的顺 ...
- 使用RequireJS并实现一个自己的模块加载器 (二)
2017 新年好 ! 新年第一天对我来说真是悲伤 ,早上兴冲冲地爬起来背着书包跑去实验室,结果今天大家都休息 .回宿舍的时候发现书包湿了,原来盒子装的牛奶盖子松了,泼了一书包,电脑风扇口和USB口都进 ...
- seajs模块标识命名和解析规则
模块标识采用路径形式,但要注意与路径的区别.require.require.async的第一个参数是模块标识.而seajs.use第一个参数为文件路径. use是全局的,require是局部的.模块标 ...
- Python下OS模块重命名方法renames
在python中有很多强大的模块,其中我们经常要使用的就是OS模块,OS模块提供了超过200个方法来供我们使用,并且这些方法都是和数据处理相关的,这里介绍下重命名这个方法. OS的重命名方法是os.r ...
- requireJS使用shim注入非标准模块详解
在javascript中定义全局变量有2种方式,本质上是等价的,都是向window对象注入属性或者方法. // global.js var g_name = "aty"; wind ...
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
- Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块
Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函 ...
- NodeJS模块和ES6模块系统语法及注意点
社区模块规范: 1.CommonJS规范 规范实现者: NodeJS 服务端 Browserify 浏览器 2.AMD规范 全称 异步模块定义 规范实现者: RequireJS 浏览器 3.CMD规范 ...
随机推荐
- form表单提交时选择性传值到后台
正常情况下form表单提交会把表单内的内容提交到后台,但是如果有些内容只是作为展示或者是标记而不想传到后台,我们采用如下方法: jsp页面如下,我们不想提交id为userIdMark和pwdMark的 ...
- python读取中文
如何从文件中读取300个汉字? 看起来很简单,但很容易掉坑里了. 一开始我这么写: try: fd = codecs.open(os.path.join(settings.TEXT_CONTENT_D ...
- Intent传递对象的方法
//传递对象 Bundle bundle = new Bundle(); intent = new Intent(getApplicationContext(), YourActivity.class ...
- 算法笔记_054:Prim算法(Java)
目录 1 问题描述 2 解决方案 2.1 贪心法 1 问题描述 何为Prim算法? 此处引用网友博客中一段介绍(PS:个人感觉网友的这篇博客对于Prim算法讲解的很清楚,本文与之相区别的地方在于具 ...
- windows下at命令使用详解
T命令是Windows XP中内置的命令,它也可以媲美Windows中的“计划任务”,而且在计划的安排.任务的管理.工作事务的处理方面,AT命令具有更强大更神通的功能.AT命令可在指定时间和日期.在指 ...
- url 传值
js获取url参数值: index.htm?参数1=数值1&参数2=数值2&参数3=数据3&参数4=数值4&...... 静态html文件js读取url参数 根据获取h ...
- 一款实现浏览实事的资讯平台app
一款实现浏览实事的资讯平台app 如有转载,请注明出处:http://blog.csdn.net/u012301841/article/details/46687447 github链接:https: ...
- CodeForces 390E Inna and Large Sweet Matrix(树状数组改段求段)
树状数组仅仅能实现线段树区间改动和区间查询的功能,能够取代不须要lazy tag的线段树.且代码量和常数较小 首先定义一个数组 int c[N]; 并清空 memset(c, 0, sizeof c) ...
- 【Linux】查询文件中指定字符串的记录
语法 cat 文件 |grep 查询字符串 例如现在有文件file.dat,文件中内容如下: zhangsan Lisi wangwu123 wangwu890 zhangsan28290 现在想从文 ...
- Unity UI代码自动生成
最近在做新项目跟同事讨论UI制作方案, 这里就说下根据节点来生成UI代码, 这个工具可以根据预设生成一个分布类.目前组件还不是很完善, 自己使用需要修改部分代码 组件功能如下: 1. 自动设置引用 ...