本文字数7300+,图片19张,阅读时间约为18分钟。
第一节:NPM基本信息

- 安装
- 卸载
- 更新
- 查看
- 搜索
- 发布自己的包提供给别人使用。
npm -v
6.4.1【11】如果之前是在官网下载的 node 安装包,运行后会自动安装在全局目录,其中
node 命令在 /usr/local/bin/node ,npm 命令在全局 node_modules 目录中,具体路径为 /usr/local/lib/node_modules/npm
- 如果只是修复bug,需要更新Z位。
- 如果是新增了功能,但是向下兼容,需要更新Y位。
- 如果有大变动,向下不兼容,需要更新X位。
第二节:通过npm安装包
npm install --helpnpm install <tarball file>
npm install <tarball url>
npm install <folder>
npm install <pkg>
npm install <pkg>@<tag>
npm install <pkg>@<version>
npm install <pkg>@<version range>

【03】安装包时,将包信息添加到package.json中。这样代码提交到github时,就不用提交node_modules这个文件夹了。
npm install module_name --save
【04】本地安装(local) vs 全局安装(global)本地安装:
测试结果:

简单说明一下:
grunt-cli@0.1.9:当前安装的package为grunt-cli,版本为0.19
node_modules/grunt-cli:安装目录
resolve@0.3.1:依赖的包有resolve、nopt、findup-sync,它们各自的版本、依赖在后面的括号里列出来。
03、可以通过require("module_name");来引用模块,无需指定模块路径。
var express = require('express');

全局安装:
grunt-cli@0.1.9 /usr/local/lib/node_modules/grunt-cli
├── resolve@0.3.1
├── nopt@1.0.10 (abbrev@1.0.4)
└── findup-sync@0.1.2 (lodash@1.0.1, glob@3.1.21)
05、不能通过 require("module_name") 来引入本地安装的包。因为 require 不会搜索 /usr/local/lib/node_modules/。
第三节:npm常用命令
【01】卸载包
npm uninstall grunt-cli

npm uninstall grunt-cli@"0.1.9"
【02】查看包
【03】更新包
npm update grunt-cli
【04】搜索包
npm search grunt-cli【05】升级npm自己
npm install npm -g
【06】删除包
npm rm package_name[@版本号] [package_name[@版本号]...]
使用这个命令删除包。如果省略版本号, 那么这个包的所有被找到的版本都将被删除。
举例:
npm rm sax
npm rm -g express
【07】查看帮助命令
npm help

【08】初始化
npm init
第四节:一些不常用的命令
npm cache clear
npm unpublish package@version
npm view moduleNames
npm view express

npm view moduleName labelName

npm view moudleName dependencies
npm view moduleName repository.url
npm view moduleName engines

npm outdated
npm help json

npm root


npm root -g
第五节:对NPM配置
npm config edit
这个命令会打开.npmrc文件。以记事本的方式打开。 
npm config set proxy http://proxy.example.com:8080
npm set proxy http://proxy.example.com:8080
npm config get proxy
http://proxy.example.com:8080/
npm get proxy
npm delete proxy
npm config list

第六节:nrm(npm源管理工具)
nrm (https://github.com/Pana/nrm)是一个管理 npm 源的工具。
比如可以使用淘宝镜像,这样安装和更新会比较快。慢的原因,国情,你懂得。
nrm 用来切换官方 npm 源和国内的 npm 源(如: cnpm),也可以用来切换官方 npm 源和公司私有 npm 源。
【02】全局安装 nrm:
npm i nrm -g
查看当前 nrm 内置的几个 npm 源的地址:

切换到 cnpm:
nrm use cnpm
【】zyx456:安装nrm后,使用nrm ls。告诉我缺失了很多库。
Cannot find module 'config-chain'
Error: Cannot find module 'nopt'
Error: Cannot find module 'osenv'

Error: Cannot find module 'npmlog'
Error: Cannot find module 'has-unicode'
Error: Cannot find module 'uid-number'
Error: Cannot find module 'abbrev'
Error: Cannot find module 'npm-registry-client'
Error: Cannot find module 'chownr'
Error: Cannot find module 'dezalgo'
Error: Cannot find module 'npm-cache-filename'
……………………给自己的耐心点个赞。
第七节:package.json的基本信息
npm install A
npm install B
npm install C
npm install
"dependencies": {
"request": "*",
"async": "*"
}
"dependencies": {
"request": "2.27.0",
"async": "0.2.9"
}
"dependencies": {
"request": "2.27.x",
"async": "0.2.x"
}
指定一个入口文件,
如果你包的名字叫foo,然后用户require("foo"),main配置的模块的exports对象会被返回。
这应该是一个相对于根目录的文件路径。
"main": "js/entry.js",
main 字段是一个模块ID,它是一个指向你程序的主要项目。就是说,如果你包的名字叫 express,然后用户安装它,然后require("express")。
如果有人要使用你的模块,那么他们可能不需要你开发使用的外部测试或者文档框架。
在这种情况下,最好将这些附属的项目列在devDependencies中。
这些东西会在执行npm link或者npm install的时候初始化,并可以像其他npm配置参数一样管理。
- description - 包的描述。字符串。便于在npm search搜索。
- homepage - 包的官网 url 。
- author - 包的作者姓名。
- contributors - 包的其他贡献者姓名。
- dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。
- repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
- keywords - 关键字,数组或字符串。便于在npm search搜索。
- scripts- “scripts”是一个由脚本命令组成的hash对象,他们在包不同的生命周期中被执行。key是生命周期事件,value是要运行的命令。
第八节:node多版本管理器概念
【01】迄今为止Node.js 更新速度还很快,有时候新版本还会将旧版本的一些 API 废除,以至于写好的代码不能向下兼容。有时候想要尝试一下新版本有趣的特性,但又想要保持一个相对稳定的环境。