Node.js:包
概要:本篇博客主要介绍了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"
}
}
}
Node.js:包的更多相关文章
- Node.js包管理器Yarn的入门介绍与安装
FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在昨天, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .咱 ...
- Node.js包(JXcore)
Node.js的代码是开放的,并准备好被复制像任何其他Javascript代码.但现在它不可能的了.JXcore 这是一个开源项目,引入了包装和源文件和其他资源加密成JX包一个独特的功能. 考虑大型项 ...
- Node.js包管理器:
Node.js包管理器: 当我们要把某个包作为工程运行的一部分时,通过本地模式获取,如果要在命令行下使用,则使用全局模式安装 使用全局模式安装的包并不能直接在JavaScript文件中用require ...
- 9.Node.js 包管理器npm
npm 是 Node.js 官方提供的包管理工具, 用于 Node.js包的发布.传播.依赖控制 安装 express ==> 流行的基于Node.js的Web开发框架,可以快速地搭建一个完整 ...
- 《Node.js 包教不包会》
<Node.js 包教不包会> 为何写作此课程 在 CNode(https://cnodejs.org/) 混了那么久,解答了不少 Node.js 初学者们的问题.回头想想,那些问题所需要 ...
- Node.js包的依赖及版本号(转)
原文: http://www.cnphp6.com/archives/64130 Node.js最重要的一个文件就是package.json,其中的配置参数决定了功能.例如下面就是一个例子 { &q ...
- NPM Node.js 包管理
1.NPM 简介 1.1 NPM Node.js® 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,可方便地构建快速,可扩展的网络应用程序的平台.Node.js 使用事件驱动, ...
- npm --- Node.js包管理器
目录 1. 安装Node.js 2. 运行npm 3. npm介绍 3.1 安装插件 3.2 更新插件 3.3 卸载插件 3.4 查看当前目录中的插件列表 4. 使用cnpm 4.1 安装 npm( ...
- Node.js 包管理器 NPM 讲解
包管理器又称软件包管理系统,它是在电脑中自动安装.配制.卸载和升级软件包的工具组合,在各种系统软件和应用软件的安装管理中均有广泛应用.对于我们业务开发也很受益,相同的东西不必重复去造轮子. 每个工具或 ...
- node.js 包教不包会 (Windows版详解)
针对@alsotang 的新手入门教程 https://github.com/alsotang/node-lessons ,详解该教程在Windows中的实践,包括博主在实践过程中遇到的问题及解决方案 ...
随机推荐
- call 与 apply的区别
1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...
- mysql 保存emoji时报,数据库报错:Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x82\xF0\x9F...' for column 'review' at row 1
错误原因:我们可以看到错误提示中的字符0xF0 0x9F 0x98 0x84 ,这对应UTF-8编码格式中的4字节编码(UTF-8编码规范).正常的汉字一般不会超过3个字节,为什么为出现4个字节呢?实 ...
- DHCP源码分析--主流程
DHCP 服务器,客户端代码都采用了统一的事件轮询(event loop),包含了任务处理消息,定时器消息,socke收发消息等等. static struct { isc_appmethods_t ...
- strut2配置文件属性介绍
mystruts.xml配置文件属性介绍 1.package标签的中的namespace属性 <package name="default" extends="st ...
- java模拟数据库缓存
实现缓存一些数据到本地,避免重复查询数据库,对数据库造成压力,代码如下: package threadLock; import java.util.HashMap; import java.util. ...
- 可参考的gulp资源
可参考的gulp资源 入门:https://segmentfault.com/a/1190000000435599 比较详细:https://markpop.github.io/2014/09/17/ ...
- 干货篇:揭开CSS盒模型神秘的面纱
写博客可以对学习内容进行总结.分享和交流(面对面的技术分享会也不错)... 如果是单纯的记录,印象笔记完全够了. 步入正题,盒模型是web布局核心,掌握基础知识,以后实战中会如鱼得水~ 概念与历史 C ...
- 服务管理--systemctl命令
摘要: systemctl 是系统服务管理器命令,它实际上将 service 和 chkconfig 这两个命令组合到一起. 任务 旧指令 新指令 使某服务自动启动 chkconfig --level ...
- C# 手机格式验证
C# 手机格式验证 //电信手机号码正则 Regex dReg = new Regex(@"^1[3578][01379]\d{8}$"); //联通手机号正则 Regex tRe ...
- Pthon修炼5
函数 一.自定义函数 def:表示函数的关键字 函数名:函数的名称 函数体:函数中进行一系列的逻辑计算 参数:为函数体提供数据 返回值:执行完函数return 一个值 例:def count(x ...