【第四节 Node.js模块和包】

概念:模块(Module)和包(Package)是Node.js最重要的支柱。开发一个具有一定规模的程序不可能只用一个文件,通常需要把各个功能拆分、分装、然后组合起来。模块正式为了实现这种方式而诞生,在浏览器JavaScript中,脚本模块的拆分和组合通常使用HTML的script标签来实现,Node.js提供了require函数来调用其他模块,而且模块都是基于文件,机制非常简单,模块和包的区别是透明的,因此经常不作区分。

一、模块

1.什么是模块

模块和文件是一一对应的。一个Node.js文件就是一个模块,这个文件可能是JavaScript代码、JSON或者编译过的C/C++扩展。

var http=require(‘http‘),其中http是Node.js的一个核心模块,通过require函数获取这个模块,然后使用其中的对象

2.创建及加载模块

(1)创建模块

Node.js提供了exports和require两个对象,其中exports是模块公开的接口,require用于从外部获取一个模块的接口,即获取模块的exports对象

   通过同级下两个js文件:module.js和getModule.js的实现:

      

      

      运行结果:

      

 

(2)单次加载

上面的例子有点类似创建一个对象,但实际上和对象又有本质的区别,因为require不会重复加载模块,也就是说无论调用多少次require,获取的模块都是同一个

  将⑴中getModule.js改为getModule2.js:

       

       运行结果:

       

(3)覆盖exports

有时我们只是想把一个对象封装到模块中,例如

定义模块:singleobejct.js

引入模块使用:getSingleObject.js

  A.繁琐:exports.hello=hello;

     引入:require("./singleobject").hello;

   B.简易:module.exports=hello;

      

      

      运行结果:

      

exports本身仅仅是一个普通的空对象,即{},它是专门用来声明接口

二、创建包

1.包的概念

包是在模块基础上更深一步的抽象,Node.js的包类似于C/C++的函数库或者java的类库,它讲某个独立的功能封装起来,用于发布、更新、依赖管理的版本控制。开发了npm来解决包的发布和获取需求。

2.如何创建一个包

CommonJS规范的包应该具备一下特征:

package.json必须在包的顶层目录下

二进制文件应该在bin目录下

javaScript代码应该在lib目录下

文档应该在doc目录下

单元测试应该在test目录下

Node.js对包要求并没有那么严格,只要顶层目录下有package.json,并符合基本规范即可

      

(1)作为文件夹的模块

somepackage文件夹

最简单的包,就是一个作为文件夹的模块,

创建一个文件夹 somepackage,里面有一个index.js,里面提供一个方法sayHello()

var somepackage=require(‘./somepackage‘);

somepackage.sayHello();

我们使用这种方法可以把文件夹封装成一个模块,即所谓的包。包通常是一些模块的集合,在模块的基础上提供了更高层的抽象,相当于提供了一些固定接口的函数库,通过定制package.json,我们可以创建更复杂、更完善、更符合规范的包用于发布。

      

      

(2)package.json

前面的例子,在somepackage文件夹下,我们创建一个package.json的文件,内容

{

‘main‘:‘./lib/index.js‘

}

Node.js在调用某个包时,会检查包中package.json文件的main字段,将其作为包的接口模块,如果package.json或main字段不存在,会常事寻找index.js或index.code作为包的接口

      

      package.json:

      

      

      

      注意路径和文件格式package.js:

      

      

package.json的规范属性:

name:包的名称,必须是唯一

description:包的简要说明

version:符合语义化版本识别规范的版本字符串

keywords:关键字数据,通常用于搜索

maintainers:维护者数组,每个元素要包含name、email、web可选字段

contributors:贡献者数组,格式与maintainers相同。包的坐着应该是贡献者数据的第一个元素

bugs:提交bug的地址,可以是网址或者电子邮件地址

licenses:许可证数组,每个元素要包含type和url字段

repositories:仓库托管地址数组,每个元素要包含type、url和path字段

dependencies:包的依赖,一个关联数组,由包名称和版本号组成。

     

     ⑶ 新建getPackage.js,运行结果:

      

      

      

时间: 2024-10-11 00:38:06

【第四节 Node.js模块和包】的相关文章

node.js 模块和包

Node.js 的模块和包机制的实现参照了 CommonJS 的标准,但并未完全遵循.不过两者的区别并不大,一般来说你大可不必担心,只有当你试图制作一个除了支持 Node.js之外还要支持其他平台的模块或包的时候才需要仔细研究.通常,两者没有直接冲突的地方. 模块是 Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个Node.js 文件就是一个模块,这个文件可能是 JavaScript 代码.JSON 或者编译过的 C/C++ 扩展.在前面章节的例子中,我们曾经用到了

node.js模块、包

创建模块 Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象. 让我们以一个例子来了解模块.创建一个 module.js 的文件,内容是: //module.js  var name;  exports.setName = function(thyName) {   name = thyName; };  exports.sayHello = functi

Node.js 模块和 NPM

1.模块概念 原生模块:Node.js API 提供的原生模块,原生模块在启动时已经被加载. 文件模块:动态加载模块,由原生模块 module 来实现和完成. 文件模块需要通过调用 require 方法来实现加载. Node.js 对两种模块都有缓存,不会重复开销去加载模块,只读取相应数据. 原生模块的调用 Node.js 的 API require 加载相应的 Node.js 模块,加载成功后返回一个 Node.js 模块对象. 该对象拥有该模块的所有方法和属性. var httpModule

如何发布一个自定义Node.js模块到NPM(详细步骤)

咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着,以极少的文字说明以及极少的代码书写为原则来给大家演示! 文章中上传的模块不具备任何意义! 一.封装node.js模块时的必须项 1.创建package.json 每一个完整封装的node模块,必须含有一个参数明确的package.json文件! 以下为package.json的最精简配置: { "n

node js 模块系统

Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ 扩展. 创建模块 在 Node.js 中,创建一个模块非常简单,如下我们创建一个 'hello.js' 文件,代码如下: var hello = require('./hello'); hello.w

3:Node.js模块系统

原文出自:http://www.w3cschool.cc/nodejs/nodejs-module-system.html Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ 扩展. 创建模块 在 Node.js 中,创建一个模块非常简单,如下我们创建

本地安装node.js模块

一.需求 单位电脑不让上网,但是需要用到一个node.js模块,elasticdump. 二.解决 1.自己电脑上下载模块: npm install elasticdump -g 注意:必须要加 -g,因为需要全局使用.非全局的模块复制到电脑上,还没找的方法运行模块. 2.复制拷贝 a.复制 操作1步骤会默认下载到C:\Users\T470s\AppData\Roaming\npm\node_modules\elasticdump ,复制elasticdump文件夹到U盘, 再到C:\Users

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

Node.js 模块机制采用了 Commonjs 规范,弥补了当前 JavaScript 开发大型应用没有标准的缺陷,类似于 Java 中的类文件,Python 中的 import 机制,Node.js 中可以通过 module.exports.require 来导出和引入一个模块. 在模块加载机制中,Node.js 采用了延迟加载的策略,只有在用到的情况下,系统模块才会被加载,加载完成后会放到 binding_cache 中. 面试指南 require的加载机制?,参考:模块加载机制 modu

Node.js入门:包结构

JavaScript缺少包结构.CommonJS致力于改变这种现状,于是定义了包的结构规范(http://wiki.commonjs.org/wiki/Packages/1.0 ).而NPM的出现则是为了在CommonJS规范的基础上,实现解决包的安装卸载,依赖管理,版本管理等问题.require的查找机制明了之后,我们来看一下包的细节. 一个符合CommonJS规范的包应该是如下这种结构: 一个package.json文件应该存在于包顶级目录下 二进制文件应该包含在bin目录下. JavaSc