【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞?
模块平日是指编程说话所供给的代码组织机制,应用此机制可将法度榜样拆解为自力且通用的代码单位。所谓模块化主如果解决代码瓜分、感化域隔离、模块之间的依附治理以及宣布到临盆情况时的主动化打包与处理等多个方面。
模块的长处
- 可保护性。 因为模块是自力的,一个设计优胜的模块会让外面的代码对本身的依附袈浣少越好,如许本身就可以自力去更新和改进。
- 定名空间。 在 JavaScript 琅绫擎,如不雅一个变量在最顶级的函数之外声明,它就直接变成全局可用。是以,经常不当心出现定名冲突的情况。应用模块化开辟来封装变量,可以避免污染全局情况。
- 重用代码。 我们有时刻会爱好大年夜之前写过的项目中拷贝代码到新的项目,这没有问题,然则更好的办法是,经由过程模块引用的方法,来避免反复的代码库。
CommonJS
CommonJS 最开端是 Mozilla 的工程师于 2009 年开端的一个项目,它的目标是让浏览器之外的 JavaScript (比如办事器端或者桌面端)可以或许经由过程模块化的方法来开辟和协作。
4、抛出 "not found"
在 CommonJS 的规范中,每个 JavaScript 文件就是一个自力的模块高低文(module context),在这个高低文中默认创建的属性都是私有的。也就是说,在一个文件定义的变量(还包含函数和类),都是私有的,对其他文件是弗成见的。
须要留意的是,CommonJS 规范的重要实用处景是办事器端编程,所以采取同步加载模块的策略。如不雅我们依附3个模块,代码会一个一个依次加载它们。
该模块实现筹划重要包含 require 与 module 这两个关键字,其许可某个模块对外裸露部分家口并且由其他模块导入应用。
- //sayModule.js
- function SayModule () {
- this.hello = function () {
- console.log('hello');
- };
- this.goodbye = function () {
- console.log('goodbye');
- };
- }
- module.exports = SayModule;
- //main.js 惹人sayModule.js
- var Say = require('./sayModule.js');
- var sayer = new Say();
- sayer.hello(); //hello
defined用于定义模块,RequireJS请求每个模块均放在自力的文件之中。按照是否有依附其他模块的情况分为自力模块和非自力模块。
Node.js
Node 大年夜 CommonJS 的一些创意中,创造出本身的模块化实现。因为Node 在办事端的风行,Node 的模块情势被(不精确地)称为 CommonJS。
Node.js模块可以分为两大年夜类,一类是核心模块,另一类是文件模块。
核心模块
就是Node.js标准的API中供给的模块,如fs、http、net等,这些都是由Node.js官方供给的模块,编译成了二进制代码,可以直接经由过程require获取核心模块,例如require('fs'),核心模块拥有最高的加载优先级,如不雅有模块与核心模块定名冲突,Node.js老是会加载核心模块。
文件模块
是存储为零丁的文件(或文件夹)的模块,可能是JavaScript代码、JSON或编译好的C/C++代码。在不显式指定文件模块扩大名的时刻,Node.js会分别试图加上.js、.json、.node(编译好的C/C++代码)。
加载方法
按路径加载模块
如不雅require参数一"/"开首,那么就以绝对路径的方法查找模块名称,如不雅参数一"./"、"../"开首,那么则是以相对路径的方法来查找模块。
经由过程查找node_modules目次加载模块
可以清楚地看到 Node 对每种扩大名所应用的函数及其操作:对 .js 文件应用 module._compile;对 .json 文件应用 JSON.parse;对 .node 文件应用 process.dlopen。
如不雅require参数不以"/"、"./"、"../"开首,而该模块又不是核心模块,那么就要经由过程查找node_modules加载模块了。我们应用的npm获取的包平日就是以这种方法加载的。
加载缓存
模块轮回依附
推荐阅读 【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞?
在上述课程中,我碰到了 Alon Burg——一名经验丰富的 web 开辟人员,我们刚好趣味相投。所认为了>>>详细阅读 本文标题:很全很全的JavaScript模块讲解,看了绝不后悔! 地址:http://www.17bianji.com/lsqh/40215.html 1/2 1