npm

包管理器npm

NPM(Node Package Manager)是一个 JavaScript 包管理工具,也是 Node.js 的默认包管理器。
类似于python的pip包管理器,NPM 可以帮助你安装并管理项目所需的各种第三方库(包)。例如,可以通过简单的命令来安装、更新、或删除依赖。
执行

npm -v

如果输出版本号,就说明安装了,

相关命令

命令 介绍
npm init 初始化工程
npm init -y 可以跳过向导,快速初始化工程
npm install 简写npm i,自动下载package.json中dependencies中全部的依赖。
npm install 包名 简写npm i 包名,下载指定包。
npm install --save 包名 简写npm i -S 包名,下载并保存依赖项(package.json中dependencies) 5.0.0版本之后的npm会自动保存到dependencies
npm uninstall 包名 简写npm un 包名,只删除,如果有依赖项会依然保存
npm uninstall --save 包名 简写npm un -S 包名,删除的同时也会将依赖信息删除
npm help 查看使用帮助
npm 命令 --help 查看对应命令的使用帮助,例如我忘记uninstall的简写,那么我可以输入npm uninstall --help

初始化工程

使用npm init命令可以把当前文件夹初始化成一个“包”,即一个标准的nodejs工程

npm init

npm init -y		# 全面使用默认值来初始化项目

按照提示输入相关信息,如果是用默认值则直接回车即可。
执行完npm init后会生成package.json文件,这个是包的配置文件,相当于maven的pom.xml,我们之后也可以根据需要进行修改。

使用npm命令安装模块

npm安装nodejs模块的语法格式如下

npm install <Module Name>

例如

npm install express

安装好之后,在该目录下已经出现了一个node_modules文件夹和package-lock.json文件。

  • node_modules文件夹:用于存放下载的js库(相当于maven的本地仓库)。
  • package-lock.json文件:确定当前安装的包的依赖,以便后续重新安装的时候生成相同的依赖,而忽略项目开发过程中有些依赖已经发生的更新。
var express = require('express');

我们再打开package.json文件,发现刚才下载的jquery已经添加到依赖列表中了,依赖包会被添加到dependencies节点下,
安装时想指定特定的版本:

npm install jquery@3.2.1

全局安装

在 npm 中,-g 是 --global 的缩写,表示全局安装。它的作用是将一个包(package)安装到系统的全局环境中,而不是当前项目的本地目录。全局安装后的包可以在系统的任何目录下通过命令行直接使用。
全局安装适用于需要跨项目使用的命令行工具或全局工具。例如:vue-cli(Vue 脚手架)、create-react-app(React 脚手架)、nodemon(自动重启 Node 服务)等。
全局安装的路径:

  • Windows: C:\Users\<用户名>\AppData\Roaming\npm\node_modules
  • macOS/Linux: /usr/local/lib/node_modules
    我们使用npm install <packageName>就能在线下载依赖到本地的node_modules目录,但我们项目打包时通常不会打包项目的node_modules以减轻项目大小。当项目发送给了团队的其他成员时只有源代码而没有项目所需的依赖,此时项目是无法运行的。

因此我们安装某个依赖时,除了下载依赖项到本地的node_modules目录外,还应该记录当前项目的依赖项配置,这样就算其他人获得到了项目源代码也可以按照依赖项配置来下载当前项目所需依赖。
在安装(npm install xxx)某个依赖项时,可以通过配置--save--save-dev来将该依赖项记录下来

Tips:从npm 5.0.0版本开始,默认行为改变了。现在当运行npm install xxx时,npm会自动将包添加到dependencies中,相当于之前需要–save的效果。

例如

{
    // jquery是开发依赖
  "devDependencies": {
    "jquery": "^3.7.1"
  },
      // bootstrap是生产依赖
  "dependencies": {
    "bootstrap": "^5.3.5"
  }
}

项目运行时必须依赖的包(无论是本地开发、生产环境还是其他环境),例如一些框架或常用库,如:JQuery、Bootstrap、Vue、axios等依赖,如果缺少这些依赖,代码将无法运行,这些依赖就应该是dependencies;

一些仅在开发阶段需要的依赖,生产环境不需要。例如一些构建、转码、测试工具等,如webpack、babel、eslint、jest等,这些依赖投入到生产环境中就再也不需要了,这些依赖就应该是devDependencies;

package.json和package-lock.json文件

package.json文件
package.json定义了这个项目所需要的各种模块,以及项目的配置信息,包括名称、版本、许可证、依赖模块等元数据。

当执行 npm install 的时候,node 会先从 package.json 文件中读取所有 dependencies 信息,然后根据 dependencies 中的信息与 node_modules 中的模块进行对比,没有的直接下载,已有的检查更新。另外,package.json 文件只记录你通过 npm install 方式安装的模块信息,而这些模块所依赖的其他子模块的信息不会记录。
package-lock.json文件
package.json文件中保存着项目的依赖以及这些依赖的版本信息,但是这些依赖的版本并非是一个固定的,而是可以随着时间的流逝(例如该依赖发布了新版本)自动更新的。因此,同一个package.json在不同时间点执行npm install可能会导致项目实际使用的依赖版本不同。
package-lock.json文件正是来解决这个问题的。
package-lock.json 文件会保存 node_modules 中所有包的信息,包括精确版本 version 和下载地址 resolved 以及依赖关系 dependencies 等,用以记录当前状态下实际安装的各个模块的具体来源和版本号。这样 npm install 时速度就会提升。

当项目中已有package-lock.json 文件,在安装项目依赖时,将以该文件为主进行解析安装指定版本依赖包,而不是使用 package.json 来解析和安装模块。因为 package.json 指定的版本不够具体,而package-lock 为每个模块及其每个依赖项指定了版本,位置和完整性哈希,所以它每次的安装都是相同的。
项目中存在了package-lock.json当下载依赖时会以该文件中锁定的版本来下载,但有时我们也希望更新一下项目依赖,此时可以执行npm update来更新项目的依赖版本,并且更新package-lock.json锁定的版本。
如果项目中没有package-lock.json可以使用如下命令来构建一个package-lock.json:

npm install --package-lock-only
posted @ 2026-08-21 11:34  X|n  阅读(4)  评论(0)    收藏  举报