Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >nodejs--模块化

nodejs--模块化

作者头像
eadela
发布于 2020-02-12 15:34:17
发布于 2020-02-12 15:34:17
69500
代码可运行
举报
文章被收录于专栏:eadelaeadela
运行总次数:0
代码可运行

模块化

什么是模块?

  • 每个.js文件就是一个模块
  • 从npm上下载的一个包(可能是由多个文件组成的一个实现特定功能的包)也是一个模块
  • 任何文件或目录只要可以被Node.js通过require()函数加载的都是模块
  • 每个模块就是一个独立的作用域,模块和模块之间不会互相"污染"
  • 我们可以通过编程的方式,指定某个模块要对外暴露的内容(其实就是指定require的返回值,通过require的返回值对外暴露指定内容)。这个对外暴露内容的过程也叫"导出" module.exports

什么是包?

  • 通过package.json描述的一个文件或目录(可以理解成一个实现某个功能的1个文件或多个文件,通过package.json组织起来)
  • 包不一定能被Node.js通过require()来加载,那么就不就叫模块。比如有些包中没有设置启动文件(package.json中的main字段),就不是模块。

参考链接:https://docs.npmjs.com/how-npm-works/packages

在Node.js中模主要分为:核心模块 和 文件模块

核心模块

  • http、fs、path、url、net、os、readline、......
  • 核心模块在Node.js自身源码编译时,已经编译成二进制文件
  • 部分核心模块在Node.js进程启动的时候已经默认加载到缓存里面了

文件模块

  • 文件模块可以是:.js 模块、.node模块、*.json模块,这些都是文件模块
  • 无论从npm上下载的第三方模块还是我们自己编写的模块都是文件模块

模块化的好处

  • 模块和模块之间不会出现变量"污染",一个模块就是一个作用域。
  • 模块化开发效率高、可维护性好
  • 模块化可以做到职责分离,每个模块实现一个独立的功能

模块加载

无论是核心模块还是文件模块加载都是采用require('标识符')

核心模块的加载速度是最快的

无论是 核心模块 还是 文件模块,加载过一次后都会缓存起来,第二次加载(第二次require)的时候直接从缓存中读取即可。所以模块中的代码只在第一次加载的时候执行一次,这点要注意。

核心模块只能通过 "模块名称" 来加载,例如:require('模块名称')

文件模块可以通过 require 指定路径的方式来加载(路径可以是文件路径 或 目录)

  • require('./a/b.js') 通过指定相对路径来加载模块
  • require('/a/b.js')require('c:\a\b.js') 通过指定绝对路径来加载
  • 注意:require('')加载模块的时候,相对路径永远相对于当前模块,不受node命令执行的路径影响。

通过路径的方式加载文件模块时,文件的后缀可有可无

  • 省略后缀名后,Node.js默认会以:.js、.node、.json的顺序来加载(依次拼接不同的后缀,查找并尝试加载)。
  • 建议:始终加上后缀。

npm下载的第三方模块加载

也是通过 require('模块名称') 来加载的
第三方模块名称绝对不能与 核心模块重名,否则永远加载的都是核心模块
require('模块名称') 加载非核心模块的过程
  • 通过 console.log(module.paths); 来查看

require 加载模块时做了2件事

  1. 执行了模块中的代码
  2. 返回了模块中对外暴露的内容(可能是对象、函数等等)

module.exports 和 exports

在每个模块中module表示当前模块对象, 里面保存了当前模块对象的各种信息

module.exports 其实就是 require()加载模块时的返回值

exports 就是module.exports的一个引用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exports = module.exports;

特别注意:最终暴露给require的返回值的是:module.exports, 而不是exports

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 // To illustrate(说明) the behavior, imagine this hypothetical implementation of require(), which is quite similar to what is actually done by require():

 function require(...) {
 var module = { exports: {} };


 ((module, exports) => {
   // Your module code here. In this example, define a function.
   function some_func() {};
   exports = some_func;
   // At this point, exports is no longer a shortcut to module.exports, and
   // this module will still export an empty default object.
   module.exports = some_func;
   // At this point, the module will now export some_func, instead of the
   // default object.
 })(module, module.exports);

 
 return module.exports;
}

下载Node.js源码,打开看下

JavaScript 的严格模式—— "use strict";'use strict';

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Node入门教程(6)第五章:node 模块化(上)模块化演进
node 模块化 JS 诞生的时候,仅仅是为了实现网页表单的本地校验和简单的 dom 操作处理。所以并没有模块化的规范设计。 项目小的时候,我们可以通过命名空间、局部作用域、自执行函数等手段实现变量不冲突。但是到了大一点的项目,各种组件,各种第三方插件和各种 js 脚步融合的时候,就会发现这些技巧远远不够。 模块化的演变 为什么要有 JS 模块化呢?在浏览器中,顶层作用域的变量是全局的,所以项目稍微复杂点,如果引用的 js 非常多的时候,很容易造成命名冲突,然后造成很大意想不到的结果。 为了避免全局污染,J
老马
2018/04/16
7830
Node入门教程(6)第五章:node 模块化(上)模块化演进
前端工程\模块化
无论是前端、后端、甚至非编程领域都有模块化的概念,只是不同的领域叫法不同,不过,新技术的产生一定是有原因的:
Java_慈祥
2024/08/01
1540
前端工程\模块化
【Nodejs】838- Nodejs 模块化你所需要知道的事
我们知道,Node.js是基于CommonJS规范进行模块化管理的,模块化是面对复杂的业务场景不可或缺的工具,或许你经常使用它,但却从没有系统的了解过,所以今天我们来聊一聊Node.js模块化你所需要知道的一些事儿,一探Node.js模块化的面貌。
pingan8787
2021/01/28
5820
【Nodejs】838- Nodejs 模块化你所需要知道的事
nodejs&模块&全局对象global
方法一:开始菜单 -> 运行 -> cmd -> 回车 方法二:直接url栏中输入cmd
conanma
2022/01/04
1.4K0
30分钟学会前端模块化开发
早期的javascript版本没有块级作用域、没有类、没有包、也没有模块,这样会带来一些问题,如复用、依赖、冲突、代码组织混乱等,随着前端的膨胀,模块化显得非常迫切。
张果
2018/12/24
4.1K0
深入Node.js的模块加载机制,手写require函数
模块是Node.js里面一个很基本也很重要的概念,各种原生类库是通过模块提供的,第三方库也是通过模块进行管理和引用的。本文会从基本的模块原理出发,到最后我们会利用这个原理,自己实现一个简单的模块加载机制,即自己实现一个require。
蒋鹏飞
2020/10/15
1.2K0
Javascript模块化详解
前端的发展日新月异,前端工程的复杂度也不可同日而语。原始的开发方式,随着项目复杂度提高,代码量越来越多,所需加载的文件也越来越多,这个时候就需要考虑如下几个问题:
Clearlove
2021/03/11
6330
Javascript模块化详解
前端基础-Node模块化及CommonJS规范
第4章 Node模块化及CommonJS规范 通过前面几个章节的学习, 我们基本掌握了NodeJS编程的基础知识, 但是我们也直观的发现了一个问题,和我们之前学习浏览器编程时JS, 差异还是很大的;
cwl_java
2020/03/26
7500
浅谈 Node.js 模块机制及常见面试问题解答
Node.js 模块机制采用了 Commonjs 规范,弥补了当前 JavaScript 开发大型应用没有标准的缺陷,类似于 Java 中的类文件,Python 中的 import 机制,Node.js 中可以通过 module.exports、require 来导出和引入一个模块.
五月君
2019/08/29
1.5K0
浅谈 Node.js 模块机制及常见面试问题解答
模块加载及第三方包
一个功能就是一个模块,多个模块可以组成完整应用,抽离一个模块不会影响其他功能的运行。
梨涡浅笑
2020/10/28
2K0
模块加载及第三方包
Node基础-CommonJS模块化规范
=>开发一个项目,我们生成一个配置清单“package.json”,当我们安装第三方模块使用的时候,把安装的模块信息记录到配置清单中,这样以后不管是团队协作开发还是项目部署上线,我们都没有必要把node_modules发文件发送给别人,只需要把配置清单传递给其它人即可,其他人拿到配置清单后,按照清单中依赖项及版本号,重新安装即可(重新安装:“跑环境”)
TimothyJia
2019/11/12
6640
模块化-模块化规范
新建一个COMMONJS文件夹,然后 npm init初始化packe.json(只需要回车就可以)。 modules用于存放所有子模块。modules的同级创建一个app.js它去使用其他子模块。
用户4793865
2023/01/12
6210
前端模块化详解(完整版)
在JavaScript发展初期就是为了实现简单的页面交互逻辑,寥寥数语即可;如今CPU、浏览器性能得到了极大的提升,很多页面逻辑迁移到了客户端(表单验证等),随着web2.0时代的到来,Ajax技术得到广泛应用,jQuery等前端库层出不穷,前端代码日益膨胀,此时在JS方面就会考虑使用模块化规范去管理。 本文内容主要有理解模块化,为什么要模块化,模块化的优缺点以及模块化规范,并且介绍下开发中最流行的CommonJS, AMD, ES6、CMD规范。本文试图站在小白的角度,用通俗易懂的笔调介绍这些枯燥无味的概念,希望诸君阅读后,对模块化编程有个全新的认识和理解!
Nealyang
2019/09/29
1.3K0
前端模块化详解(完整版)
简单的复习下前端模块化相关的知识
作为前端开发,模块化我们已经耳熟能详,我们平时接触到的 ES6 的 import,nodejs中的require他们有啥区别?
前端达人
2022/04/18
4350
nodejs(二)
别人写的模块,然后发布到npm网站,我们可以使用npm工具来下载安装别人写的模块。
且陶陶
2023/04/12
1.3K0
nodejs(二)
前端入门22-讲讲模块化
现在回过头来想想,也许选择以《JavaScript权威指南》一书来作为入门有些不好,因为这本书毕竟是很早之前的,书中所讲的思想、标准也基本都只是 ES5 及那时代的相关技术。
请叫我大苏
2019/02/15
4450
前端入门22-讲讲模块化
前端模块化详解(完整版)
上例子通过jquery方法将页面的背景颜色改成红色,所以必须先引入jQuery库,就把这个库当作参数传入。这样做除了保证模块的独立性,还使得模块之间的依赖关系变得明显。
小生方勤
2019/06/01
2.2K0
收藏 | JavaScript 模块全面剖析
前端爱好者的知识盛宴 模块通常是指编程语言所提供的代码组织机制,利用此机制可将程序拆解为独立且通用的代码单元。 所谓模块化主要是解决代码分割、作用域隔离、模块之间的依赖管理以及发布到生产环境时的自动化打包与处理等多个方面。 模块的优点 可维护性。 因为模块是独立的,一个设计良好的模块会让外面的代码对自己的依赖越少越好,这样自己就可以独立去更新和改进。 命名空间。 在 JavaScript 里面,如果一个变量在最顶级的函数之外声明,它就直接变成全局可用。因此,常常不小心出现命名冲突的情况。使用模块化开发来封
用户1097444
2022/06/29
5220
收藏 | JavaScript 模块全面剖析
NodeJS学习二CommonJS规范
Node程序由许多个模块组成,每个模块就是一个文件。Node模块采用了CommonJS规范。
空空云
2018/09/27
6110
JavaScript模块化发展
简介 在最开始学习前端的时候只需要一个js文件就能玩转一个小的练手应用,但是随着自己不断的学习,ajax、jQuery等广泛应用,使得我们的代码量变得巨大,代码变得格外的混乱。现在迫切的需要我们将大段的代码分离开来。 前端最开始并没有像java中package概念以及import那样的引包工具。JavaScript源生代码是在ES6的时候才正式的引入import这个API,来调用其他文件。在这之前也同样出现了很多社区来实现模块化开发。 ---- 发展历程 注意下面会讲历史上面出现的一些类库,有一些现在已经没
pitaojin
2018/05/25
1.7K0
相关推荐
Node入门教程(6)第五章:node 模块化(上)模块化演进
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验