模块(Module)和包(Package)
在浏览器 JavaScript 中,脚本模块的拆分和组合通常使用 HTML 的script 标签来实现。Node.js 提供了 require 函数来调用其他模块,而且模块都是基于文件的。
Node.js 的模块和包机制的实现参照了 CommonJS 的标准,但并未完全遵循。不过两者的区别并不大,一般来说你大可不必担心,只有当你试图制作一个除了支持 Node.js之外还要支持其他平台的模块或包的时候才需要仔细研究。
模块是 Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个Node.js 文件就是一个模块,这个文件可能是 JavaScript 代码、JSON 或者编译过的 C/C++ 扩展。
1.创建模块
Node.js 提供了 exports 和 require 两个对
象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获
取模块的 exports 对象。
//module.js创建模块 var name; exports.setName=function(thyName){ name = thyName; } exports.sayHello=function(){ console.error("hello "+name); } //getmodule.js使用模块 var myModule = require("./module"); myModule.setName("流浪鱼"); myModule.sayHello();
在以上示例中,module.js 通过 exports 对象把 setName 和 sayHello 作为模块的访
问接口,在 getmodule.js 中通过 require('./module') 加载这个模块,然后就可以直接访
问 module.js 中 exports 对象的成员函数了。
创建包
Node.js 的包是一个目录,其中包含一个 JSON 格式的包说明文件 package.json。严格符
合 CommonJS 规范的包应该具备以下特征:
package.json 必须在包的顶层目录下;
二进制文件应该在 bin 目录下;
JavaScript 代码应该在 lib 目录下;
文档应该在 doc 目录下;
单元测试应该在 test 目录下。
Node.js 对包的要求并没有这么严格,只要顶层目录下有 package.json,并符合一些规范
即可。当然为了提高兼容性,我们还是建议你在制作包的时候,严格遵守 CommonJS 规范。
//somepackage/index.js exports.hello=function(){ console.log("Hello"); } //getpackage.js var somepackage = require("./somepackage"); somepackage.hello();
package.json 是 CommonJS 规定的用来描述包的文件,完全符合规范的 package.json 文
件应该含有以下字段。
name:包的名称,必须是唯一的,由小写英文字母、数字和下划线组成,不能包含
空格。
description:包的简要说明。
version:符合语义化版本识别①规范的版本字符串。
keywords:关键字数组,通常用于搜索。
maintainers:维护者数组,每个元素要包含 name、email (可选)、web (可选)
字段。
contributors:贡献者数组,格式与maintainers相同。包的作者应该是贡献者
数组的第一个元素。
bugs:提交bug的地址,可以是网址或者电子邮件地址。
licenses:许可证数组,每个元素要包含 type (许可证的名称)和 url (链接到
许可证文本的地址)字段。
repositories:仓库托管地址数组,每个元素要包含 type (仓库的类型,如 git )、
url (仓库的地址)和 path (相对于仓库的路径,可选)字段。
dependencies:包的依赖,一个关联数组,由包名称和版本号组成。
下面是一个完全符合 CommonJS 规范的 package.json 示例:
{ "name": "mypackage", "description": "Sample package for CommonJS. This package demonstrates the required elements of a CommonJS package.", "version": "0.7.0", "keywords": [ "package", "example" ], "maintainers": [ { "name": "Bill Smith", "email": "bills@example.com", } ], "contributors": [ { "name": "BYVoid", "web": "http://www.byvoid.com/" } ], "bugs": { "mail": "dev@example.com", "web": "http://www.example.com/bugs" }, "licenses": [ { "type": "GPLv2", "url": "http://www.example.org/licenses/gpl.html" } ], "repositories": [ { "type": "git", "url": "http://github.com/BYVoid/mypackage.git" } ], "dependencies": { "webkit": "1.2", "ssl": { "gnutls": ["1.0", "2.0"], "openssl": "0.9.8" } } }
相关推荐
主要介绍了Python中模块(Module)和包(Package)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
linux模块Module简析,很经典,很有用,推荐推荐
Joomla的模块module 开发教程.pdfJoomla的模块module 开发教程.pdf
模块和包:生与死 PyCon'2015 上的教程演示。 2015 年 4 月 9 日。蒙特利尔。 大卫·比兹利 (@dabeaz), ://www.dabeaz.com 本教程假设使用 Python 3.4 或更新版本。 第 8 节和第 9 节中的某些示例需要使用 Python...
Verilog模块moduleVerilog模块moduleVerilog模块moduleVerilog模块moduleVerilog模块moduleVerilog模块module
4G模块module开发资料合集包括MC20 SIM7600 EC20 R2.0 ME909-821 U8300C 软硬件参考设计资料: 01 Software 02 Hardware 04 SPEC&PPT 05 Driver EC20 R2.0_Mini_PCIe-C Quectel_SC20_硬件设计手册_V1.1.pdf Guide to...
前端开源库-es6-module-packagerES6模块打包机,ES6模块链接工具。
四年级英语下册第六模块Module6Music教学设计.docx
安装 “对话框取消”、“HiddenCore Module”、“RootCloak”三个模块。进行隐藏xposed。
python中的模块(module)是管理python应用程序的工具,而包(package)是管理模块的工具.在管理和使用包的时候需要注意,调用注意设置文件的相对路径,以保证程序的可移植性. 下面的小程序主要应用os和sys模块中的一些...
Flex基于Module模块的开发文档主要介绍涵盖基本所有: 1、模块化的定义与原理; 2、模块化的作用; 3、模块化的优点; 4、flex与模块通信,直接调用模块(module)方法及示例代码; 5、flex基本控件用法及示例代码;...
Maven-module项目可以把较大的项目按照功能或者层次进行横向与纵向的模块化分割。项目结构是父项目-子模块的结构进行组织。整个项目以pom型项目进行组织,其模块可以是jar项目,也可以是war项目,也可以pom项目。...
添加nginx-http-flv-module模块并重新编译后的nginx(windows版)
Python 解决由于未安装模块而导致的 ”No module named ”问题 Python源码Python 解决由于未安装模块而导致的 ”No module named ”问题 Python源码Python 解决由于未安装模块而导致的 ”No module named ”问题 ...
Linux中的可加载模块(Module)分析
本文实例讲述了ES6新特性之模块Module用法。分享给大家供大家参考,具体如下: 一、Module简介 ES6的Class只是面向对象编程的语法糖,升级了ES5的构造函数的原型链继承的写法,并没有解决模块化问题。Module功能就是...
MOP面向模块化编程(缩写 Module Oriented Programming),一种全新的编程思想,是基于OOP, AOP之上的编程思想,即在AOP之上进行了封装,和模块进行相关联,主要让编程人员专注分析模块的数据关系 与业务流程,...
nginx-upload-module模块源码,用于nginx配置文件上传功能
WordPress外贸企业主题Module开心版[更新至V4.5.4],Module主题采用全新模块化开发,首页模块可视化拖拽自由组合,可自定义搭建出不同行业适用的企业网站。同时主题全面支持WPML多语言切换,可轻松搭建外贸网站。 ...