npm介绍
npm
前言:我们在日常使用npm下载包的时候,可能就是在网上搜一下下载教程,然后按照那些文章中所介绍的命令去下载。我相信在执行那些命令的时候,大部分人都不知道,到底为什么要这样子写,只知道使用这些命令可以下载到自己想使用的包。如果你想了解那些命令是什么意思的话,那么希望这篇文章可以带给你一些收获。
认识npm
npm是一个NodeJS包管理器和分发工具,当我们需要使用npm命令的时候,我们需要安装一下Node.js,不然我们就不能使用npm命令。
Node.js下载网址:https://nodejs.org/en/download/
我们会看到如下界面:
我们会看到有一个LTS版本和一个Current版本,那么我们该如何选择呢?
我来先给咱们解释一下:其实从版本号就可以看出一个新一个老。Current就是当前最新的版本,最新的功能特性都在这里面了。就是拿来给你试用测试的,要是大家都用得还好,功能稳定了,就发布到LTS版本。所以LTS就是稳定版。
在这里我建议大家选择LTS版本的,它不仅可以满足我们的日常学习,而且主要的是它用着稳定,简直香喷喷。
当我们安装好Node之后,因为npm是Node自带的一个包管理器,所以所我们不需要安装,就可以直接使用npm去运行命令啦。
如果想查看自己的node的版本号,我们可以使用win+R组合键,打开cmd,在里面输入node -v就可以查看自己所安装的Node的版本号了。
npm命令
在这里我会将平时经常用到的npm命令展示给大家。
1.下载包命令
npm install 包的名称 // 也可以简写为 npm i 包的名称
在这里我给大家推荐一个搜索需要使用的包的网址:https://www.npmjs.com/,在这个网站上面,只要你有足够的耐心去寻找所想要的包,你可以找到好多优秀好用的包。同时也介绍了下载这包的命令。
但是大家在下载一些包的时候,是不是速度经常很慢很慢。这是因为npm默认的是当国外的网站上下载,所以说速度会很慢很慢。在这里我们为了提高下载的速度,可以使用国内的淘宝镜像。
那我们如果知道自己当前的默认下载路径呢,在这里我们可以使用:
npm config get registry //查询当前自己所使用的默认下载路径
当我们需要切换到淘宝镜像的时候,我们可以执行:
npm config set registry=https://registry.npm.taobao.org/ //切换到淘宝镜像
到这里你有没有觉得上面的切换代码的方式很麻烦,需要写好长一串代码,而且一个不留神写错了,也运行不了。在这里我给大家推荐一个很好用的小工具,它可以快速的查看和切换下包的镜像源-------nrm。我们可以通过
npm i nrm -g // 将nrm安装为全局可用的工具
//查看所有的镜像源
nrm ls
// 切换下包的镜像
nrm use taobao
当我们执行了nrm ls
命令后,可以得到下图:
我们可以根据返回的目录,选择想要使用的镜像源,然后输入 nrm use [镜像源]
,就可以切换到相应的镜像源去下载了。是不是使用了这个工具之后就方便了好多。
全局包命令:
会将包安装为全局包,默认会安装在:C:\Users\XXXXX\AppData\Roaming\npm\node_modules
npm install 包名 -g
我们在平时的下载中也会经常遇到:
npm i 包名 -D // devDependencies,开发依赖包,只在开发期间使用
或
npm i 包名 --save-dev // devDependencies
或
npm i 包名 --save // dependencies,核心依赖包,在开发期间和项目上线之后都会用到
以上三种中,我们前两种没啥区别(-D
就是--save-dev
的缩写)。在我们安装包的时候,会在我们多安装的目录里面,创建一个packpage.json
和packpage-lock.json
的配置文件,如果没有packpage.json
文件的话,我们可以使用npm init -y
来创建配置文件。在pack-lock.json
中写入了一些项目的名称、下载的包的名称、版本号、下载地址等。在packpage.json
中,会存在dependencies
和devDependencies
,当我们使用前两个命令时,下载的包名添加在devDependencies
中,使用最后一个会添加包名到dependencies
中。
现在我来解释以下:,一些包我们在发布后用不到它,而只是在我们开发才用到它,那么就使用--save-dev
比较好,在devDependencies
下创建模块。而dependencies
下的模块,则是我们发布后还需要依赖的模块,譬如像jQuery库或者Angular框架类似的,我们在开发完后后肯定还要依赖它们,否则就运行不了。
2.卸载包命令
npm remove 包名 [-g] 简写 npm rm 包名
或
npm uninstall 包名
需要注意的是:以上两个没啥区别 只不过是 remove 是 uninstall 的别名,它的别名还有,un、rm、unlink
3.更新包
npm update 包名 简写:npm up 包名
4.查看已安装的包
npm list [-g] 简写 npm ls [-g]
5.清除缓存
npm cache clean --force
6.npm 查看命令
npm root # 查看项目中模块所在的目录
npm root -g # 查看全局安装的模块所在目录
npm list 或者 npm ls # 查看本地已安装模块的清单列表
npm view jquery dependencies # 查看某个包对于各种包的依赖关系
npm view jquery version # 查看jquery最新的版本号
npm view jquery versions # 查看所有jquery历史版本号(很实用)
npm view jquery # 查看最新的jquery版本的信息
npm info jquery # 查看jquery的详细信息,等同于上面的npm view jquery
npm list jquery 或 npm ls jquery # 查看本地已安装的jquery的详细信息
npm view jquery repository.url # 查看jquery包的来源地址
- npm 其他命令
npm cache clean # 清除npm的缓存
npm prune # 清除项目中没有被使用的包
npm outdated # 检查模块是否已经过时
npm repo jquery # 会打开默认浏览器跳转到github中jquery的页面
npm docs jquery # 会打开默认浏览器跳转到github中jquery的README.MD文件信息
npm home jquery # 会打开默认浏览器跳转到github中jquery的主页
模块加载机制
优先从缓存缓存中加载
模块在第一次加载后会被缓存。这也就意味了多次调用require不会导致代码被执行多次。
内置模块加载的优先级最高
自定义模块:
必须指定以 ./ 或 …/开头的路径标识符,若不指定,node则会将内置模块或者第三方模块进行加载。同时,如果省略文件的扩展名,则会按照顺序分别尝试加载以下文件:
1.按照确切的文件名进行加载
2.补全.js扩展名进行加载
3.不全.json扩展名进行加载
4.不全.node扩展名进行加载
5.加载失败,终端报错
第三方模块
如果传递给require()的模块不是一个内置模块,也不是自定义模块,则Node.js
会从当前模块的目录开始,尝试从/node_modules
文价夹中加载第三方模块。
把目录作为加载模块
再将目录作为加载模块时,
1.首先,会查找目录下面的packpage.json
的文件,然后在里面寻找main属性,作为require的加载的入口。
2.如果第一步查找失败,则会在文件夹下面查找index.js
文件
3.如以上两步全都失败,则会打印错误信息,报告,模块缺失