前言

书上还有很大一部分讲了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)的更多相关文章

  1. 《深入浅出Nodejs》笔记——模块机制(1)

    前言 这是我读<深入浅出Nodejs>的笔记,真是希望我的机械键盘快点到啊,累死我了. CommonJS规范 主要分为模块引用.模块定义.模块标识三个部分. 模块引用 上下文提供requi ...

  2. 浅谈NodeJs的模块机制

    J历史 我们都知道,js在刚被创建的时候,只是为了在网页上写一些小脚本而已,比如网页特效,表单验证等等,创立者也许没觉悟到以后的js会发展到如此规模.这是web1.0时代. 在web 2.0时代,各种 ...

  3. 深入浅出node(2) 模块机制

    这部分主要总结深入浅出Node.js的第二章 一)CommonJs 1.1CommonJs模块定义 二)Node的模块实现 2.1模块分类 2.2 路径分析和文件定位 2.2.1 路径分析 2.2.2 ...

  4. nodejs笔记--模块篇(三)

    文件模块访问方式通过require('/文件名.后缀')    require('./文件名.后缀')    requrie('../文件名.后缀') 去访问,文件后缀可以省略:以"/&qu ...

  5. 【读书笔记】《深入浅出nodejs》第二章 模块机制

    1.什么是模块? 指在程序设计中,为完成某一功能所需的一段程序或子程序:或指能由编译程序.装配程序等处理的独立程序单位:或指大型软件系统的一部分. ----<百度百科> 2.JavaScr ...

  6. 深入浅出Nodejs读书笔记

    深入浅出Nodejs读书笔记 转:http://tw93.github.io/2015-03-01/shen-ru-qian-chu-nodejs-reading-mind-map.html cate ...

  7. Nodejs:Node.js模块机制小结

    今天读了<深入浅出Nodejs>的第二章:模块机制.现在做一个简单的小结. 序:模块机制大致从这几个部分来讲:JS模块机制的由来.CommonJS AMD CMD.Node模块机制和包和n ...

  8. 通过Anuglar Material串串学客户端开发 - NodeJS模块机制之Module.Exports

    module.exports 前文讲到在Angular Material的第二个编译文件docs/gulpfile.js中却看到了一个奇怪的东西module.exports那么module.expor ...

  9. 深入浅出Nodejs读书笔记(转)

    Node简介 这一章简要介绍了Node,从中可以了解Node的发展历程及其带来的影响和价值. 为什么叫Node?起初,Ryan Dahl称他的项目为web.js,就是一个Web服务器,但是项目的发展超 ...

随机推荐

  1. 【C++ STL】List

    1.结构 list使用一个double linked list(双向链表)来管理元素. 2. list 能力 list内部结构和vector或deque截然不同,所以与他们的区别: list不支持随机 ...

  2. javaScript 进阶篇

    1.js 数组 创建数组的语法: a. var myarray= new Array(8); myarray[0]=1;等等 b.var myarray = new Array(66,8,47,59, ...

  3. JDK工具学习

    javap: 可以对照源代码和字节码,从而了解很多编译器内部的工作. 查看class字节码:JDK有自带的工具包,使用javap命令打开.class文件就行 javap -c JAVAPTest

  4. poj 1797

    2013-09-08 09:48 最大生成树,输出生成树中最短的边儿即可 或者对边儿排序,二份答案+BFS判断是否1连通N 时间复杂度都是O(NlogN)的 附最大生成树pascal代码 //By B ...

  5. 关于js闭包官方解释庖丁解牛式理解

    闭包:是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 变量+环境 首先按这个句子主谓宾来分解.闭包是一个表达式,通常是一个函数. 这意味着第一它 ...

  6. spin_USACO

    Spinning Wheels1998 ACM NE Regionals Each of five opaque spinning wheels has one or more wedges cut ...

  7. yocto 离线编译

    使用yocto编译一个软件包时,一般会先在本地寻找下载好的源码包,如果不存在则根据配置从网络下载. 添加本地源码包 为了支持离线编译,添加一个包的配置文件后,需要在本地也准备好源码包. 可以先打开网络 ...

  8. Linux(Unix)密码策略问题导致root密码不能修改

    Linux(Unix)密码策略问题导致root密码不能修改 发布时间:  2016-01-19 浏览次数:  1034 下载次数:  5 用户修改了密码配置文件,导致root账户修改密码时报如下错误: ...

  9. 1002: 当不成勇者的Water只好去下棋了---课程作业---图的填色

    1002: 当不成勇者的Water只好去下棋了 Time Limit: 1 Sec  Memory Limit: 128 MB Description 由于魔王BOSS躲起来了,说好要当勇者的Wate ...

  10. win10安装提示“我们无法创建新的分区”

    今日于笔记本安装win10时突然出现提示:我们无法创建新的分区.网上搜了不少建议,尝试了都无果. 由于我的笔记本是固态硬盘与机械硬盘混合,所以情况可能更加特殊. 最后成功的方法是: 1. 先将Win1 ...