:NPM 使用介绍)
一、NPM 简介NPMNode Package Manager是一个 JavaScript 包管理工具也是 Node.js 的默认包管理器。NPM 允许开发者轻松地下载、安装、共享、管理项目的依赖库和工具。NPM 是 Node.js 自带的包管理工具因此通常你只需安装 Node.jsNPM 就会自动安装在系统中。主要功能功能说明包管理帮助安装并管理项目所需的各种第三方库包可以通过简单的命令来安装、更新或删除依赖版本管理支持版本控制允许锁定某个特定版本的依赖或根据需求选择最新的版本包发布允许开发者将自己的库发布到 NPM 仓库中其他开发者可以通过 NPM 下载并使用这些库命令行工具提供了强大的命令行工具可以用于安装包、运行脚本、初始化项目等多种操作二、验证 NPM 安装由于新版的 Node.js 已经集成了 NPM可以通过输入以下命令来测试是否成功安装npm -v出现版本提示表示安装成功2.3.0升级 NPM如果你安装的是旧版本的 npm可以通过以下命令升级# macOS/Linux sudo npm install npm -g # Windows npm install npm -g三、使用 npm 命令安装模块基本语法npm install Module Name安装示例以下实例使用 npm 命令安装常用的 Node.js Web 框架模块expressnpm install express安装好之后express 包就放在了工程目录下的node_modules目录中因此在代码中只需要通过require(express)的方式引入无需指定第三方包路径var express require(express);四、全局安装与本地安装npm 的包安装分为本地安装local和全局安装global两种差别在于有没有-g参数。本地安装npm install express # 本地安装作用范围将包安装到当前项目的node_modules目录中用途项目依赖每个项目可以有自己的依赖版本版本管理通过package.json和package-lock.json管理全局安装npm install express -g # 全局安装作用范围将包安装到系统级别的目录中用途命令行工具或需要在多个项目中使用的包版本管理不在package.json中体现本地安装 vs 全局安装对比特性本地安装全局安装安装范围仅在当前项目中可用在系统的全局环境中可用命令使用npm install package-namenpm install -g package-name安装位置node_modules目录系统全局目录依 OS 而异使用场景项目依赖库、框架CLI 工具、项目生成器访问方式通过require()或import使用在命令行中直接使用依赖声明在package.json中记录不在package.json中记录版本控制不同项目中可用不同版本系统中只保留一个版本权限问题无需特殊权限可能需要管理员权限全局安装 express 示例npm install express -g安装过程输出express4.13.3 node_modules/express ├── escape-html1.0.2 ├── range-parser1.0.2 ├── merge-descriptors1.0.0 ├── array-flatten1.1.1 ├── cookie0.1.3 ├── utils-merge1.0.0 ├── parseurl1.3.0 ├── cookie-signature1.0.6 ├── methods1.1.1 ├── fresh0.3.0 ├── vary1.0.1 ├── path-to-regexp0.1.7 ├── content-type1.0.1 ├── etag1.7.0 ├── serve-static1.10.0 ├── content-disposition0.5.0 ├── depd1.0.1 ├── qs4.0.0 ├── finalhandler0.4.0 (unpipe1.0.0) ├── on-finished2.3.0 (ee-first1.1.1) ├── proxy-addr1.0.8 (forwarded0.1.0, ipaddr.js1.0.1) ├── debug2.2.0 (ms0.7.1) ├── type-is1.6.8 (media-typer0.3.0, mime-types2.1.6) ├── accepts1.2.12 (negotiator0.5.3, mime-types2.1.6) └── send0.13.0 (destroy1.0.3, statuses1.2.1, ms0.7.1, mime1.3.4, http-errors1.3.1)五、查看安装信息查看所有全局安装的模块npm list -g输出示例├─┬ cnpm4.3.2 │ ├── auto-correct1.0.0 │ ├── bagpipe0.3.5 │ ├── colors1.1.2 │ ├─┬ commander2.9.0 │ │ └── graceful-readlink1.0.1 │ ├─┬ cross-spawn0.2.9 │ │ └── lru-cache2.7.3 ……查看某个模块的版本号npm list grunt输出projectNameprojectVersion /path/to/project/folder └── grunt0.4.1六、卸载模块npm uninstall express卸载后可以到/node_modules/目录下查看包是否还存在或者使用以下命令查看npm ls七、更新模块npm update express八、搜索模块npm search express九、创建模块生成 package.json创建模块时package.json文件是必不可少的。使用 NPM 生成package.json文件npm init运行后会进入交互式问答This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See npm help json for definitive documentation on these fields and exactly what they do. Use npm install pkg --save afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. name: (node_modules) runoob # 模块名 version: (1.0.0) description: Node.js 测试模块(www.runoob.com) # 描述 entry point: (index.js) test command: make test git repository: https://github.com/runoob/runoob.git # Github 地址 keywords: author: license: (ISC) About to write to ……/node_modules/package.json: # 生成地址 { name: runoob, version: 1.0.0, description: Node.js 测试模块(www.runoob.com), …… } Is this ok? (yes) yes注册用户并发布模块# 在 npm 资源库中注册用户 npm adduser Username: mcmohd Password: Email: (this IS public) mcmohdgmail.com # 发布模块 npm publish如果以上步骤操作正确就可以像其他模块一样使用 npm 来安装。十、版本号语义化版本控制SemVerNPM 使用语义版本号来管理代码格式为MAJOR.MINOR.PATCH版本号说明MAJOR主版本做了不兼容的 API 改动时增加例如2.0.0MINOR次版本添加新功能但保持向后兼容时增加例如1.1.0PATCH补丁版本修复 bug 而不增加新功能时增加例如1.0.1额外标记预发布版本如1.0.0-alpha或1.0.0-beta.1表示该版本仍在测试中构建元数据如1.0.0build.1提供有关构建的信息安装示例# 安装特定版本 npm install package-name1.2.3 # 安装最新的主版本1.x.x 的最新版本 npm install package-name^1.2.3十一、NPM 常用命令命令说明npm init初始化一个新的 package.json 文件npm init -y快速创建带有默认设置的 package.json 文件npm install package-name本地安装指定包npm install -g package-name全局安装指定包npm install安装 package.json 中列出的所有依赖npm install package-name --save-dev安装包并添加到 devDependenciesnpm update package-name更新指定的依赖包npm uninstall package-name卸载指定的依赖包npm uninstall -g package-name全局卸载指定的包npm list查看当前项目的已安装依赖包列表npm list -g --depth0查看全局已安装的依赖包列表不展开依赖树npm info package-name查看包的详细信息npm login登录到 NPM 账号npm publish发布当前包到 NPM 注册表npm unpublish package-name从 NPM 注册表中撤销发布的包限 24 小时内npm cache clean --force清理 NPM 缓存npm audit检查项目依赖中的安全漏洞npm audit fix自动修复已知的漏洞npm run script-name运行 package.json 中定义的脚本npm start运行 start 脚本等同于npm run startnpm test运行 test 脚本npm outdated列出有可更新版本的依赖包npm version patch/minor/major更新 package.json 中的版本号npm ci使用 package-lock.json 快速安装依赖适用于 CI/CD十二、使用淘宝 NPM 镜像由于国内直接使用 npm 官方镜像非常慢可以使用淘宝提供的镜像来加速包的下载和安装。安装 cnpmnpm install -g cnpm --registryhttps://registry.npmmirror.com使用 cnpmcnpm install [name]十三、package.json 详解package.json是 Node.js 项目中的核心配置文件包含了项目的元数据、依赖、脚本等信息。基本字段字段说明name项目名称唯一使用小写字母和连字符version项目版本号遵循语义化版本控制description项目的简短描述main项目的入口文件scripts定义命令行脚本可在项目中执行特定任务dependencies项目运行所需的所有依赖包及其版本devDependencies只在开发过程中需要的依赖包keywords关键词有助于在 npm 搜索中找到项目author项目的作者信息license项目的许可证类型repository代码仓库信息engines指定项目兼容的 Node.js 版本典型 package.json 示例{ name: my-project, version: 1.0.0, description: A simple Node.js project, main: app.js, scripts: { start: node app.js, test: echo \Error: no test specified\ exit 1 }, dependencies: { express: ^4.17.1 }, devDependencies: { nodemon: ^2.0.20 }, keywords: [node, npm, example], author: Your Name, license: MIT }依赖管理dependencies存储项目运行所需的依赖。dependencies: { express: ^4.17.1 }安装时使用npm install expressdevDependencies存储项目开发期间需要的依赖。devDependencies: { nodemon: ^2.0.20 }安装时使用npm install nodemon --save-devscripts 字段scripts字段用于定义可通过npm run script执行的命令scripts: { start: node app.js, test: jest, build: webpack --mode production, dev: nodemon app.js }运行示例npm run dev # 执行 nodemon app.js npm start # 等同于 node app.js版本号中的符号说明符号说明^插入符安装与当前主版本兼容的最新版本如^4.17.1会安装4.x.x中的最新版本~波浪号安装与当前次版本兼容的最新版本如~4.17.1会安装4.17.x中的最新版本package.json 常用命令# 初始化 package.json npm init # 查看项目依赖 npm list --depth0 # 更新依赖 npm update package-name使用 package.json 的好处依赖管理集中管理项目的依赖项及其版本自动化任务通过scripts字段方便地运行常见任务版本控制确保项目及其依赖版本的一致性描述项目为项目提供元数据信息便于发布和共享注意事项保持package.json文件的简洁和准确使用package-lock.json锁定依赖版本确保一致性定期更新依赖利用最新的功能和安全修复更多信息可以查阅npmmirror 镜像站