跳到主要内容

NPM包管理

NPM概述

NPM(Node Package Manager)是Node.js的包管理器,用于安装、共享和管理Node.js模块。它是Node.js生态系统的重要组成部分,拥有超过100万个可用包,为开发者提供了丰富的资源。

NPM由两部分组成:

  • 命令行工具:用于包的安装、更新、卸载等操作
  • 在线仓库:存储和分发Node.js包

NPM的安装

NPM通常随Node.js一起安装。安装Node.js后,可以通过以下命令检查NPM是否安装成功:

npm -v

如果需要更新NPM到最新版本:

npm install -g npm@latest

项目初始化

在开始一个Node.js项目之前,通常需要初始化一个新的npm项目。

# 创建新目录
mkdir my-project
cd my-project

# 初始化npm项目
npm init

运行npm init后,会提示你输入一些项目信息,包括项目名称、版本、描述、入口文件、测试命令、仓库地址、关键词、作者和许可证等。

如果想要快速创建一个默认的package.json文件,可以使用:

npm init -y

package.json文件

package.json是npm项目的配置文件,它包含了项目的元数据和依赖信息。一个典型的package.json文件如下:

{
"name": "my-project",
"version": "1.0.0",
"description": "My Node.js project",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": ["node", "javascript"],
"author": "Your Name",
"license": "MIT",
"dependencies": {},
"devDependencies": {}
}

安装包

安装生产依赖

生产依赖是项目运行时所必需的包。

npm install express
# 或简写为
npm i express

安装后,包会被添加到package.jsondependencies字段中。

安装开发依赖

开发依赖是仅在开发过程中需要的包,如测试框架、构建工具等。

npm install --save-dev mocha
# 或简写为
npm i -D mocha

安装后,包会被添加到package.jsondevDependencies字段中。

全局安装

全局安装的包可以在任何项目中使用,通常用于安装命令行工具。

npm install -g nodemon

更新包

更新指定包

npm update express

查看可更新的包

npm outdated

更新所有包

npm update

卸载包

npm uninstall express
# 或简写为
npm un express

如果要同时从package.json中移除依赖记录:

npm uninstall --save express
# 或
npm un -S express

卸载开发依赖:

npm uninstall --save-dev mocha
# 或
npm un -D mocha

查看包信息

查看已安装的包

npm list
# 或简写为
npm ls

查看全局已安装的包:

npm list -g

查看包的详细信息

npm view express

查看包的特定版本

npm view express versions

安装特定版本的包

npm install express@4.17.1

语义化版本

npm使用语义化版本控制(Semantic Versioning),版本号格式为X.Y.Z

  • X:主版本号(Major):不兼容的API更改
  • Y:次版本号(Minor):向下兼容的功能性新增
  • Z:修订号(Patch):向下兼容的问题修正

package.json中,依赖版本前通常会有前缀符号,表示版本范围:

  • ^:允许次版本和修订号更新,如^1.2.3允许更新到1.x.x的最新版本
  • ~:允许修订号更新,如~1.2.3允许更新到1.2.x的最新版本
  • *:允许任何版本更新
  • 无符号:固定版本

脚本命令

package.jsonscripts字段中,可以定义一些常用的命令,然后通过npm run <script>来执行。

{
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "mocha tests/",
"build": "webpack"
}
}

执行脚本命令:

npm run start
npm run dev
npm run test
npm run build

对于一些常用的脚本命令,如starttest,可以直接使用:

npm start
npm test

npm缓存

npm会缓存已下载的包,以提高安装速度。

查看缓存

npm cache ls

清理缓存

npm cache clean --force

package-lock.json文件

package-lock.json文件会在npm install执行时自动生成,它记录了项目依赖的确切版本、依赖树结构以及每个包的下载地址。这个文件可以确保在不同环境下安装相同版本的依赖,避免版本不一致导致的问题。

npm ci命令

npm ci命令用于在持续集成环境中安装依赖,它会严格按照package-lock.json中的版本安装,而不会更新package-lock.json

npm ci

npx工具

npx是npm 5.2.0版本开始内置的工具,它允许你运行本地或远程的npm包命令,而无需全局安装。

# 运行本地安装的命令
npx webpack

# 运行远程命令
npx create-react-app my-app

发布自己的包

如果想要将自己的包发布到npm仓库,可以按照以下步骤进行:

  1. 确保你有npm账号,如果没有,可以通过npm adduser创建
  2. 登录npm账号:npm login
  3. 确保package.json中的信息正确
  4. 发布包:npm publish

最佳实践

  • 使用.gitignore文件排除node_modules目录
  • 提交package-lock.json文件到版本控制系统
  • 明确指定依赖版本,避免版本冲突
  • 合理使用开发依赖和生产依赖
  • 为常用任务创建npm脚本命令
  • 定期更新依赖,修复安全漏洞
  • 考虑使用Yarn或pnpm等替代包管理器,提高安装速度