当前位置:首页 > 日记 > 正文

Node.js 的模块知识汇总

Node.js 的模块知识汇总

在写 Node.js 应用程序的时候,你确实可以把所有代码放在巨大原 index.js 文件中,不在乎你的应用程序会变得多大多复杂。Node.js 解释器不会在意这个事情。但在代码组织方面,你很快就会陷入混乱,不能理解代码,而且难以调试。所以,作为一个人,你应该关心代码的结构。这就是使用模块的原因。

你可以把 Node.js 模块当作 JavaScript 库 —— 是整体代码中你想放在一起的某个部分(比如,函数集),你会想把这部分代码相对独立于代码库中的其它部分,可以把事情区分清楚。

就们我们把袜子放在衣柜一个抽屉,把衬衣放在衣柜的另一个抽屉 —— 我们可以把它们组成一天的着装 ——在代码库中,我们将不同的部分保存在不同的模块中,然后将它们有条不紊地合并成一个应用程序。

内建模块

即使我们不创造任何 Node.js 模块,也有模块可用,因为 Node.js 环境提供了内建模块。我们已经遇到过一个模块,就是在博客中寻找如何使用内建的 SHATWG URL 解析器的时候。

在我们自己的代码文件中,我们需要使用已经存在但是在别处声明的代码 —— 这种情况下,URL类是 Node.js 内置模块url中的一部分。

var URL = require('url').URL;

require('url')让我们可以访问url模块。这个模块定义在哪里,是怎么定义的,对我们来说完全不透明 —— 我们所需要知道的只是它的名称 ——url—— 以及它公开的属性,比如URL。

其它内建的模块直接导出我们需要的属性(通常是 JavaScript 对象)。以http模块为例:

var http = require('http');http.createServer(function (req, res) {  res.writeHead(200, {'Content-Type': 'text/html'});  res.end('Hello World!');}).listen(8080);

这里,请求http模块让我们可以直接访问http对象,我们可以直接使用其方法,比如createServer。

Node 初学者这本书讲述了如何使用 Node.js 写一个完整的 Web 服务器,它就是使用的内建http模块。

外部模块

内建模块随 Node.js 发布,它可以解决很多开发问题,而不需要为每个应用发明新的轮子,但是真正促进 Node.js 编程能力的是由来自 Node.js 社区的开源模块构建起来的庞大生态系统。这些模块也可以集成到我们的代码库中,但是由于它们不是内置的,并且不会随每次安装Node.js 一起安装,所以只在是我们的代码中require是不够的。我们需要先安装包含外部模块的代码库,由于 NPM,Node Package Manager(Node 包管理器) 的存在,这很容易。

请参博客文章,它以如何使用 async 库为例来介绍如何使用外部模块。

此外,Node工匠书还使用了一个章节来介绍了使用 NPM 的细节。

创建你自己的模块

内建模块和外部模块都是别人提供的,但它们不会妨碍你创建自己的 Node.js 模块。

下面的例子创建了一个名为myRandom的模块,它会提供了一个辅助函数,用于返回 0 到 10 之间的数。

文件myRandom.js:

function getRandom(min, max) {   return Math.random() * (max - min) + min;}exports.between1and10 = function() {   return getRandom(1, 10);};

你应该把代码放在自己的myRandom.js文件中。由于此文件存在,并通过exports向外提供属性,另一个文件index.js可以使用导出的功能:

文件index.js:

var myRandom = require('./myRandom.js');console.log(myRandom.between1and10());

require再次发挥作用,它让本地myRandom模块中导出的属性生效 —— 在这里是指between1and10函数。

注意:虽然模块系统允许公开模块的功能,但它也允许隐藏在模块之外不会用到的功能,只要不通过exports导出就好。即使index.js文件请求了myRandom.js文件,它也不能访问未导出的getRandom函数:

var myRandom = require('./myRandom.js');console.log(myRandom.getRandom(5, 99));

这会导致 TypeError: myRandom.getRandom is not a function.

通过将实现细节隐藏在模块中,只暴露出需要在其它代码中使用的部分,可以很好的组织你的代码。

相关文章

word怎么设置论文页面标准格式

word怎么设置论文页面标准格式

方法,页面设置,设置,论文,页面,  毕业论文,总是让人很头疼的。尤其是老师给的各种格式。现在,根据小编的经验,来给大家一点在毕业论文页面设置方面的小经验,为大家减轻一点那些格式要求烦恼。接下来小编举例简单的例子告诉大家word2010论文页…

ps怎么给添加动感效果?

ps怎么给添加动感效果?

动感,效果,电脑软件,ps,ps 大家应该都会想到P图,PS其实功能很强大,现在分享一个pS做简单动图的例子,勿喷!!!!新手。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、打开PS-标题栏-文件-新建 (热键CTRL+N),修改…

TCP关闭问题详细介绍

TCP关闭问题详细介绍

详细介绍,电脑软件,TCP,摘要: 三次握手,四次挥手意思是tcp建立连接时需要三次交互来完成,A发起连接A --- SYN --> BA <-- SYN + ACK --- B (1)A --- ACK --> B而关闭tcp连接需要四次交互,A发起关闭A --- FIN --> BA <-- ACK --- B (1)A <-…

如何用Powerpoint制作字幕式片头片

如何用Powerpoint制作字幕式片头片

字幕,片头,片尾,如何用,电脑软件,  电影和电视剧中,制作者们喜欢挑选片中精彩镜头放在片头,在屏幕上拉动出现。片尾则通常用移动字幕的形式给出演员、制作者等的姓名及相关资料。以下是小编为您带来的关于用Powerpoint制作字幕式片头片尾,希…

webpack2.0配置postcss-loader的方

webpack2.0配置postcss-loader的方

方法,配置,电脑软件,loader,postcss,本文介绍使用webpack2.0配置postcssloader,分享给大家。具体如下:安装postcss-loadernpm install --save-dev postcss-loader然后配置webpack.config.js{ test:/\.css$/, use:[ 'style-loader','css-…

input type=file 选择并且实现预览

input type=file 选择并且实现预览

选择,实例,效果,电脑软件,input,通过<input />标签,给它指定type类型为file,可提供文件上传;accept:可选择上传类型,如:只要传图片,且不限制图片格式,为image/*;multiple:规定是否可以选择多个文件;规定只可上传图片,且可以选择多个文件<input type="f…

关于Ajax中通过response在后台传递

关于Ajax中通过response在后台传递

传递数据,后台,电脑软件,Ajax,response,这是js代码:var System = { getHttpRequest: function(url, callback, options) { if (url.length < 0) return; var option = { url: url, type: "get", dataType: "…

JS继承与闭包及JS实现继承的三种方

JS继承与闭包及JS实现继承的三种方

继承,闭包,三种,方式,电脑软件,前 言在之前的两篇博客中,我们详细探讨了JavaScript OOP中的各种知识点(JS OOP基础与JS 中This指向详解 、 成员属性、静态属性、原型属性与JS原型链)。今天我们来继续探讨剩余的内容吧。我们都知道,面向对象的…

Vue中定义全局变量与常量的各种方

Vue中定义全局变量与常量的各种方

全局变量,常量,详解,定义,方式,前言本文主要跟大家介绍了关于Vue定义全局变量与常量的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:我想要定义一个变量, 在项目的任何地方都可以访问到, 不需要每一次使用的时候, 都…

wps表格怎么使用函数wps表格的函数

wps表格怎么使用函数wps表格的函数

函数,使用教程,表格,电脑软件,wps,  由于函数采用模块化的设计,可以完成一定的功能,因此在WPS表格中具有广泛的应用。今天小编与各位新手一起分享一下WPS表格中函数的使用方法。希望对你有帮助!wps表格的函数使用教程选中要输入公式的单元格…

js es6系列教程 - 基于new.target

js es6系列教程 - 基于new.target

教程,语法,属性,系列,电脑软件,es5的构造函数前面如果不用new调用,this指向window,对象的属性就得不到值了,所以以前我们都要在构造函数中通过判断this是否使用了new关键字来确保普通的函数调用方式都能让对象复制到属性function Person( uN…

PS合成非常高端的三维教堂PARTY海

PS合成非常高端的三维教堂PARTY海

教堂,海报,电脑软件,PS,PARTY,这篇教程教的PS图片合成学习者们使用PS合成高大上教堂PARTY海报,教程制作出来的海报非常漂亮,非常高端,乍一看很多人会以为是使用三维软件制作的,其实并不是,这都是通过PS找素材和合成的,推荐一下,喜欢的就给我好评啦…