npm(Node Package Manager)是一个用于管理 Node.js 包的工具,提供了丰富的命令和功能,帮助开发者安装、卸载、更新和管理项目依赖。
1. 主要使用方法
1.1 安装包
- 全局安装:安装包到全局目录,通常用于命令行工具。
npm install -g <package-name>
- 本地安装:安装包到项目目录的
node_modules
文件夹中。npm install <package-name>
- 安装并保存到
package.json
:- 生产依赖:保存到
dependencies
。npm install <package-name> --save
- 开发依赖:保存到
devDependencies
。npm install <package-name> --save-dev
- 生产依赖:保存到
1.2 卸载包
- 全局卸载:
npm uninstall -g <package-name>
- 本地卸载:
npm uninstall <package-name>
- 卸载并从
package.json
移除:- 生产依赖:
npm uninstall <package-name> --save
- 开发依赖:
npm uninstall <package-name> --save-dev
- 生产依赖:
1.3 更新包
- 全局更新:
npm update -g <package-name>
- 本地更新:
npm update <package-name>
- 更新所有包:
npm update
1.4 查看包信息
- 查看全局安装的包:
npm list -g --depth=0
- 查看本地安装的包:
npm list --depth=0
- 查看包的详细信息:
npm view <package-name>
1.5 运行脚本
- 运行
package.json
中定义的脚本:npm run <script-name>
- 运行默认的
start
脚本:npm start
1.6 发布包
- 登录 npm:
npm login
- 发布包:
npm publish
1.7 搜索包
- 搜索包:
npm search <keyword>
1.8 配置 npm
- 查看配置:
npm config list
- 设置配置:
npm config set <key> <value>
- 删除配置:
npm config delete <key>
2. 使用场景
2.1 项目初始化
- 场景:创建一个新的 Node.js 项目。
- 例子:使用
npm init
命令生成package.json
文件。npm init
2.2 依赖管理
- 场景:管理项目的依赖关系。
- 例子:安装
express
作为项目依赖。npm install express
2.3 脚本命令
- 场景:定义和运行项目脚本。
- 例子:定义一个启动脚本。
运行脚本:{ "name": "my-app", "version": "1.0.0", "scripts": { "start": "node index.js", "build": "webpack", "test": "mocha test/**/*.js" } }
npm start npm run build npm test
2.4 发布和共享
- 场景:发布项目到 npm 仓库,供其他开发者使用。
- 例子:发布项目到 npm。
npm publish
2.5 搜索和查看包信息
- 场景:查找和查看 npm 上的包信息。
- 例子:搜索
express
包。npm search express
2.6 配置管理
- 场景:配置 npm 的全局和局部设置。
- 例子:设置 npm 的 registry 为淘宝镜像。
npm config set registry https://registry.npmmirror.com
3. 底层原理
3.1 依赖解析
- 依赖树:npm 会解析
package.json
中的dependencies
和devDependencies
,构建一个依赖树,确保所有依赖都被正确安装。 - 版本范围:npm 支持多种版本范围符号,如
^
、~
和具体版本号,确保依赖的灵活性和兼容性。
3.2 包管理
- 包缓存:npm 会缓存已安装的包,避免重复下载,提高安装速度。
- 包锁定:npm 会生成
package-lock.json
文件,锁定依赖的具体版本,确保不同环境下的依赖一致性。
3.3 脚本执行
- 脚本命令:npm 会解析
package.json
中的scripts
部分,执行相应的命令。 - 环境变量:脚本命令可以使用环境变量,如
NODE_ENV
,来控制不同的运行环境。
3.4 发布和注册
- 注册:npm 有一个中央注册表,存储所有的包信息。
- 发布:开发者可以通过
npm publish
命令将包发布到注册表,供其他开发者使用。
4. 示例
假设你正在创建一个简单的 Node.js 应用,并使用 express
作为框架,同时需要一些开发工具来帮助你进行开发、构建和测试。
4.1 初始化项目
mkdir my-app
cd my-app
npm init -y
这将生成一个默认的 package.json
文件:
{
"name": "my-app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
4.2 安装生产依赖
npm install express
这将更新 package.json
文件,添加 express
依赖:
{
"name": "my-app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1"
}
}
4.3 安装开发依赖
npm install eslint mocha chai --save-dev
这将更新 package.json
文件,添加 eslint
、mocha
和 chai
到 devDependencies
部分:
{
"name": "my-app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "mocha test/**/*.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1"
},
"devDependencies": {
"eslint": "^7.32.0",
"mocha": "^9.1.3",
"chai": "^4.3.4"
}
}
4.4 配置 ESLint
生成 .eslintrc
文件:
npx eslint --init
按照提示选择合适的配置选项,生成 .eslintrc
文件。
4.5 创建测试文件
创建 test/index.test.js
文件:
const { expect } = require('chai');
const request = require('supertest');
const app = require('../index');
describe('GET /', () => {
it('should return "Hello, World!"', async () => {
const res = await request(app).get('/');
expect(res.status).to.equal(200);
expect(res.text).to.equal('Hello, World!');
});
});
4.6 创建入口文件
创建 index.js
文件:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, World!');
});
const port = 3000;
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}/`);
});
4.7 运行项目和测试
npm start
npm test
这将启动 Node.js 服务器,并运行测试用例。
5. 总结
npm 是一个强大的包管理工具,提供了丰富的命令和功能,帮助开发者安装、卸载、更新和管理项目依赖。通过合理使用 npm,开发者可以更好地组织和管理项目,确保项目的依赖一致性和可维护性。