《深入浅出Nodejs》笔记——模块机制(2)
前言
书上还有很大一部分讲了C/C++模块的编译过程、核心模块编写和C/C++扩展模块的内容,不过我对C++一窍不通因此没有仔细看,如果以后需要再自习看吧。
包与NPM
第三方模块中,模块和模块之间是散列在各地的,互相之间不能直接引用。而在模块之外,包和NPM则是将模块联系起来的一种机制。
CommonJS的包规范定义其实也十分简单,它由包结构和包描述文件两个部分组成,前者用于组织包中的各种文件,后者用于描述包的相关信息,以供外部读取分析。
包结构
包实际上是一个存档文件,即一个目录直接打包为.zip或tar.gz格式的文件,安装后解压还原为目录,完全符合CommonJS规范的包结构应该包含如下这些文件:
- package.json 包描述文件
- bin 存放可执行二进制文件
- lib 存放js代码
- doc 存放文档
- test 存放单元测试用例代码
包描述文件与NPM
包描述文件用于表达非代码相关的信息,它是一个JSON格式的文件——package.json,位于包的根目录下。文件中的字段就不放上来了(字太多了);
NPM常用功能
1.查看帮助
安装Node之后,执行npm -v可以查看当前NPM版本:

执行NPM查看帮助引导说明:

使用npm help <command>可以查看具体命令说明,执行命令后会在浏览器打开一个说明文档。
2.安装系统依赖包
安装系统依赖包是NPM最常见的用法,它的执行语句是npm install <packageName>。执行命令后Node会在当前目录下创建node_modules目录(如果当前目录下不存在这个目录),然后在node_modules中创建对应包名的目录,然后将压缩包解压到这个目录下。安装好依赖包后就可以通过require(<packageName>)来引入包。
全局模式安装
如果包中含有命令行工具,那么需要执行npm install <packageName> -g来进行全局模式安装。
全局模式这个称谓具有误导性,全局模式安装并不是将一个模块包安装为一个全局包,它并不意味着可以从任何地方用require()引用到这个模块。它实际上是将一个包安装位全局可用的可执行命令,它根据包描述文件中的bin字段配置,将实际脚本链接带与Node执行文件相同的路径下。
通过全局模式安装的包都被安装进了一个同一目录下,这个目录可以用如下方式推算出来:
path.resolve(process.execPath, '..', '..', 'lib', 'node_modules');

从本地安装
对于一些没有发布到NPM上或者因为网络原因没下载的包,可以通过将包下载到本地,然后以本地安装。本地安装只需为NPM指明package.json文件所在的位置即可:它可以是一个包含package.json的存档文件,也可以是一个URL地址,也可以是一个目录下有package.json文件的目录位置:
npm install <tarball file>
npm install <tarball url>
npm install <folder>
从非官方源安装
如果不能通过官方源安装,可以通过镜像源安装。在执行命令时,添加--registry=http://registry.url即可,示例如下:
npm install underscore --registry=http://registry
可以指定默认源:
npm config set registry http://registry.url
3.NPM钩子命令
4.发布包
编写模块
//hello.js
exports.sayHello = function () {
return 'Hello, world.';
}
初始化包描述文件
可以在包目录下使用npm init来生成package.json文件:

注册包仓库帐号
执行npm adduser然后按顺序进行即可。
上传包
在package.json文件所在目录下,执行npm publish。
安装包
执行npm install <packageName> --registry=https://registry.npmjs.org/。
管理包权限
npm owner ls <packageName>
npm owner add <user> <packageName>
npm owner rm <user> <pacjageName>
分析包
npm ls可以列出当前路径下能够通过模块路径找到的所有包,并生成依赖树:

局域NPM
NPM潜在问题
前后端共用模块
《深入浅出Nodejs》笔记——模块机制(2)的更多相关文章
- 《深入浅出Nodejs》笔记——模块机制(1)
前言 这是我读<深入浅出Nodejs>的笔记,真是希望我的机械键盘快点到啊,累死我了. CommonJS规范 主要分为模块引用.模块定义.模块标识三个部分. 模块引用 上下文提供requi ...
- 浅谈NodeJs的模块机制
J历史 我们都知道,js在刚被创建的时候,只是为了在网页上写一些小脚本而已,比如网页特效,表单验证等等,创立者也许没觉悟到以后的js会发展到如此规模.这是web1.0时代. 在web 2.0时代,各种 ...
- 深入浅出node(2) 模块机制
这部分主要总结深入浅出Node.js的第二章 一)CommonJs 1.1CommonJs模块定义 二)Node的模块实现 2.1模块分类 2.2 路径分析和文件定位 2.2.1 路径分析 2.2.2 ...
- nodejs笔记--模块篇(三)
文件模块访问方式通过require('/文件名.后缀') require('./文件名.后缀') requrie('../文件名.后缀') 去访问,文件后缀可以省略:以"/&qu ...
- 【读书笔记】《深入浅出nodejs》第二章 模块机制
1.什么是模块? 指在程序设计中,为完成某一功能所需的一段程序或子程序:或指能由编译程序.装配程序等处理的独立程序单位:或指大型软件系统的一部分. ----<百度百科> 2.JavaScr ...
- 深入浅出Nodejs读书笔记
深入浅出Nodejs读书笔记 转:http://tw93.github.io/2015-03-01/shen-ru-qian-chu-nodejs-reading-mind-map.html cate ...
- Nodejs:Node.js模块机制小结
今天读了<深入浅出Nodejs>的第二章:模块机制.现在做一个简单的小结. 序:模块机制大致从这几个部分来讲:JS模块机制的由来.CommonJS AMD CMD.Node模块机制和包和n ...
- 通过Anuglar Material串串学客户端开发 - NodeJS模块机制之Module.Exports
module.exports 前文讲到在Angular Material的第二个编译文件docs/gulpfile.js中却看到了一个奇怪的东西module.exports那么module.expor ...
- 深入浅出Nodejs读书笔记(转)
Node简介 这一章简要介绍了Node,从中可以了解Node的发展历程及其带来的影响和价值. 为什么叫Node?起初,Ryan Dahl称他的项目为web.js,就是一个Web服务器,但是项目的发展超 ...
随机推荐
- 【C++ STL】List
1.结构 list使用一个double linked list(双向链表)来管理元素. 2. list 能力 list内部结构和vector或deque截然不同,所以与他们的区别: list不支持随机 ...
- javaScript 进阶篇
1.js 数组 创建数组的语法: a. var myarray= new Array(8); myarray[0]=1;等等 b.var myarray = new Array(66,8,47,59, ...
- JDK工具学习
javap: 可以对照源代码和字节码,从而了解很多编译器内部的工作. 查看class字节码:JDK有自带的工具包,使用javap命令打开.class文件就行 javap -c JAVAPTest
- poj 1797
2013-09-08 09:48 最大生成树,输出生成树中最短的边儿即可 或者对边儿排序,二份答案+BFS判断是否1连通N 时间复杂度都是O(NlogN)的 附最大生成树pascal代码 //By B ...
- 关于js闭包官方解释庖丁解牛式理解
闭包:是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 变量+环境 首先按这个句子主谓宾来分解.闭包是一个表达式,通常是一个函数. 这意味着第一它 ...
- spin_USACO
Spinning Wheels1998 ACM NE Regionals Each of five opaque spinning wheels has one or more wedges cut ...
- yocto 离线编译
使用yocto编译一个软件包时,一般会先在本地寻找下载好的源码包,如果不存在则根据配置从网络下载. 添加本地源码包 为了支持离线编译,添加一个包的配置文件后,需要在本地也准备好源码包. 可以先打开网络 ...
- Linux(Unix)密码策略问题导致root密码不能修改
Linux(Unix)密码策略问题导致root密码不能修改 发布时间: 2016-01-19 浏览次数: 1034 下载次数: 5 用户修改了密码配置文件,导致root账户修改密码时报如下错误: ...
- 1002: 当不成勇者的Water只好去下棋了---课程作业---图的填色
1002: 当不成勇者的Water只好去下棋了 Time Limit: 1 Sec Memory Limit: 128 MB Description 由于魔王BOSS躲起来了,说好要当勇者的Wate ...
- win10安装提示“我们无法创建新的分区”
今日于笔记本安装win10时突然出现提示:我们无法创建新的分区.网上搜了不少建议,尝试了都无果. 由于我的笔记本是固态硬盘与机械硬盘混合,所以情况可能更加特殊. 最后成功的方法是: 1. 先将Win1 ...