深入浅出Node.js读书笔记:Node.js的包和NPM(2.6)

Node模块与模块之间无法直接引用,但可以通过引进包和NPM,从而实现模块引用另一个模块的机制。

Javascript不像其他语言,如Java,c++一样,有包和命名空间的概念。但这里要感谢CommonJs包规范,该规范在一定程度上解决了
变量依赖,依赖关系等代码组织性问题。

CommonJs规范十分简单,它由包结构和包描述文件两个部分组成,前者用于组织包中的各种文件,后者则用于描述包的相关信息。

2.6.1 包结构

包实际是一个存档文件,以.zip或tar.gz格式的文件,解压后是个目录,该目录包含如下文件:

1.package.json 包描述文件
2.bin 用于存放可执行文件的目录
3.lib 用于存放Javascript代码的目录
4.doc 用于存放文档的目录
5.test: 用于存放单元测试用例的代码

2.6.2 包描述文件与NPM

包描述文件是一个JSON格式的文件,位于包的跟目录。CommonJS为package.json文件定义了如下一些必要的字段。

1.name 包名规范定义需要小写的字母和数字组成,可以包含.,_和-,但不允许出现空格。包名必须是唯一。
2.description 包简介。
3.version 包版本号,通常为major.minor.revision格式。
4.keywords 关键词数组,主要用来做分类搜索。
5.maintainers 包维护者列表。
6.contributors 贡献者列表。
7.bugs 可以反馈bug的网址或邮箱地址。
8.licenses 当前包所使用的许可证列表,表示这个包可以在哪些许可证下使用。
9.repositories 托管源代码的位置列表,表明可以通过哪些方式和地址访问包的源代码。
10.homepage 当前包的网站地址。
11.os 操作系统支持列表。
12.cpu cpu架构支持的列表。
13.engine 支持的Javascript引擎列表。
14.builtin 标志当前包是否是内建在底层系统的标准组件。
15.directories 包目录说明。
16.implements 实现规范的列表。
17.scripts 脚本说明对象。它主要被包管理器用来安装,编译,测试和卸载包。

包规范的定义可以帮助Node解决依赖包安装的问题,而NPM正是基于该规范进行了实现。

NPM对包规范进行了扩展,有如下几个字段:

1.author 作者。
2.bin 一些包作者希望包可以作为命令行工具使用。
3.main 模块引入方法require在引入包时,会优先检查这个字段,并将其作为包中其余模块的入口。如果不存在该字段,require()方法会查找包目录下的index.js,index.node,index.json文件作为默认入口。
4.devDependencies 一些模块只在开发时需要依赖。配置这个属性,可以提示包的后缀开发者安装依赖包。

2.6.3 NPM 常用功能

借助NPM,可以帮助用户快速安装和管理依赖包。除此之外,NPM还有一些巧妙的用法,下面详细介绍一下。

1.查看帮助
在安装Node之后,执行npm -v命令可以查看当前npm的版本

2.安装依赖包
比如安装express,就可以执行npm install express,此时会在当前创建一个node_modules目录,该目录下会创建express目录,包会安装在该目录。

全局模式安装,如果包中有命令行,那么需要执行npm install express -g 命令进行全局模式安装。

3.从本地安装
对于一些没有发布到NPM上的包,或是因为网络原因导致无法直接安装的包,可以通过将包下载到本地,然后以本地安装。

4.从非官方源安装
如果不能通过官方源安装,可以通过镜像源安装。执行命令时,添加–registry=http://registry.url即可
例如 npm install underscore --registry=http://registry.url

5.NPM钩子命令
package.json中scripts字段的提出就是让包在安装或卸载过程中提供钩子机制,例如:

“script”:{
“uninstall”:“uninstall.js”,
}

在 npm uninstall 时,uninstall.js指向的脚本会做一些清理工作。

6.发布包
这里以sayHello作为例子,代码如下:
exports.sayHello = function(){
return “hello world”;
}

将这段代码保存为hello.js即可。初始化包描述文件

npm 提供init命令,帮助生成package.json文件,通过交互式逐渐填入选项,最后生成预览的包描述文件。

7.注册包仓库账号
为了维护包,NPM必须要使用仓库账号才允许将包发布到仓库中。

通过npm adduser 命令交互完成。

8.包上传
通过npm publish 。将刚刚创建的package.json文件所在目录下,执行npm publish,开始上传包

9.安装包

为了体验和测试自己上传的包,可以换个目录执行npm install hello_test_jackson安装。

10.管理包权限
一个包只有一个人拥有权限进行发布。可以使用npm owner命令帮助你管理包的所有者:

npm owner ls eventproxy

使用这个命令,也可以添加包的拥有者,删除一个包的拥有者:
npm owner ls
npm owner add
npm owner rm

11.分析包
在NPM使用过程中,或许你不能确定当前目录是否可以通过require顺利引入想要的包,这时可以执行npm ls分析包

2.6.4 局域NPM

考虑到企业保密性的需要,企业需要搭建私有的NPM仓库。对于企业内部而言,私有的可充用模块可以打包到局域NPM仓库中,这样可以保持更新的中心化,不至于让各个小项目各自维护相同功能模块,杜绝通过复制粘贴实现代码共享的行为。

2.6.5 NPM 潜在问题

由于NPM是共享的包的发布平台,包的质量良莠不齐,另一个问题则是,Node代码可以运行在服务器端,需要考虑安全性问题。

如何判断NPM包的质量,有如下几个方式:
1.NPM模块首页上的依赖榜。
2.Github观察者数量和分支数量。
3.测试用例和文档的状况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值