npm基本使用
node.js
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境。在任何地方安装了node,那么就可以运行JavaScript。所以在服务器上就可以运行js了。js就全栈了。
node安装的同时就安装了npm。
直接去官网下载,双击安装即可。安装完毕之后,可以在命令行中使用node -v查看是否安装成功,以及对应的版本号。当安装好node之后会自带一个npm工具。所以npm不需要单独安装。
npm介绍
npm是 node package manager 简写。意思是 node 的包管理工具。node 的包其实就是辅助node开发的插件(包)。这个包里面有node的后台包,和所有的前端包。作为前端开发人员,开发项目的时候,会用到很多很多的插件(包/依赖),而且插件的版本是固定的,所以当团队合作的时候,就需要整合所有相关的包(工作量非常大,尤其是在以后的框架项目中,用到的插件成千上万个),那么npm就是一个管理这些包的工具,所以一会后的项目基本使用 npm 去管理项目的依赖。
如何使用npm管理项目依赖
当你在项目中想要使用某个依赖的时候,需要使用 npm install packageName下载到项目中使用。
需要将项目变成node项目(因为node项目中才能使用npm管理依赖),在项目文件夹内打开命令行工具执行 npm init ,会自动生成一个 package.json 文件,这个文件就是node项目的标志。
使用 npm 下载 jquery。执行 npm install jquery 在项目中下载 jQuery(最新版本)。下载完成后项目内多了一个 node_modules 文件夹,下载的依赖存在这里面。项目内的package.json文件内会多一个 dependencies 里面写了安装的依赖和对应的版本号
当使用了很多插件之后,node_modules 文件就会越来越大,传输很不方便,但是用了npm管理的,上传git的时候可以添加忽略文件忽略node_modules文件夹。然后再次使用的时候,直接在项目内运行 npm i 命令,就会按照 package.json 内记录的所有项目依赖以及对性的版本进行下载。
依赖的导入导出
导入:
通过node通过的 require :const package = require(packageName);
import package from "path"
导出:module.exports = { ...data };
更多请查看: node模块化 和 require原理 和 ES6的export和import
npm常见命令
// 等待下载包的时候默认没有任何的提示,可以使用 将所有的http请求打印到命令行中
npm config set loglevel=http
// 有些时候 npm官方的包下载很慢,可以使用替换下载的镜像源 通常我们会使用cnpm解决此类问题 详情看下文中的链接
npm config set registry https://registry.npm.taobao.org
// 清理全局缓存 缓存概念请看下文的 「npm install 原理」
npm cache clean --force
// 重新构建依赖
npm rebuild
// 获取缓存文件位置
npm config get cache
// 初始化node项目
npm init
/**
* 安装和卸载packages
* install可以简写为i
* uniinstall可简写为uni
* 末尾添加-g为下载或卸载全局包
* 末尾添加-D为只添加开发依赖,及devDependencies中而不是dependencies
*/
// 根据package.json安装packages
npm install
// 下载对应的包的版本
npm install 包名@版本号
// 卸载对应包
npm uniinstall 包名 卸载包
cnpm介绍:cnpm的简介与使用
npm 命令官方文档:https://docs.npmjs.com/cli/v9/commands/
npm install原理
如果不了解 package.json 和 package-lock 这两个文件的作用,建议通过下面这篇文章了解了这两个文件的作用后再理解npm install的原理
详解package.json和package-lock
了解了package.json与package-lock.json的区别后,相信大家就很好的理解下面的图文了
如上图所示npm install 原理图解析
npm install会检测是否存在package-lock.json文件:
一、没有lock文件
分析依赖关系,这是因为我们包会依赖其他的包,并且会多个包之间产生相同的依赖的关系。
从registry仓库中下载压缩包(如果我们设置了镜像,那么会从镜像服务器下载压缩包)。
获取到压缩包后会对压缩包进行缓存(从npm5开始有的)。
将压缩包解压到项目的node_modules文件夹中。
二、有lock文件
检测lock中包的版本是否和package.json中一致(会按照semver版本规范检测)。
不一致,那么会重新构建依赖关系,直接会走顶层的流程。
一致的情况下,会去优先查找缓存,没有找到,会从registry仓库下载,直接走顶层流程。
查找到,会获取缓存中的压缩文件,并且将压缩文件解压到node_modules文件夹中。