npm 基本使用

npm全称为Node Package Manager,是一个基于Node.js的包管理器,也是整个Node.js社区最流行、支持的第三方模块最多的包管理器,本笔记记录了npm最基本的使用方法。

NPM 使用介绍

NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
– 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
– 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
– 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 “npm -v” 来测试是否成功安装。

安装模块

npm install <Module Name> 本地安装
npm install <Module Name> -g 全局安装

本地安装

  1. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
  2. 可以通过 require() 来引入本地安装的包。

全局安装

  1. 将安装包放在 /user/local 下或者你 node 的安装目录。
  2. 可以直接在命令行里使用。

命令

npm install <name> [-g] [--save-dev]

--save:将保存配置信息至package.json(package.json是nodejs项目配置文件);

-dev:保存至package.json的devDependencies节点,不指定-dev将保存至dependencies节点;一般保存在dependencies的像这些express/ejs/body-parser等等。

模块操作

卸载模块

我们可以使用以下命令来卸载 Node.js 模块。

$ npm uninstall <Module Name>

卸载后,你可以到 /node_modules/ 目录下查看包是否还存在,或者使用以下命令查看:

$ npm ls
$ npm ls -g

更新模块

$ npm update <Module Name>

使用npm update 可以把当前目录下node_modules子目录里边的对应模块更新至最新版本。
使用npm update -g可以把全局安装的对应命令行程序更新至最新版。

搜索模块

$ npm search <Module Name>

使用淘宝镜像

$ npm install -g cnpm --registry=https://registry.npm.taobao.org

安装好后,就可以使用cnpm命令代替npm命令了。

npm机制

模块的安装过程

总结一下,Node模块的安装过程是这样的。

  1. 发出npm install命令
  2. npm 向 registry 查询模块压缩包的网址
  3. 下载压缩包,存放在~/.npm目录
  4. 解压压缩包到当前项目的node_modules目录

注意,一个模块安装以后,本地其实保存了两份。一份是~/.npm目录下的压缩包,另一份是node_modules目录下解压后的代码。
但是,运行npm install的时候,只会检查node_modules目录,而不会检查~/.npm目录。也就是说,如果一个模块在~/.npm下有压缩包,但是没有安装在node_modules目录中,npm 依然会从远程仓库下载一次新的压缩包。

使用 package.json


package.json 位于模块的目录下,用于定义包的属性。

$ npm init # 在当前模块目录下生产package.json文件
$ npm install # 安装当前package.json中定义的模块

为什么要保存至package.json?

因为node插件包相对来说非常庞大,所以不加入版本管理,将配置信息写入package.json并将其加入版本管理,其他开发者对应下载即可(命令提示符执行npm install,则会根据package.json下载所有需要的包,npm install –production只下载dependencies节点的包)。

package.json

{
  "name": "demo",
  "version": "1.0.0",
  "description": "Demo package.json",
  "main": "main.js",
  "dependencies": {
    "mkdirp": "^0.5.1",
    "underscore": "^1.8.3"
  },
  "devDependencies": {},
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "author": "Sitepoint",
  "license": "ISC"
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注