首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Node.js 模块系统的原理、使用方式和一些常见的应用场景

模块的分类在 Node.js ,模块可以分为两大类:核心模块和文件模块。核心模块核心模块Node.js 官方提供的模块,可以直接通过 require 方法引入并使用,无需提前安装。...文件模块对于文件模块,Node.js 会按照以下顺序查找:如果导入的一个路径(以 ./ 或 ../ 开头),则将其视为相对路径,并在当前文件所在目录下寻找模块文件。...如果导入的一个绝对路径(以 / 开头),则将其视为绝对路径,并在该路径下寻找模块文件。如果导入的不是一个路径,则 Node.js 会按照一定的规则在各级 node_modules 文件查找模块。...模块的缓存Node.js 会对已经加载的模块进行缓存,以提高性能。这意味着,如果一个模块被多次加载,只会执行一次,并返回同一个对象。模块的循环依赖两个模块相互依赖,可能会导致循环依赖的问题。...数据库操作通过数据库操作封装成模块,可以在不同的地方重用这些模块。例如,在不同的路由处理器中使用相同的数据库查询逻辑。文件操作文件操作 Node.js 的一个常见应用场景。

23630

JavaScript 编程精解 中文第三版 二十、Node.js

由于 Node.js 文件视为 CommonJS 模块,因此main.js可以从reverse.js获取导出的reverse函数。 我们可以看到我们的工具执行结果如下所示。...这里我们想知道的,该文件一个目录还是普通文件,isDirectory方法可以告诉我们答案。 我们使用readdir来读取目录文件列表,并将其返回给客户端。...我们再次使用pipe来将可读流的数据移动到可写流,在本例请求的数据移动到文件。...它将其第一个命令行参数视为正则表达式,并将任何其他参数视为要搜索的文件。 它应该输出内容与正则表达式匹配的,任何文件的名称。...它有效将其扩展,以便当其中一个参数目录,它将搜索该目录及其子目录的所有文件。 按照你认为合适的方式,使用异步或同步文件系统函数。

2.1K40
您找到你想要的搜索结果了吗?
是的
没有找到

Node.js 的ES模块现状

新的 ECMAScript(ES)模块与以前的语言版本不完全兼容,因此使用的 JavaScript 引擎需要知道每一个文件“旧” JavaScript 代码还是“新”模块。...新的 ES 模块也是由它们的路径定义的,但是 Node.js 如何知道正在加载的模块遗留的 CommonJS 还是 ES 模块的呢?...模块必须动态加载,会变得更加复杂。CommonJS 模块中看起来微不足道的东西变得越来越难以异步: 1if (condition) { 2 myOtherModule = require('....重要的,现在可以用 package.json 文件,它包含了诸如包的唯一名称之类的信息。现在使用JSON 格式扩展了一个名为 type 的新属性。...同样指定的路径目录,行为会发生变化:import'./directory' 不会在指定的文件查找 index.js 文件,而是抛出一个错误,这是 Node.js 的标准情况。

1.4K40

Node.js基础常用知识点全总结

一个 JavaScript 文件就是一个模块,在模块文件定义的变量和函数默认只能在模块文件内部使用,如果需要在其他文件使用,必须显式声明将其进行导出。...项目中已有 package-lock.json 文件,在安装项目依赖,将以该文件为主进行解析安装指定版本依赖包,而不是使用 package.json 来解析和安装模块。...在 Node.js 读取文件最简单的方式使用 fs.readFile() 方法,向其传入文件路径、编码、以及会带上文件数据(以及错误)进行调用的回调函数: const fs = require(...Buffer二进制缓冲区 Buffer 对象用于表示固定长度的字节序列,可以 buffer 视为存储二进制数据的数组,每个整数代表一个数据字节。... Buffer 内存被读取,如果内存存在较旧的数据,则可以被访问或泄漏。 这就是使 allocUnsafe 不安全的原因,在使用必须格外小心。

2.8K30

Node.js 安全最佳实践

避免在可变时间操作中使用密钥,包括密钥分支,并且攻击者可能位于同一基础设施(例如同一台云机器)上使用密钥作为内存索引。...恶意第三方模块 目前,在 Node.js ,任何包都可以访问网络、文件系统,他们可以任何数据发送到任何地方。...所有运行在 Node.js 进程的代码都能够通过使用 eval() 加载和运行额外的任意代码。所有具有文件系统写访问权限的代码都可以通过写入加载的新文件或现有文件来实现相同的目的。...使用 npm ci 代替 npm install,这将强制执行 lockfile,避免它与 package.json 文件之间的不一致会导致错误 仔细检查 package.json 文件依赖项名称的错误...inspector 协议 NPM 敏感信息泄漏 在包发布期间,包含在当前目录的所有文件文件夹都会被推送到 npm 注册表,如果我们的开发目录包含了一些敏感信息,它们都会被泄露出去。

2.2K20

node.js笔记

】 注意:Node.js 环境没有 BOM 和 DOM tips1:vscode终端可以使用快捷键 【ctrl + ` (` esc下面的那个键)】, tips2:输入node 后,后面的文件名,...运行时使用的 ECMAScript 模块标准,在 Nodejs 每个文件都被视为一个单独的模块 7、ECMAScript 标准 - 默认导出和导入 1、默认标准使用: 1)导出:...默认 index.js 文件,或者 main 属性指定的文件 10、npm - 软件包管理器 npm Node.js 标准的软件包管理器 在 2017 年 1 月,npm 仓库中就已有超过...) 2、下载软件包 : npm i 软件包名称 3、使用软件包 项目中只有 package.json 没有 node_modules 怎么办?...1)概念:每个文件当做一个模块,独立作用域,按需加载 2)使用:采用特定的标准语法导出和导入进行使用 2、CommonJS 标准:一般应用在 Node.js 项目环境

8710

如何在Node.js读取和写入JSON对象文件

例如,您开始创建新的RESTful API数据存储在本地文件系统上可能一个不错的选择。 您可以跳过数据库设置,而是JSON数据保存到文件。...您可以使用JSON.stringify()方法JSON对象转换为其字符串表示形式,然后使用文件系统fs模块·其写入文件。...这是一个使用fs.writeFile()方法JSON对象异步写入文件的示例: const fs = require('fs'); // create a JSON object const user...if (err) { throw err; } console.log("JSON data is saved."); }); JSON对象漂亮地打印到文件,可以将其他参数传递给...从文件读取JSON 要将文件JSON数据检索并解析回JSON对象,可以使用fs.readFile()方法和JSON.parse()进行反序列化,如下所示: const fs = require('fs

21.3K50

Node.js逐行读取文件【纯技术】

介绍 在计算机科学文件一种资源,用于在计算机的存储设备离散地记录数据。Node.js不会以任何方式覆盖它,并且可以与文件系统中被视为文件的任何文件一起使用。...由于该readline方法应随流一起提供,因此我们必须首先使用另一个本机模块-来创建它fs: const fs = require('fs'); 下一步使用以下createInterface()函数创建将从流读取的对象...在我们的情况下,我们不想使事情复杂化,而只是将其打印到控制台上。 在线阅读器 在详细说明了如何使用本机Node.js模块逐行读取文件之后,让我们使用npm 的开源行读取器模块来查看它的较短版本。...由于它是一个非本地模块,因此我们需要确保已使用正确的方式初始化了npm项目npm init,然后进行安装: $ npm install --save line-reader 这将安装依赖项并将其添加到package.json...它会重置指针并从文件的最开始开始读取过程。 注意:仅在未达到结尾才起作用。 常见错误 在Node.js逐行读取文件,常见的错误整个文件读取到内存,然后通过换行符分割其内容。

7.7K20

这里有一份Node.js入门指南和实践,请注意查收

" // 错误: Unexpected token o in JSON at position 1 数据可以从流读取,可读流会使用 EventEmitter API 来通知应用程序 (比如例子的...访问主模块 Node.js 直接运行一个文件require.main 属性会被设置为 module 本身。...所以,解析到其它文件,就不能保证 require('index')总是会返回确切的同一对象。...文件模块 加载文件模块,如果按文件名查找未找到。那么 Node.js 会尝试添加.js 和.json 的扩展名,并再次尝试查找。如果仍未找到,那么会添加.node 扩展名再次尝试查找。...路径解析 加载的文件模块使用'/'前缀,则表示绝对路径。如,require('/home/null/index.js')会加载/home/null/index.js 文件。 而使用'.

3.5K30

深入学习 Node.js Module

Node.js Module Node.js 有一个简单的模块加载系统。 在 Node.js 文件和模块一一对应的(每个文件视为一个独立的模块)。...使用方式二 exports = { id: 1 } 的方式会改变 exports 变量的指向,这时与module.exports 属性指向不同的变量,而当我们导入某个模块导入 module.exports...其中 .js 和 .json 文件,相信大家都很熟悉了,.node 后缀的文件 Node.js 的二进制文件。然而为什么 require 函数,只支持这三种文件格式呢?..._cache; return require; } 通过以上我们发现,模块内的 require 函数对象,在导入模块,最终还是通过调用 Module 对象require() 方法来实现模块导入...以UTF-16或UTF-32来UCS/统一码字符所组成的字符串编码,这个字符被用来标示其字节序。它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的记号。

1K30

深入Node.js的模块加载机制,手写require函数

Node.js里面如果要导出某个内容,需要使用module.exports,使用module.exports几乎可以导出任意类型的JS对象,包括字符串,函数,对象,数组等等。...和module.exports干的事情并不复杂,我们先假设有一个全局对象{},初始情况下空的,当你require某个文件,就将这个文件拿出来执行,如果这个文件里面存在module.exports,运行到这行代码...加载顺序 加载顺序指当我们require(X),应该按照什么顺序去哪里找X,在官方文档上有详细伪代码,总结下来大概这么个顺序: 优先加载内置模块,即使有同名文件,也会优先使用内置模块。....json:.json文件一个普通的文本文件,直接用JSON.parse将其转化为对象返回就行。 .node:.node文件C++编译后的二进制文件,纯前端一般很少接触这个类型。.../b.js'); console.log('在 main ,a.done=%j,b.done=%j', a.done, b.done); main.js 加载 a.js , a.js 又加载

1.1K51

2021了,真的不要再说 Node.js 一门编程语言了「建议收藏」

要求系统运行某一个应用程序又没有告诉它程序的完整路径,此时操作系统会先在当前文件查找应用程序,如果查找不到就会去系统环境变量 PATH 中指定的路径查找。...一个 JavaScript 文件就是一个模块,在模块文件定义的变量和函数默认只能在模块文件内部使用,如果需要在其他文件使用,必须显式声明将其进行导出。...exports.endPoint = url; exports.log = log 在导入模块最终导入的 module.exports 对象,所以在使用 exports 对象添加导出成员不能修改引用地址...3.5 使用 Node.js 软件包 在引入第三方软件包,在 require 方法不需要加入路径信息,只需要使用软件包的名字即可,require 方法会自动去 node_modules 文件夹中进行查找...所有软件包安装到应用本地现在最推荐的做法,一可以防止软件包的版本冲突问题,二其他开发者在恢复应用依赖可以恢复全部依赖,因为软件包安装到本地后会被 package.json 文件记录,其他开发者在运行项目不会因为缺少依赖而报错

2.3K30

使用 Node.js 实现文件流转存服务

但是类似这样架构的服务有一个软肋—— 对于超大的文件,性能会明显不足。 转存服务在下载文件的时候,二进制会先写入本地硬盘上的缓存文件文件下载完成之后,再进行上传操作。...分片上传一般一个大文件划分成多个分片,然后通过并行或者串行的方式依次上传至服务器端。 如果文件上传失败,只需要再重新上传失败的分片即可。 什么文件流转存服务 ?...Node.js的stream模块可以很方便的进行文件的处理,Readable的Stream在接收到数据之后,会不断的触发data事件。...Node.js使用Buffer对象来描述一块数据对象,上一节每次data事件触发的时候,回调函数的第一个参数的值就是一个Buffer对象。...为了验证文件合法性,我在测试server上专门实现了一个接口,传入上传附带的filename参数,就能按照分片顺序多个分片合并,并返回整个文件的md5值。

3.3K10

浅谈 Node.js 模块机制及常见面试问题解答

,参考正文“模块循环引用问题1” a模块的undeclaredVariable变量在b.js是否会被打印?,参考正文“模块循环引用问题2” 模块在require的过程同步还是异步?...,参考正文模块加载机制 “文件模块“ 模块的分类 系统模块 C/C++ 模块,也叫 built-in 内建模块,一般用于 native 模块调用,在 require 出去 native 模块,在开发中使用的...模块加载机制 面试可能会问到能说下require的加载机制吗? 在 Node.js 模块加载一般会经历 3 个步骤, 路径分析、 文件定位、 编译执行。..., .json、 .node最好还是加上文件的扩展名。...然后 b.js 完成加载之后 exports 对象提供给了 a.js 模块 问题2,因为 undeclaredVariable 一个未声明的变量,也就是一个挂在全局的变量,那么在其他地方当然可以拿到的

1.4K20

Node.js学习笔记——模块加载机制及npm指令详解

的模块化 Node.js 模块的分类 Node.js 根据模块来源的不同,模块分为了 3 大类 内置模块(内置模块Node.js 官方提供的,例如 fs、path、http 等) 自定义模块...对象模块内的成员共享出去,供外界使用 ●外界用 require() 方法导入自定义模块,得到的就是 module.exports 所指向的对象,而一般默认该属性{}即空对象。...require() 方法用于加载模块 3.npm与包 Node.js 的第三方模块又叫做包 不同于 Node.js 的内置模块与自定义模块,包由第三方个人或团队开发出来的,免费供所有人使用。...内置模块的加载机制 ​ ●内置模块的加载优先级最高(第三方模块和内置模块同名) 自定义模块的加载机制 ●使用 require() 加载自定义模块,必须指定以 ./ 或 …/ 开头的路径标识符。...●在使用 require() 导入自定义模块,如果省略了文件的扩展名,Node.js 会按顺序分别尝试加载以下的文件 ​ 按照确切的文件名进行加载 ​ 补全 .js 扩展名进行加载 ​ 补全 .json

1.1K20

浅谈 Node.js 模块机制及常见面试问题解答

,参考正文“模块循环引用问题1” a模块的undeclaredVariable变量在b.js是否会被打印?,参考正文“模块循环引用问题2” 模块在require的过程同步还是异步?...,参考正文模块加载机制 “文件模块“ 模块的分类 系统模块 C/C++ 模块,也叫 built-in 内建模块,一般用于 native 模块调用,在 require 出去 native 模块,在开发中使用的...模块加载机制 面试可能会问到能说下require的加载机制吗? 在 Node.js 模块加载一般会经历 3 个步骤, 路径分析、 文件定位、 编译执行。..., .json、 .node最好还是加上文件的扩展名。...然后 b.js 完成加载之后 exports 对象提供给了 a.js 模块 问题2,因为 undeclaredVariable 一个未声明的变量,也就是一个挂在全局的变量,那么在其他地方当然可以拿到的

73820
领券