书上还有很大一部分讲了C/C++模块的编译过程、核心模块编写和C/C++扩展模块的内容,不过我对C++一窍不通所以没有仔细看,若是之后须要再自习看吧。javascript
第三方模块中,模块和模块之间是散列在各地的,互相之间不能直接引用。而在模块以外,包和NPM则是将模块联系起来的一种机制。
CommonJS的包规范定义其实也十分简单,它由包结构和包描述文件两个部分组成,前者用于组织包中的各类文件,后者用于描述包的相关信息,以供外部读取分析。java
包其实是一个存档文件,即一个目录直接打包为.zip或tar.gz格式的文件,安装后解压还原为目录,彻底符合CommonJS规范的包结构应该包含以下这些文件:node
包描述文件用于表达非代码相关的信息,它是一个JSON格式的文件——package.json,位于包的根目录下。文件中的字段就不放上来了(字太多了);npm
安装Node以后,执行npm -v
能够查看当前NPM版本:
json
执行NPM
查看帮助引导说明:
后端
使用npm help <command>
能够查看具体命令说明,执行命令后会在浏览器打开一个说明文档。浏览器
安装系统依赖包是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
//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
能够列出当前路径下可以经过模块路径找到的全部包,并生成依赖树: