模块(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)是两种重要的代码组织方式,它们有助于提高代码的可读性、可维护性和复用性。下面将详细解释这两者之间的区别和使用方法。 **1. 模块(Module)** 模块是Python代码...
- 使用`.`来访问包内的子模块或子包,如`import my_package.my_module`。 - `from my_package import my_module`也可以导入,但不推荐,因为可能引发名称冲突。 - 使用`importlib.import_module()`动态导入模块,...
在Python编程中,模块(Module)和包是组织代码的重要方式,它们有助于代码的复用和管理。在深度学习入门阶段,了解并掌握模块和包的使用是必不可少的。 1. **模块导入(Importing Modules)** Python通过`import...
在Python编程语言中,模块(Module)和包(Package)是组织代码的重要方式,它们使得代码结构更加清晰,便于重用和管理。本节将对Python的模块和包进行详细的小结。 首先,我们来理解什么是模块。在Python中,一个...
在Python编程中,模块(Module)和包(Package)是组织代码的重要方式,它们使得代码更易于管理和重用。在本教程中,我们将深入探讨这两个概念,并结合MySQL的基础知识,来构建一个完整的知识体系。 首先,让我们...
模块和包:生与死 PyCon'2015 上的教程演示。 2015 年 4 月 9 日。蒙特利尔。 大卫·比兹利 (@dabeaz), ://www.dabeaz.com 本教程假设使用 Python 3.4 或更新版本。 第 8 节和第 9 节中的某些示例需要使用 Python...
例如,假设我们有一个名为`my_package`的目录,其中包含`__init__.py`文件和两个子模块`module1.py`和`module2.py`。在`__init__.py`中,我们可以定义如下内容: ```python # my_package/__init__.py public_...
在Python编程语言中,模块(Module)和包(Package)是组织代码的重要方式,它们使得代码更加有序,便于管理和重用。以下是对这两个概念的详细解释。 ### 模块概述 模块是Python代码的集合,通常保存在一个.py文件...
- **包导入问题**:如果模块位于包内,使用`from package import module`或`import package.module`,注意`__init__.py`文件的存在,它是标识一个目录为Python包的关键。 4. **打包与分发**: - 若要将`Test_...
Python编程语言中,模块(module)和包(package)是代码组织的重要机制,它们使得代码更易于管理和重用。下面将详细阐述这两个概念以及相关的类属性和类方法。 一、类属性和类方法 1. 类的结构 类是面向对象编程...
python中的模块(module)是管理python应用程序的工具,而包(package)是管理模块的工具.在管理和使用包的时候需要注意,调用注意设置文件的相对路径,以保证程序的可移植性. 下面的小程序主要应用os和sys模块中的一些...
在Python编程语言中,模块和包是组织代码和实现代码重用的重要机制。在这个"Python计划. 计算生态构建.第一周 Python 模块和包2-1"的学习资源中,我们将深入探讨这两个概念以及如何有效地利用它们来增强我们的编程...
比如`my_package.sub_package.module`。创建包的目的是为了更好地管理和分发大型项目,它可以通过子包进一步划分,以保持代码的清晰和模块化。在Python中,一个目录如果包含名为`__init__.py`的文件(可以为空),...
20_Python的包和模块 文章对应的 ...模块(Module) 包(Package) 创建包和模块 使用模块和包 导入整个模块 从模块导入特定的对象: 导入模块的所有内容 导入包中的模块 包和模块的下载 pip 管理工具 conda 管理工具 附件
平台由一系列模块和包组成,这些模块和包共同构成了固件的功能。 **1.1.2 模块定制化** - 模块可以根据不同的需求进行定制化,例如通过修改源代码实现特定功能、调整编译选项以优化性能或适应不同硬件配置等。 **...
它之所以受到开发者的青睐,原因之一是它采用了一种简洁而强大的模块和包概念来部署代码。接下来,我们将详细探讨Node.js中模块与包的概念、模块路径解析规则,以及如何使用这些规则来优化代码部署。 首先,我们要...
Python中的模块和包是编程中组织代码的重要方式。模块是一个包含Python定义和语句的文件,通常以`.py`结尾,比如`test.py`对应模块名为`test`。通过`import`语句,我们可以将模块中的变量、函数或类引入到当前程序中...
在这个例子中,我们创建了一个名为 `my_package` 的模块,它包含一个公共函数 `package_function` 和一个私有模块 `internal_module`。 ##### 4.2 跨包使用模块 一个包可以作为依赖项被另一个包使用,其公共模块...