nodejs入门之npm包资源管理器

一. 前言

1.npm是什么

官网:https://www.npmjs.cn/前端

npm是JavaScript的包管理器,也是世界上最大的软件注册中心。vue

NPM是随同NodeJS一块儿安装的包管理工具,包的结构使您可以轻松跟踪依赖项和版本。node

NPM能解决NodeJS代码部署上的不少问题,常见的使用场景有如下几种:
容许用户从NPM服务器下载别人编写的第三方包到本地使用。
容许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
容许用户将本身编写的包或命令行程序上传到NPM服务器供别人使用。react

2.为何须要它

​ 现代化前端开发中,须要用到不少别人写好的模块包。若是咱们要使用别人写的某个包,每次都根据名称搜索一下官方网站,下载代码,解压,再使用的话很是繁琐。因而一个集中管理的工具应运而生。你们都把本身开发的模块打包后放到npm官网上,若是要使用,直接经过npm安装就能够直接用,不用管代码存在哪里,应该从哪里下载。
​ 更重要的是,若是咱们要使用模块A,而模块A又依赖于模块B,模块B又依赖于模块X和模块Y,npm能够根据依赖关系,把全部依赖的包都下载下来并管理起来。不然,靠咱们本身手动管理,确定既麻烦又容易出错。webpack

3.怎么用

在安装了 node 以后,就可使用 npm 命令了。web

二.经常使用命令

1.初始化

在当前目录中生成package.json 文件(项目描述文件)npm

$ 没有别的意思,表明这些代码是终端运行的json

$ npm init   
$ npm init -y

两者均可以初始化生成package.json配置文件gulp

npm init 会有不少提问让你输入当前配置项bootstrap

npm init -y 直接跳过全部提问,生成默认的配置项

2.安装生产环境依赖包

生产依赖包指的是无论在开发时仍是上线以后项目都须要使用到的。好比 jQuery、bootstrap、lodash 等。

//默认安装最新版本
$ npm install 包名

//安装指定版本 version版本,好比 npm install gulp@3.9.1
$ npm install 包名@ <version>

//安装指定的tag版本
$ npm install 包名@ <tag>
  • npm install 能够简写成npm i
  • 会写入到package.json 文件中的dependencies配置中.之前须要加 --save 或 -s参数.如今不须要了.

3.安装开发依赖包

开发依赖包指的是仅在开发过程当中须要使用到的。好比 gulp、webpack、nodemon 等工具类型的依赖包。

//默认安装最新版本
  $ npm install 包名 --save-dev
  //安装指定的版本
  $ npm install 包名@<version>  --save-dev
  //安装指定的tag版本
  $ npm install 包名@<version>  --save-dev
  • –save-dev 能够简写成 -D
  • 会写入到package.json文件中的devDependencies配置中

4.更新依赖包

//更新所有依赖包
	$ npm update

	//更新指定的依赖包
	$ npm update 包名

来举个栗子.

$ npm i gulp@3.9.1 -D

注意:更新依赖包时会根据 package.json 文件中依赖包的前缀符号作不一样处理**

image.png

这里咱们安装了gulp@3.9.1的版本,而后使用npm update 更新依赖包,发现了一个问题,咱们目前的gulp版本应该是4.0.2的版本,为何没有升级呢?

先了解下版本号的小知识

x.y.z

  • x - 主版本,若是代码有一些不向下兼容的更新时,就须要对 x 作 + 1
  • y - 次版本,若是代码有一些向下兼容的新功能或修改功能的话,就须要对 y 作 + 1
  • z - 修订版本,若是代码有一些bug修复之类的,就对 z 作 + 1

来个问题,当前gulp3.x的最新版本是3.9.1 ,若是咱们安装的是3.8.x,而后npm update gulp 时,能更新吗?
答案是:能

还有个问题:package.json中的依赖包版本号前面有个^和~表明什么意思?
二者的相同点,都是为了处理如何更新的问题
区别是:
^ 锁定主版本,更新到最新的次版本+修订版
^ 3.8.11 => 3.9.1
~ 锁定主版本与次版本,更新到最新的修订版
~ 3.8.0 => 3.8.11

另外,除版本号以外还有些修饰的词,咱们在使用软件中也常常见到

除了版本号以外还有一些修饰的词,好比:

  1. alpha:内部版本
  2. beta:测试版本
  3. rc:即将做为正式版发布
  4. lts:长期维护版本

经过版本号小知识,咱们就能够知道,为何上面gulp版本没有升级到4.0.2的版本了,由于更新版本是不会更新到主版本 的,由于4.x的版本以后,作了不向下兼容的更新,担忧当前项目相关的gulp,跑不起来,npm也怕这种状况发生,就对咱们的版本作了锁定,因此更新不了.

5.安装项目所有依赖

项目的依赖包是存放在项目的 node_modules 文件夹中的,项目依赖多的时候,这个文件夹会很是大。版本管理时都会忽略这个文件夹。
项目克隆下来以后,若是按照 package.json 中的依赖项一个一个手动去安装,将很是费时费力。
这时能够直接使用 npm install 命令。它会依据 package.json 将所有依赖都安装好。

$ npm install

6.全局安装

全局通常安装的是一些工具类型的。好比 nodemon、live-server、gulp、webpack、@vue/cli、create-react-app 等

$ npm install 包名  -global

能够缩写为 npm i 包名 -g

  • 1.全局安装的工具包,存放在哪里?
    C:\Users\xxx用户\AppData\Roaming\npm
  • 2.有些时候,可能会出现命令缺失的问题
    好比报 "nodemon"不是内部或外部命令这类错误

能够这样解决:

  • a.去全局安装的工具包目录下查找是否的确有 nodemon
  • b.查看系统环境变量是否将 工具包目录 添加到了 path 配置中。(!不要随意去乱改 !)
  • c.从新打开个终端,再试试。

7.卸载包

//卸载当前项目下的
$ npm uninstall 包名
//卸载全局的
$ npm uninstall 包名 -g

8.清除缓存数据

//若是报错-4048时使用
$ npm cache verify

三,npm换源

下载第三方依赖包时默认是从国外的服务器下载的。因为种种缘由,下载的速度不尽如意。
这时能够采用淘宝的镜像源

1.查询npm源地址

$ npm config get registry

2.修改npm 源地址

$ npm config set registry  源地址

*. 淘宝镜像源地址:https://registry.npm.taobao.org/
*. 默认源地址:https://registry.npmjs.org/

3.npm 源的配置文件地址在哪里

C:\Users\xx用户.npmrc

四. npm script(npm脚本)

有时候咱们须要经过各类命令来启动项目或者作其余的事情,好比说:

  • node index.js
  • gulp
    上面这两个命令仍是比较简单容易记忆,可是若是是这个命令呢
nodemon index.js --hello --world --abc --ejg (随意写的长命令,举个栗子而已)

若是咱们每次启动,去在终端写这样的命令,确定是不明智的,这时就可使用npm脚本

npm脚本,就是将一些命令写入到脚本中,后续运行脚本就行了,脚本记忆起来是很是简单的也是能够直接去找到的脚本代码

npm脚本是写在 package.json文件中的script字段中

{
 "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "hello":"node index.js"
  }
}

script中每一个键值对就是一个脚本命令,key是脚本名,value是这个脚本的操做

运行脚本,使用npm run 脚本名 来运行便可

有个特殊的脚本 start,若是脚本名是start,那么能够不加run 直接npm start 便可

上面全部介绍的是npm包资源管理器的基础操做,下面总结下命令:

生成 package.json 配置文件
$ npm init

$ npm init -y  跳过全部提问

安装包

本地安装(当前项目能访问到)
$ npm install 包名

全局安装(其余项目都能访问到)
$ npm install 包名 -global

缩写形式
$ npm i 包名 -g

项目依赖(添加到dependencies)
$ npm install 包名 -save
项目上线须要用到的包,缩写 $ npm install 包名 -S (大写)

开发依赖(添加到devDependencies)
$ npm install 包名 --save-dev
开发测试须要用到的包,缩写 $ npm install 包名 -D (大写)

移除依赖模块
$ npm uninstall 包名 -save
$ npm uninstall 包名 --save-dev

清除缓存数据
npm cache verify
如报错 -4048 时使用

淘宝 NPM 镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org
$ npm install 包名 -D (大写)

移除依赖模块
$ npm uninstall 包名 -save
$ npm uninstall 包名 --save-dev

清除缓存数据
npm cache verify
如报错 -4048 时使用

淘宝 NPM 镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org