iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >如何使用JS给通用模块写法
  • 674
分享到

如何使用JS给通用模块写法

2024-04-02 19:04:59 674人浏览 安东尼
摘要

这篇文章主要为大家展示了“如何使用js给通用模块写法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用JS给通用模块写法”这篇文章吧。模块化这个问题并非一开

这篇文章主要为大家展示了“如何使用js给通用模块写法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用JS给通用模块写法”这篇文章吧。

模块化这个问题并非一开始就存在,WWW刚刚问世的时候,htmljavascriptCSSJSCSS都是后来在网景被引进浏览器的)都是极其简单的存在,不需要模块化。

模块化的需求是规模的产物,当WEB page进化到web application,浏览器端处理的逻辑越来越复杂,展现的样式和动画越来多,对于工程的要求也就越来越高。于是模块化的需求也就产生了。模块化的意义:

  • 组件的复用,降低开发成本和维护成本

  • 组件单独开发,方便分工合作

  • 模块化遵循标准,方便自动化依赖管理,代码优化,部署

JavaScript长久以来被认为是简单的脚本语言,实际上情况早就发生来变化,在最新版的 ECMA-262(es6文档中强调JavaScript是通用编程语言而不是脚本语言。脚本语言,比如shell并不是用来完成复杂功能的,只是用来做一些自动化控制,是不需要模块化的。而用于构建复杂系统通用编程语言(比如Java)一般都有模块的实现。

ES6以前,JS语言没有模块化,如何让JS不止运行在浏览器,且能更有效的管理代码, 于是应运而生CommonJS这种规范,定义了三个全局变量:

require,exports,module
  • require用于引入一个模块

  • exports对外暴露模块的接口,可以是任何类型

  • module是这个模块本身的对象

require引入时获取的是这个模块对外暴露的接口(exports

node.js使用了CommonJS规范:

var foo = require("foo");
var out = foo.sayName();
module.exports = out;

在浏览器端,不像node.js内部支持CommonJS,如何进行模块化,于是出现了CMDAMD两种方式,其主要代表是seajsrequirejs,他们都定义了一个全局函数define来创建一个模块:

//CMD
define(function (require, exports, module) {
  var foo = require("foo");
  var out = foo.sayName();
  module.exports = out;
});

//AMD
define(["foo"], function (foo) {
  var out = foo.sayName();
  return out;
});

可以看出CMD完好的保留了CommonJS的风格, 而AMD用了一种更简洁的依赖注入和函数返回的方式实现模块化。 两者除风格不同外最大区别在于加载依赖模块的方式,CMD是懒加载,在require时才会加载依赖, 而AMD是预加载,在定义模块时就提前加载好所有依赖。

我们要实现一个模块,让它既能在seajs(CMD)环境里引入,又能在requirejs(AMD)环境中引入,当然也能在Node.js(CommonJS)中使用,另外还可以在没有模块化的环境中用script标签全局引入。

首先搞一个模块

var factory = function () {
  var moduleName = {};
  return moduleName;
};

当然return输出的可以是任何值,对象,类,其他都可以

首先满足Node.js或者ES6,我们可以通过全局变量moduleexports来判断

var factory = function () {
  var moduleName = {};
  return moduleName;
};
if (typeof module !== "undefined" && typeof exports === "object") {
  module.exports = factory;
}

CMDAMD中,我们需要提供一个工厂函数传入define来定义模块,当没有上述全局变量,且有define全局变量时,我们认为是AMDCMD,可以直接将factory传入define

var factory = function () {
  var moduleName = {};
  return moduleName;
};
if (typeof module !== "undefined" && typeof exports === "object") {
  module.exports = factory;
} else if (typeof define === "function" && (define.cmd || define.amd)) {
  define(factory);
}

注意:CMD 其实也支持 return 返回模块接口,所以两者可以通用。

然后还要满足script标签全局引入,我们可以将模块放在window上,为了模块内部在浏览器和Node.js中都能使用全局对象,我们可以做此判断:

var global = typeof window !== "undefined" ? window : global;

我们用一个立刻执行的闭包函数将所有代码包含,来避免污染全局空间,并将global对象传入闭包函数,最终变成这样:

(function (global) {
  var factory = function () {
    var moduleName = {};
    return moduleName;
  };
  if (typeof module !== "undefined" && typeof exports === "object") {
    module.exports = factory;
  } else if (typeof define === "function" && (define.cmd || define.amd)) {
    define(factory);
  } else {
    global.factory = factory;
  }
})(typeof window !== "undefined" ? window : global);

注意:闭包前加上分号是为了给前一个模块填坑,分号多了没问题,少了则语句可能发生变化。

然后,就能愉快的调用了

//Node.js
var myModule = require('moduleName')

//Seajs
define(function(require,exports,module){
  var myModule = require('moduleName')
})

// Browser global
<script src='moduleName.js'></script>

以上是“如何使用JS给通用模块写法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网JavaScript频道!

--结束END--

本文标题: 如何使用JS给通用模块写法

本文链接: https://www.lsjlt.com/news/79577.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用JS给通用模块写法
    这篇文章主要为大家展示了“如何使用JS给通用模块写法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用JS给通用模块写法”这篇文章吧。模块化这个问题并非一开...
    99+
    2024-04-02
  • js如何使用短路写法
    这篇文章主要介绍js如何使用短路写法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Null、Undefined、’’ 空值检查有时要检查我们为值引用的变量是否不为null或Undefined 或 ''...
    99+
    2023-06-08
  • 如何通过numba模块给Python代码提速
    这篇文章将为大家详细讲解有关如何通过numba模块给Python代码提速,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。简介:numba是Anaconda公司开发的针对Python的开源JIT编译器,用于提...
    99+
    2023-06-26
  • 如何使用C/C++编写node.js原生模块
    这篇文章主要为大家展示了“如何使用C/C++编写node.js原生模块”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用C/C++编写node.js原生模块...
    99+
    2024-04-02
  • 如何用paramiko模块写发版机
    本文小编为大家详细介绍“如何用paramiko模块写发版机”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何用paramiko模块写发版机”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。说明:为了安全,本文敏感信...
    99+
    2023-06-04
  • Perl如何使用模块
    这篇文章主要为大家展示了“Perl如何使用模块”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Perl如何使用模块”这篇文章吧。Perl模块1、创建Perl模块Perl5中用包来创建Perl模块,...
    99+
    2023-06-17
  • ECMAScript模块如何使用
    这篇“ECMAScript模块如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ECMAScript模块如何使用”文章吧...
    99+
    2023-06-27
  • Python中模块的使用--binascii模块用法
    目录binascii模块用法binascii模块和进制转换笔记 Python内置函数binascii模块用法 binascii模块用于在二进制和ASCII之间转换 >...
    99+
    2024-04-02
  • node中http模块和url模块如何使用
    这篇“node中http模块和url模块如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这...
    99+
    2024-04-02
  • python如何引用自己写的模块
    要引用自己写的模块,可以按照以下步骤进行操作:1. 在你的模块所在的文件夹中创建一个空白的`__init__.py`文件。这个文件是...
    99+
    2023-09-25
    python
  • python如何使用import模块
    这篇文章给大家分享的是有关python如何使用import模块的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。import模块在Python经常使用import声明,以使用其他模块...
    99+
    2024-04-02
  • Python pluggy模块如何使用
    本篇内容介绍了“Python pluggy模块如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 pluggy 简介plug...
    99+
    2023-06-30
  • Node.js模块Modules如何使用
    本篇内容介绍了“Node.js模块Modules如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!模块模块就是一个声明了装饰器@Modu...
    99+
    2023-07-06
  • es6模块化如何使用
    本篇内容介绍了“es6模块化如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!天下苦 CommonJs 久矣Es Module 的独特之...
    99+
    2023-07-05
  • Python decimal模块如何使用
    这篇文章主要介绍“Python decimal模块如何使用”,在日常操作中,相信很多人在Python decimal模块如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python&...
    99+
    2023-07-05
  • 如何使用python xml模块
    本篇内容主要讲解“如何使用python xml模块”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用python xml模块”吧!一、xml简介xml是实现不同语言或程序之间进行数据交换的协...
    99+
    2023-06-07
  • python如何使用itertools模块
    这篇文章主要为大家展示了“python如何使用itertools模块”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何使用itertools模块”这篇文章吧。高效的itertools...
    99+
    2023-06-27
  • Python async模块如何使用
    这篇文章主要介绍“Python async模块如何使用”,在日常操作中,相信很多人在Python async模块如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python ...
    99+
    2023-07-05
  • python如何使用timeit模块
    这篇文章给大家分享的是有关python如何使用timeit模块的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。timeit模块timeit 模块提供了测量 Python 小段代码执行时间的方法,可以在命令行界面直接...
    99+
    2023-06-17
  • 如何使用Nodejs-cluster模块
    这篇文章主要为大家展示了“如何使用Nodejs-cluster模块”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用Nodejs-cluster模块”这篇文章吧。基本用法Node.js默认单...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作