为什么要对define.md和module.exports进行条件检查,以及条件何时通过
why conditional check for define.amd and module.exports and when do the conditions pass ?
嘿,伙计们,我对js很陌生,基本上我正在通过在线挖掘一些js插件和阅读好书来学习实用的js。现在我正在挖掘一个插件(tinyscroll.js)的源代码,看到了以下几行代码:
if(typeof define == 'function' && define.amd) {
define(function(){ return tinyscrollbar; });
}
else if(typeof module === 'object' && module.exports) {
module.exports = tinyscrollbar;
}
else {
window.tinyscrollbar = tinyscrollbar;
}
我在很多插件中似乎都有类似的代码行,作为一个大工程师,这些代码行对我来说没有多大意义,因为我知道它是if-else语句的组合,但我不知道这些代码行会有什么用途。我有根据的猜测是(经过一点测试,通过的条件是最后一个else
。)。那么为什么会出现2个前置条件呢?。
我在谷歌上搜索了define.amd,得到了一堆链接,上面写着"异步模块定义(amd)"和以下解释:
异步模块定义(AMD)是一种JavaScript规范其定义用于定义代码模块及其依赖性的API,并在需要时异步加载它们。
但我仍然处于纠结之中。
有人能告诉我为什么会出现if和else if这两行吗?
if(typeof define == 'function' && define.amd) {
define(function(){ return tinyscrollbar; });
}
else if(typeof module === 'object' && module.exports) {
module.exports = tinyscrollbar;
}
谢谢。
这是一个老问题,但我认为它值得回答,因为当程序员第一次看到javascript库并试图弄清楚库的内部内容并理解代码时,这个问题通常会出现。你给出的序列有一些细微的变化,我喜欢的是:
if (typeof define === "function" & define.amd )
this.myLib = myLib, define(myLib);
else if (typeof module === "object" && module.exports)
module.exports = myLib;
else
this.myLib = myLib;
首先要理解的是,库可以被开发为部署在不同的环境中:在amd加载程序中,在"javascript机器"(想想node.js)中,或者在浏览器中。
因此,这段代码基本上是通过优先级模式导出javascript库的一种方式。
在我的代码中,如果定义了"define",并且我们在amd环境中,那么我将使用define导出我的库(如define(myLib)
中所示),并将其添加到"this中。这通常是你在AMD中导出模块时要做的事情。Require.js有一个很好的AMD教程,看看:http://requirejs.org/docs/whyamd.html#amd
然后,如果有"module",并且存在"module.exports",那么我会将我的库添加到module.exports中。如果您在node.js模块中部署库,通常需要这样做。您可以在此处找到module.export的入门教程:http://www.sitepoint.com/understanding-module-exports-exports-node-js/
否则,我只会将我的库添加到"this",这通常是通过网页中的<script scr="...">
标记添加.js库的情况。在这种情况下,可以使用window.myLib = myLib
,但我更喜欢使用this.myLib = myLib
。
- 为什么要对define.md和module.exports进行条件检查,以及条件何时通过
- 根据条件检查数据库结果
- javascript中的负数if else条件检查
- 这个Javascript条件检查是什么
- 用于多个条件检查的 JavaScript 语法
- 我们可以使用 onScroll 进行条件检查吗?
- 用户单击输入类型复选框时的条件检查
- JavaScript 赋值与条件检查中的代码效率和速度比较
- Jquery html() 在条件检查中
- 对 Javascript 中未定义的 .function 进行最小条件检查
- Javascript 多重或条件检查
- 检查嵌套对象是否被声明并且具有没有这么多条件检查的值
- 如何在JavaScript中的setInterval函数中添加条件检查
- 将变量数据类型解析为一个函数,该函数在JavaScript中包含对数据类型的条件检查
- 如何在创建新对象时应用条件检查并执行代码
- 如何在jquery中使用if条件检查动态值
- if语句条件检查!= "undefined"失败
- 为什么当条件检查变量变为0时while循环停止?
- IE条件检查
- Javascript:多层条件,使用"return false"停止以后的条件检查