我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Nodejs极简入门教程(一):模块机制

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Nodejs极简入门教程(一):模块机制

JavaScript 规范(ECMAScript)没有定义一套完善的能适用于大多数程序的标准库。CommonJS 提供了一套 JavaScript 标准库规范。Node 实现了 CommonJS 规范。

模块基础

在 Node 中,模块和文件是一一对应的。我们定义一个模块:

// circle.js

var PI = Math.PI;

 

// 导出函数 area

exports.area = function(r) {

    return PI * r * r;

}

 

// 导出函数 circumference

exports.circumference = function(r) {

    return 2 * PI * r;

};

这里将需要导出的函数加入到 exports 对象。模块的局部变量外部无法访问(例如,上例中的 PI 变量)。调用 require 载入模块 circle.js:
var circle = require('./circle.js');

console.log('The area of a circle of radius 4 is '

           + circle.area(4));

附带提及一下的是,模块中,存在一个 module 对象,表示模块本身,exports 则为 module 的属性。

模块的加载

Node 会对加载过的模块进行缓冲,避免再次加载的开销:

// test.js

console.log("I'm here");

多次加载模块 test.js

// 仅仅输出一次 "I'm here"

require('./test');

require('./test');

当加载文件没有后缀时,Node 会尝试添加后缀并加载:

1..js(JavaScript 源文件)
2..node(C/C++ 扩展模块)
3..json(JSON 文件)

模块主要有几类:

1.核心模块。核心模块已经被编译到了 Node 中,我们在其源码中的 lib 目录可以找到这些核心模块。常见的核心模块:net、http、fs 模块等

2.文件模块。文件模块通过一个相对或者绝对路径加载,例如我们上面看到的 circle.js

3.自定义模块。自定义模块位于 node_modules 目录中,我们通过 npm 安装的各种模块就放置在 node_modules 目录中

核心模块总是优先被加载,假如有一个自定义模块 http,那么加载时仍然会加载核心模块 http 而非自定义模块 http。在加载自定义模块时,首先查找当前目录下的 node_modules 目录,而后查找父目录下的 node_modules 目录,以此类推,直到根目录。

require 加载的模块不是一个文件,而是一个目录时,这样的目录被叫做包(package)。包中存在一个名为 package.json 的文件(包描述文件),例如:

{ "name" : "some-library",

  "main" : "./lib/some-library.js" }

其中 main 指出需要被加载的模块。如果包中不存在 package.json 或者 package.json 中未指定 main 模块,那么 Node 将会尝试加载 index.js、index.node、index.json。

在加载 JavaScript 模块时,被加载的模块被包裹在一个函数中:

function(module, exports, __filename, __dirname, ...) {

    JavaScript module

}

每个 JavaScript 模块访问到的 module、exports、__filename、__dirname 等实际上是通过函数参数传递进来的。由于这种包裹,才使得模块的局部变量外部无法访问。但有时候也会出现让人难以理解的问题,例如:

test1.js

exports = {

    name: 'Name5566',

}

test2.js

module.exports = {

    name: 'Name5566',

}

加载这两个模块:

var test1 = require('./test1.js');

console.log(test1.name); // undefined

var test2 = require('./test2.js');

console.log(test2.name); // Name5566

exports 作为参数传递给模块,我们通过 exports.x 自然可以给 exports 对象添加属性(或方法),但直接给 exports 赋值(例如,exports = x)仅仅是改变了形参而非实参的值,因此:

1.为 exports 添加属性时,使用 exports
2.为 exports 赋值时,使用 module.exports

按 CommonJS 的规范,一个完整的包应该包含有:

1.package.json 包描述文件
2.bin 二进制文件目录
3.lib JavaScript 代码目录
4.doc 文档目录
5.test 测试代码目录

NPM 是一个 Node 的一个包管理工具。常见用法:

查看命令的文档:

npm help install

查看命令 install 的文档。

安装一个包:

npm install redis

安装 redis 这个包。install 命令会将包安装在当前目录下的 node_modules 目录中。

移除一个包:

npm remove redis

移除 redis 这个包。remove 命令会将当前目录下的包移除掉。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Nodejs极简入门教程(一):模块机制

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

下载Word文档

猜你喜欢

Nodejs极简入门教程(一):模块机制

JavaScript 规范(ECMAScript)没有定义一套完善的能适用于大多数程序的标准库。CommonJS 提供了一套 JavaScript 标准库规范。Node 实现了 CommonJS 规范。 模块基础 在 Node 中,模块和文
2022-06-04

Nodejs极简入门教程(三):进程

Node 虽然自身存在多个线程,但是运行在 v8 上的 JavaScript 是单线程的。Node 的 child_process 模块用于创建子进程,我们可以通过子进程充分利用 CPU。范例:var fork = require('chi
2022-06-04

Nodejs极简入门教程(二):定时器

setTimeout 和 clearTimeoutvar obj = setTimeout(cb, ms);setTimeout 用于设置一个回调函数 cb,其在最少 ms 毫秒后被执行(并非在 ms 毫秒后马上执行)。setTimeout
2022-06-04

nodejs入门教程六:express模块用法示例

本文实例讲述了nodejs入门教程之express模块用法。分享给大家供大家参考,具体如下: var express = require('express'); va
2022-06-04

nodejs入门教程一:概念与用法简介

本文实例讲述了nodejs概念与用法。分享给大家供大家参考,具体如下: 一. nodejs 的特点 1.nodejs 是一个javaScript 的运行平台,采用了Google Chrome浏览器的V8引擎。 2.拥有事件驱动:当web s
2022-06-04

nodejs入门教程四:URL相关模块用法分析

本文实例讲述了nodejs入门教程之URL相关模块用法。分享给大家供大家参考,具体如下: 1.URL 模块:用于 URL 处理与解析 1)URI 与 URL : URI,是uniform resource identifier,统一资源标识
2022-06-04

nodejs入门教程二:创建一个简单应用示例

本文实例讲述了nodejs创建一个简单应用的方法。分享给大家供大家参考,具体如下: 1.创建 test.js// require 来载入 http 模块 var http = require('http'); /*** 使用 http.cr
2022-06-04

编程热搜

目录