Nodejs (3) NPM与包

Submitted by Lizhe on Wed, 01/03/2018 - 15:39

包和NPM是将模块联系起来的一种机制

包 由 包结构 和 包描述文件 组成

package.json 包描述文件
bin 用于存放可执行二进制文件的目录
lib 用于存放JavaScript代码的目录
doc 用于存放文档的目录
test 用于存放单元测试文档

 

包描述文件是一个JSON格式的文件 package.json , 位于包的根目录下, 是包的重要组成部分

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

在包描述文件的规范中, NPM实际上需要的字段主要包括有 name, version, description, keywords, repositories, author, bin, main, scripts, engines, dependencies, devDependencies

name

包名

规范定义它需要由小写的字母和数字组成, 可以包含 . _ -  但是不允许包含空格

包名必需是唯一的, 以避免对外公布时产生重名冲突的误解.

NPM还建议不要在包名中附带node或者js来重复标记它是Javascript或者Node模块

version 版本号
description 包简介
keywords 关键词数组, NPM 中主要用来做分类搜索
repositories 托管源代码的位置列表
author 包作者
bin

一些包作者希望包可以作为命令行工具使用.

配置好bin字段后, 通过npm install package_name -g 命令可以将脚本添加到执行路径中, 之后可以在命令行中直接执行. 通过-g命令安装的模块包称为全局模式

main

模块引入方法 require() 在引入包时, 会优先检查这个字段, 并将其作为包中其余模块的入口.

如果不存在这个字段, require() 方法会查找包目录下的index.js, index.node, index.json文件作为默认入口

scripts 脚本说明对象. 它主要是被包管理器用来 安装, 编译, 测试 和 卸载包
engines 支持的Javascript引擎列表, ejs, flusspferd, gpsee, jsc, node,v8 等
dependencies 使用当前包所需要依赖的包列表. 这个属性十分重要, NPM会通过这个属性帮助自动加载依赖的包
devDependencies 一些模块只在开发时需要依赖.配置这个属性可以提示包的后续开发者安装依赖包

 

NPM的常用功能

CommonJS包规范是理论, NPM是其中的一种实践

对于Node而言, NPM帮助完成了第三方模块的发布, 安装 和 依赖等, 借助NPM, Node与第三方模块之间形成了一个很好的生态系统.

NPM可以帮助用户快速安装和管理依赖包.

 

安装依赖包

安装依赖包是NPM最常见的用法, 它的执行语句是 npm install express 

该命令执行后, NPM会在当前的目录下创建 node_modules 目录, 然后在node_modules目录下创建express目录,接着将包解压到这个目录

安装好依赖包之后, 直接在代码中调用 require('express'); 就可以将该包引入

全局安装模式

如果包中含有命令行工具, 那么需要执行

npm install express -g 命令进行全局模式安装 -g 是将一个包安装为全局可用的可执行命令

从本地安装

本地安装需要为NPM指明package.json文件所在的位置即可

它可以是 一个包含package.json的zip文件, 也可以是一个url, 还可以是一个包含package.json文件的目录

从非官方源安装

如果不能通过官方源安装, 可以通过镜像源安装. 在执行命令时, 添加以下参数

--registry=http://registry.url  

例如 npm install underscore --registry==http://registry.url

如果使用过程中几乎都采用镜像源安装, 可以执行以下命令指定默认源

npm config set registry http://registry.url

NPM钩子命令

"scripts":{
    "preinstall":"preinstall.js",
    "install":"install.js",
    "uninstall":"uninstall.js",
    "test":"test.js"
}

在以上字段中执行npm install <package>时, preinstall指向的脚本将会被自动加载执行, 然后install指向的脚本会被执行. 在执行npm uninstall <package> 时, uninstall指向的脚本也可以用来做一些清理工作, test同理

 

发布包

初始化包描述文件

package.json 文件的内容尽管相对较多, 但是实际发布一个包时并不需要一行一行的编写.

NPM提供的npm init 命令会帮助你生成package.json文件

201801041215