博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js:包
阅读量:6655 次
发布时间:2019-06-25

本文共 2510 字,大约阅读时间需要 8 分钟。

概要本篇博客主要介绍了node.js中的包

  包是在模块基础上更深一步的抽象,Node.js的包类似于C/C++的库函数或者Java/.Net的类库。它将某个独立的功能封装起来,用于发布、更新、依赖管理和版本控制。Node.js的包是一个目录,其中包含一个JSON格式的包说明文件package.json。严格符合CommonJS规范的包应该具备以下特征:

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

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

  ● JavaScript代码应该在lib目录下;

  ● 文档应该在doc目录下;

  ● 单元测试应该在test目录下。

 

1.作为文件夹的模块

  模块与文件是一一对应的。文件不仅可以是JavaScript代码或二进制代码,还可以是一个文件夹。最简单的包,就是作为一个文件夹的模块。下面我们来看一个例子:建立一个叫somepackage的文件夹,在其中创建index.js,内容如下:

exports.hello = function(){    console.log('Hello');};

然后在somepackage之外建立getpackage.js,内容如下:

var somepackage = require('./somepackage');somepackage.hello();

运行getpackage.js 控制台将输出结果:Hello.

  我们使用这种方法可以把文件夹封装为一个模块,即所谓的包。通过定制package.json,我们可以创建更复杂、更完善、更符合规范的包:

在前面例子中的somepackage文件夹下,我们创建一个叫做package.json的文件,内容如下所示:

{    "main" : "./lib/interface.js"}

然后将index.js重命名为interface.js并放入lib子文件夹下。以同样的方式再次调用这个包,依然可以正常使用。

  Node.js在调用某个包时,会首先检查包中package.json文件的main字段,将其作为包的借口模块,如果package.json或main字段不存在,会尝试寻找index.js或index.node作为包的接口。

  完全符合规范的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"        }    }}

 

转载于:https://www.cnblogs.com/koto/p/5692624.html

你可能感兴趣的文章
猫眼今日在香港公开招股 定价区间14.8港元至20.4港元
查看>>
“熊孩子”连续脚踢乘客遭背摔暴打,面对熊孩子我们应该怎么做
查看>>
从单机到2000万QPS:知乎Redis平台发展与演进之路
查看>>
design pattens - adapter
查看>>
百度首次将强化学习写入财报,不只是因为它能让你多看广告
查看>>
HTML5中手势原理分析与数学知识的实践
查看>>
[译] 用 CSS 选择器和自定义属性来升级你的项目
查看>>
Zepto源码学习Event模块
查看>>
Android fragment 标签加载过程分析
查看>>
LeetCode40.组合总和|| JavaScript
查看>>
JavaScript深拷贝、浅拷贝
查看>>
[]为false,!![]为true,[true] == 'true'为true,傻傻分不清
查看>>
【译】Gradle 的依赖关系处理不当,可能导致你编译异常
查看>>
[译]无脚本的脚本:比特币如何支持没有智能合约的智能合约
查看>>
最全阿里技术P系列解读:P5-P8的技能要求和薪资结构
查看>>
老司机带你检测相似图片
查看>>
逆向基础(十三) JAVA (一)
查看>>
深入分析 Fiesta Exploit Kit
查看>>
IQKeyboard导航栏上移和键盘遮盖textfield的问题
查看>>
Swift中Initialization的一些个人总结
查看>>