目录
什么是npm
npm核心功能
npm 常用指令及其作用
执行npm i 发生了什么?
1. 解析命令与参数
2. 检查依赖文件
3. 依赖版本解析与树构建
4. 缓存检查与包下载
5. 解压包到 node_modules
6. 更新 package-lock.json
7. 处理特殊依赖类型
8. 执行生命周期脚本
9. 生成 node_modules/.bin 目录
10.示例流程
执行npm start 发生了什么?
1. 解析命令与 package.json 查找
2. 执行生命周期钩子
3. 环境变量与路径设置
4. 执行用户定义的脚本
5. 依赖工具链的启动(以 Create React App 为例)
6. 进程管理与信号处理
7. 常见场景与问题
场景 1:启动一个 Express 服务器
场景 2:启动前端开发服务器(如 Vue CLI)
常见问题:
8.总结
coress-env
为什么需要 cross-env?
coress-env核心功能
coress-env安装
coress-env基本用法
coress-env总结
npm、pnpm、yarm、bun、npx的差异
1. 核心定位与关联性
2. 核心差异对比
3. 命令对比
4. 使用场景示例
npm
pnpm
Yarn
Bun
npx
5.总结
常用命令行接口
1.基础操作
2.网络与端口
3.文件与目录
4.环境与模式
5.调试与日志
6.依赖管理
7.其他高频参数
8.总结
script文件解读
1. 基础开发命令
2. 测试与代码质量
3. 钩子脚本(Hooks)
4. 高级场景
5. 实用工具
6.完整的 package.json 示例
什么是npm
npm(Node Package Manager) 是 JavaScript 的包管理工具,也是 Node.js 的默认包管理器。它用于安装、共享和管理项目依赖,拥有全球最大的开源库生态系统之一(npm 官网)
npm核心功能
依赖管理
-
通过
package.json
文件记录项目依赖的包及其版本。 -
自动处理依赖树,解决版本冲突。
安装包
- 本地安装(项目依赖):
npm install <package-name>
- 本地安装(项目依赖):
npm install -g <package-name>
发布与共享
开发者可以发布自己的包到 npm 仓库,供他人使用
"scripts": {"start": "node app.js"
}
npm 常用指令及其作用
指令 | 作用 | 示例 |
---|---|---|
npm init | 初始化项目,生成 package.json 文件 | npm init -y (快速生成,跳过提问) |
npm install 或 npm i | 安装 package.json 中所有依赖 | npm install |
npm install <package> | 安装指定包(默认添加到 dependencies ) | npm install express |
npm install <package> --save-dev 或 npm i <package> -D | 安装包并添加到 devDependencies (开发依赖) | npm install eslint --save-dev |
npm install -g <package> | 全局安装包(通常用于命令行工具) | npm install -g nodemon |
npm uninstall <package> | 卸载指定包 | npm uninstall lodash |
npm update | 更新所有依赖到最新版本(遵循 package.json 的版本规则) | npm update |
npm update <package> | 更新指定包 | npm update express |
npm outdated | 检查过时的依赖包 | npm outdated |
npm list 或 npm ls | 列出已安装的依赖树 | npm list --depth=0 (仅显示顶层依赖) |
npm run <script> | 运行 package.json 中定义的脚本 | npm run start |
npm start | 快捷命令,等同于 npm run start | npm start |
npm test | 快捷命令,等同于 npm run test | npm test |
npm publish | 发布包到 npm 仓库(需登录) | npm publish |
npm login | 登录 npm 账号 | npm login |
npm logout | 退出当前 npm 账号 | npm logout |
npm search <keyword> | 搜索 npm 仓库中的包 | npm search react |
npm view <package> | 查看包的详细信息(版本、依赖等) | npm view lodash |
npm audit | 检查依赖中的安全漏洞 | npm audit |
npm audit fix | 自动修复可修复的安全漏洞 | npm audit fix |
npm cache clean --force | 清空 npm 缓存(解决安装问题) | npm cache clean --force |
npm config set <key> <value> | 修改 npm 配置(如镜像源) | npm config set registry https://registry.npmmirror.com |
npm config get <key> | 获取 npm 配置值 | npm config get registry |
npm version <semver> | 更新项目版本号(遵循语义化版本) | npm version patch (更新补丁版本) |
关键说明
-
--save-dev
vs 默认安装-
开发工具(如
webpack
、eslint
)用--save-dev
,生产代码依赖(如react
)直接安装。
-
-
全局安装 (
-g
)-
适用于全局命令行工具(如
create-react-app
),但需谨慎使用以避免权限问题。
-
-
版本管理
-
package-lock.json
会锁定依赖版本,确保团队环境一致,建议提交到版本控制。
-
执行npm i 发生了什么?
当运行 npm install
(或 npm i
)时,整个过程可以分解为以下步骤,涵盖依赖解析、缓存处理、文件操作及生命周期脚本执行:
1. 解析命令与参数
-
命令类型:根据参数判断是全局安装(
-g
)还是本地安装(默认)。本地安装会将依赖写入package.json
的dependencies
或devDependencies
。 -
目标包:若指定了包名(如
npm install lodash
),npm 会明确安装该包;否则安装package.json
中声明的所有依赖。
2. 检查依赖文件
-
package.json
:读取项目根目录的package.json
,获取dependencies
、devDependencies
、peerDependencies
等信息。 -
package-lock.json
或npm-shrinkwrap.json
:-
若存在,npm 会优先按 lock 文件中的精确版本安装,确保依赖树一致。
-
若不存在,npm 会根据
package.json
中的语义化版本(如^1.0.0
)下载最新兼容版本,并生成新的package-lock.json
。
-
3. 依赖版本解析与树构建
-
版本确定:
-
有 lock 文件:直接使用其中指定的版本。
-
无 lock 文件:根据
package.json
的版本范围(SemVer)从 registry 获取最新满足条件的版本。
-
-
依赖树构建:
-
npm 会递归分析每个包的依赖,构建完整的依赖树。
-
扁平化处理(Dedupe):npm v3+ 采用扁平化结构(hoisting),将可共用的依赖提升到较高层级,减少冗余。若同一包的不同版本无法提升,会嵌套安装在具体包的
node_modules
下。 -
冲突处理:当多个包依赖同一包的不同版本时,npm 会尽量选择兼容版本;若无法解决,则各自安装所需版本。
-
4. 缓存检查与包下载
-
缓存目录:npm 会检查本地缓存(默认位于
~/.npm
),通过integrity
字段(哈希值)验证包完整性。-
缓存命中:直接使用缓存中的包文件,无需下载。
-
缓存未命中:从配置的 registry(默认
https://registry.npmjs.org/
)下载压缩包(.tgz
)。
-
-
网络请求:
-
下载包元数据(metadata)和压缩包。
-
支持重试机制和离线模式(
--offline
)。
-
5. 解压包到 node_modules
-
文件解压:将下载或缓存的包解压到项目
node_modules
目录。-
扁平化结构:主依赖放在顶层
node_modules
,子依赖尽可能提升以减少嵌套。 -
符号链接(Symlink):对全局安装的包或
npm link
创建的包,生成符号链接。
-
6. 更新 package-lock.json
-
锁定依赖树:写入所有依赖及其子依赖的精确版本、下载地址、哈希值,确保后续安装的一致性。
-
格式同步:若
package.json
变更(如手动修改版本范围),npm 会调整package-lock.json
以保持兼容。
7. 处理特殊依赖类型
-
optionalDependencies
:可选依赖安装失败不会中断流程,仅警告。 -
peerDependencies
:-
npm v7+:自动安装 peer 依赖(若未显式声明可能引发警告)。
-
旧版本:仅检查是否存在,需手动安装。
-
-
bundledDependencies
:直接包含本地文件,不通过 registry 下载。
8. 执行生命周期脚本
按顺序执行包定义的生命周期钩子:
-
preinstall
:安装前触发。 -
install
:包安装后运行。 -
postinstall
:通常用于编译原生模块(如node-gyp
构建)。 -
其他钩子:如
prepublish
(已弃用,改用prepare
)。
9. 生成 node_modules/.bin
目录
-
创建可执行文件的快捷方式,使 CLI 工具(如
webpack
、eslint
)可直接通过npx
或npm scripts
调用。
10.示例流程
假设运行 npm install lodash
:
-
解析命令,确认安装
lodash
到dependencies
。 -
检查
package-lock.json
,若无则向 registry 查询最新版本。 -
下载
lodash.tgz
并验证哈希。 -
解压到
node_modules/lodash
。 -
更新
package.json
和package-lock.json
。 -
执行
lodash
的postinstall
脚本(如果有)。
执行npm start 发生了什么?
当你在项目中执行 npm start
时,背后发生了一系列复杂的流程。以下是详细的分解步骤:
1. 解析命令与 package.json
查找
-
命令触发:输入
npm start
后,npm CLI 会解析start
命令。 -
查找
package.json
:npm 会从当前目录开始向上查找package.json
文件,直到找到最近的配置文件。 -
读取
scripts
字段:在package.json
的scripts
对象中查找start
字段:{"scripts": {"start": "node server.js"} }
-
如果未定义
start
,npm 会尝试默认行为:运行node server.js
(若存在该文件)。 -
如果既没有定义
start
也没有server.js
,npm 会报错Missing script: "start"
。
2. 执行生命周期钩子
npm 会按顺序触发与 start
相关的生命周期脚本(如果存在):
-
prestart
:在start
命令执行前运行。 -
start
:执行用户定义的脚本。 -
poststart
:在start
命令执行后运行。
例如:
{"scripts": {"prestart": "echo '准备启动...'","start": "node app.js","poststart": "echo '已启动!'"}
}
执行顺序为:prestart
→ start
→ poststart
。
3. 环境变量与路径设置
npm 在执行脚本时,会为子进程(即脚本运行的进程)设置以下环境变量:
-
PATH
扩展:将项目的node_modules/.bin
目录添加到PATH
中,使得可以直接运行安装的 CLI 工具(如webpack
、react-scripts
)。 -
NODE_ENV
默认值:如果未显式设置,NODE_ENV
默认为空(但在某些框架如 Create React App 中会强制设置为development
)。 -
其他 npm 变量:如
npm_package_name
(包名)、npm_package_version
(版本号)等,可直接在脚本中使用。
4. 执行用户定义的脚本
假设 package.json
中定义如下:
{"scripts": {"start": "react-scripts start"}
}
实际执行流程:
-
路径解析:npm 会在
node_modules/.bin
中查找react-scripts
可执行文件。 -
启动子进程:通过操作系统的 shell(如 Bash、PowerShell 或 cmd.exe)执行命令。
-
参数传递:将
start
作为参数传递给react-scripts
。 -
保持进程运行:启动的进程(如开发服务器)会持续运行,直到手动终止(Ctrl+C)或发生错误。
5. 依赖工具链的启动(以 Create React App 为例)
以 react-scripts start
为例,详细流程:
-
检查依赖:确保
webpack
、babel
、webpack-dev-server
等工具已安装。 -
读取配置:合并默认配置与项目中的
webpack.config.js
(如有覆盖)。 -
启动开发服务器:
-
监听文件变化(通过
webpack --watch
)。 -
启用热模块替换(HMR)。
-
打开浏览器(默认
http://localhost:3000
)。
-
-
输出日志:在终端显示编译状态、错误或警告信息。
6. 进程管理与信号处理
-
保持进程活跃:开发服务器通常是长期运行的进程(如 Express 服务器或前端开发服务器)。
-
信号处理:
-
按下
Ctrl+C
会发送SIGINT
信号,终止进程。 -
进程崩溃时可能触发
SIGTERM
。
-
-
后台进程:如果脚本中启动了守护进程(如
node server.js &
),npm 不会自动管理其生命周期。
7. 常见场景与问题
场景 1:启动一个 Express 服务器
直接运行 server.js,启动 HTTP 服务并监听端口。
{"scripts": {"start": "node server.js"}
}
场景 2:启动前端开发服务器(如 Vue CLI)
触发 webpack-dev-server,提供热重载和代理配置。
{"scripts": {"start": "vue-cli-service serve"}
}
常见问题:
-
权限问题:若脚本需要管理员权限(如监听 80 端口),需使用
sudo npm start
。 -
端口冲突:如果端口被占用,进程会抛出
EADDRINUSE
错误。 -
依赖缺失:未安装
react-scripts
或vue-cli-service
会导致命令找不到。
8.总结
执行 npm start
的完整流程:
-
解析
package.json
中的scripts.start
。 -
触发
prestart
钩子(如果有)。 -
设置环境变量并启动子进程。
-
执行用户定义的命令(如启动服务器或构建工具)。
-
触发
poststart
钩子(如果有)。 -
保持进程运行直至手动终止。
coress-env
cross-env
是一个用于跨平台设置环境变量的 Node.js 工具。它解决了在不同操作系统(如 Windows 和 Unix 类系统)中设置环境变量语法不一致的问题,使得开发者可以在 package.json
的脚本中统一使用相同的命令。
为什么需要 cross-env?
在开发 Node.js 项目时,经常需要在命令行中设置环境变量。例如:
# Unix 系统(Linux/macOS)
NODE_ENV=production node app.js# Windows 系统
set NODE_ENV=production && node app.js
不同操作系统设置环境变量的语法不同,这会导致以下问题:
-
脚本不兼容:在
package.json
的scripts
中编写的命令无法跨平台运行。 -
维护成本高:需要为不同操作系统编写不同的脚本。
cross-env
通过提供统一的命令格式,屏蔽了操作系统差异,使脚本更具可移植性。
coress-env核心功能
-
跨平台支持:在 Windows、macOS、Linux 中统一使用相同的命令。
-
简化脚本:无需编写条件判断或特定于平台的语法。
-
兼容性:支持所有 Node.js 版本和主流包管理工具(npm、Yarn、pnpm)。
coress-env安装
通过 npm 或 Yarn 安装为开发依赖:
npm install --save-dev cross-env
# 或
yarn add --dev cross-env
coress-env基本用法
在 package.json
的 scripts
中使用 cross-env
设置环境变量:
示例 1:设置 NODE_ENV
{"scripts": {"build": "cross-env NODE_ENV=production webpack","start": "cross-env NODE_ENV=development node server.js"}
}
示例 2:传递多个环境变量
{"scripts": {"test": "cross-env API_URL=http://localhost:3000 DEBUG=true mocha"}
}
示例 3:处理带空格的值(需用引号包裹)
{"scripts": {"run:app": "cross-env GREETING=\"Hello World\" node app.js"}
}
coress-env总结
cross-env
是解决跨平台环境变量设置问题的轻量级工具,通过统一命令语法:
-
消除 Windows 和 Unix 系统间的脚本差异。
-
简化
package.json
的维护。 -
提升开发体验和团队协作效率。
npm、pnpm、yarm、bun、npx的差异
1. 核心定位与关联性
工具 | 定位 | 关联性 |
---|---|---|
npm | Node.js 默认包管理器 | 所有工具的基础,定义 package.json 规范,其他工具均兼容 npm 生态。 |
pnpm | 高效磁盘存储包管理器 | 兼容 npm 命令和 package.json ,通过硬链接和符号链接优化依赖存储。 |
Yarn | 改进版包管理器 | 最初为解决 npm 性能问题而生,兼容 npm 生态,提供更严格的依赖锁定机制。 |
Bun | 全栈运行时与包管理器 | 兼容 npm 和 Yarn 命令,内置超快包管理、测试、脚本运行等功能。 |
npx | 临时执行包命令工具 | 随 npm 5.2+ 内置,用于直接运行本地或远程包的可执行文件。 |
2. 核心差异对比
特性 | npm | pnpm | Yarn | Bun | npx |
---|---|---|---|---|---|
安装方式 | 嵌套存储依赖 | 全局存储 + 硬链接 | 扁平化存储 | 全局缓存 + 并行安装 | 不安装(直接执行) |
依赖存储 | node_modules 冗余 | 单一全局存储 + 符号链接 | 扁平化 node_modules | 全局缓存 + 符号链接 | 无 |
安装速度 | 较慢 | 快 | 快 | 极快(Rust 实现) | 快速(仅下载临时包) |
磁盘占用 | 高 | 低(共享依赖) | 中等 | 低 | 无 |
Lock 文件 | package-lock.json | pnpm-lock.yaml | yarn.lock | bun.lockb | 无 |
工作区支持 | 需要手动配置 | 内置 | 内置 | 内置 | 无 |
兼容性 | Node.js 标准 | 完全兼容 npm | 兼容 npm | 兼容 npm/Yarn | 依赖 npm |
核心优势 | 官方默认 | 节省磁盘空间 | 稳定可靠 | 极速全栈工具链 | 临时运行命令 |
缺点 | 依赖冗余、速度慢 | 生态兼容性偶发问题 | 配置复杂度较高 | 新工具生态待完善 | 无法管理长期依赖 |
3. 命令对比
操作 | npm | pnpm | Yarn | Bun | npx |
---|---|---|---|---|---|
初始化项目 | npm init | pnpm init | yarn init | bun init | - |
安装依赖 | npm install | pnpm install | yarn install | bun install | - |
添加生产依赖 | npm add lodash | pnpm add lodash | yarn add lodash | bun add lodash | - |
添加开发依赖 | npm add -D eslint | pnpm add -D eslint | yarn add -D eslint | bun add -d eslint | - |
全局安装 | npm install -g tsc | pnpm add -g tsc | yarn global add tsc | bun add -g tsc | - |
运行脚本 | npm run dev | pnpm run dev | yarn dev | bun run dev | - |
临时执行命令 | npx create-react-app | pnpm dlx create-react-app | yarn dlx create-react-app | bunx create-react-app | npx create-react-app |
4. 使用场景示例
npm
-
场景:新项目默认使用,或需要与旧项目兼容。
-
示例:
npm init -y npm install express npm run start
pnpm
-
场景:需节省磁盘空间(如 Monorepo 项目),或依赖版本冲突频繁。
-
示例:
pnpm add react@18 pnpm run build
Yarn
-
场景:需要严格依赖锁定或使用 Yarn Workspaces。
-
示例:
yarn add lodash --immutable yarn workspace frontend dev
Bun
-
场景:追求极速安装和全栈工具链(如同时管理 JS/TS 和 SQLite)。
-
示例:
bun install bun test bun run dev
npx
-
场景:临时运行脚手架工具或 CLI 命令。
-
示例:
npx create-next-app@latest npx http-server ./dist
5.总结
-
npm:基础工具,适合大多数项目。
-
pnpm:适合磁盘敏感或依赖冲突多的场景。
-
Yarn:适合需要稳定锁文件或复杂 Monorepo。
-
Bun:适合追求速度和全栈能力的新项目。
-
npx:适合临时运行一次性命令。
常用命令行接口
以下是常见的命令行接口(CLI)选项列表,涵盖开发、工具链和服务器场景中的高频参数及其用途:
1.基础操作
参数 | 用途 | 示例 |
---|---|---|
--help / -h | 显示帮助信息(命令用法和选项说明) | npm run build --help |
--version / -V | 显示工具或应用的版本号 | node --version |
--verbose | 输出详细日志(调试时使用) | webpack --verbose |
--silent | 静默模式(减少日志输出) | npm install --silent |
--dry-run | 模拟执行,不实际执行操作(测试命令效果) | npm publish --dry-run |
2.网络与端口
参数 | 用途 | 示例 |
---|---|---|
--port / -p | 指定服务监听的端口号 | next dev --port 8080 |
--host | 指定服务绑定的主机(如 0.0.0.0 允许外部访问) | vite --host 0.0.0.0 |
--open / -o | 启动后自动打开浏览器 | create-react-app --open |
--proxy | 设置代理服务器地址 | webpack-dev-server --proxy http://api.example.com |
3.文件与目录
参数 | 用途 | 示例 |
---|---|---|
--config / -c | 指定配置文件路径 | eslint --config .eslintrc.cjs |
--output / -o | 指定输出目录或文件 | tsc --outDir dist |
--watch / -w | 监视文件变化并自动重新执行 | nodemon --watch src |
--force | 强制覆盖文件或跳过安全检查 | rm -rf --force node_modules |
4.环境与模式
参数 | 用途 | 示例 |
---|---|---|
--mode | 设置运行模式(如 development /production ) | vite build --mode production |
--env | 注入环境变量 | webpack --env NODE_ENV=prod |
--production | 标记为生产环境(安装依赖时跳过 devDependencies ) | npm install --production |
5.调试与日志
参数 | 用途 | 示例 |
---|---|---|
--debug | 启用调试模式(输出额外信息) | node --debug app.js |
--inspect | 启用 Node.js 调试器(配合 Chrome DevTools) | node --inspect server.js |
--log-level | 设置日志级别(如 error , warn , info ) | npm install --log-level warn |
6.依赖管理
参数 | 用途 | 示例 |
---|---|---|
--save / -S | 将依赖添加到 dependencies (默认行为) | npm install lodash --save |
--save-dev / -D | 将依赖添加到 devDependencies | npm install eslint --save-dev |
--global / -g | 全局安装包(系统级可用) | npm install http-server -g |
7.其他高频参数
参数 | 用途 | 示例 |
---|---|---|
--yes / -y | 自动确认所有提示(非交互模式) | npm init -y |
--ignore-scripts | 跳过包安装时的生命周期脚本执行 | npm install --ignore-scripts |
--timeout | 设置超时时间(如网络请求超时) | curl --timeout 5000 URL |
--no-optional | 跳过安装 optionalDependencies 中的依赖 | npm install --no-optional |
8.总结
-
通用性:大部分工具支持
--help
和--version
,是快速查阅文档的入口。 -
组合使用:参数可组合(如
npm run dev -- --port 3000 --open
)。 -
工具差异:不同工具可能有特定参数(如
vite --strictPort
强制端口占用检查)。 -
最佳实践:具体参数以工具文档为准,使用前建议通过
--help
验证。
script文件解读
1. 基础开发命令
Key | 用途 | 工具示例 |
---|---|---|
start | 启动本地开发服务器(如 React、Next.js 项目) | react-scripts start |
dev | 开发模式(常见于 Vite、Nuxt.js 项目) | vite |
serve | 启动开发服务器(Vue CLI 项目) | vue-cli-service serve |
build | 构建生产环境代码(压缩、打包、优化) | vite build |
preview | 本地预览生产构建结果(Vite 特有) | vite preview |
2. 测试与代码质量
Key | 用途 | 工具示例 |
---|---|---|
test | 运行单元测试 | jest |
test:watch | 监听文件变化自动运行测试 | jest --watch |
lint | 静态代码检查(检查语法、风格问题) | eslint |
lint:fix | 自动修复可修复的代码规范问题 | eslint --fix |
format | 代码格式化(统一缩进、引号等风格) | prettier --write |
typecheck | TypeScript 类型检查(不生成文件) | tsc --noEmit |
3. 钩子脚本(Hooks)
Key | 用途 | 示例场景 |
---|---|---|
pre[start] | 在 start 命令前执行(如 prestart ) | 类型检查、环境准备 |
post[build] | 在 build 命令后执行(如 postbuild ) | 分析构建结果、清理临时文件 |
pre[test] | 在 test 命令前执行(如 pretest ) | 先运行代码检查 |
4. 高级场景
Key | 用途 | 工具示例 |
---|---|---|
analyze | 分析构建产物体积(查看哪些模块占用较大) | source-map-explorer |
storybook | 启动组件开发环境(Storybook) | start-storybook |
deploy | 部署到静态托管平台(如 GitHub Pages、Vercel) | gh-pages |
docker:build | 构建 Docker 镜像 | docker build |
docker:run | 运行 Docker 容器 | docker run |
5. 实用工具
Key | 用途 | 工具示例 |
---|---|---|
clean | 清理构建产物或临时文件(如 dist 、node_modules ) | rimraf |
prepare | 在 npm install 后自动执行(常用于安装 Git 钩子) | husky install |
6.完整的 package.json
示例
{"name": "my-project","version": "1.0.0","scripts": {// --- 基础命令 ---"start": "react-scripts start", // 启动开发服务器"dev": "vite", // 开发模式(Vite)"serve": "vue-cli-service serve", // 启动开发服务器(Vue CLI)"build": "vite build", // 构建生产环境代码"preview": "vite preview", // 预览生产构建结果"test": "jest --coverage", // 运行测试(Jest)"test:watch": "jest --watch", // 监听文件变化运行测试"lint": "eslint . --ext .js,.ts", // 代码规范检查(ESLint)"lint:fix": "eslint . --fix", // 自动修复代码规范问题"format": "prettier --write .", // 代码格式化(Prettier)"typecheck": "tsc --noEmit", // TypeScript 类型检查"prepare": "husky install", // 安装 Git 钩子(Husky)"clean": "rimraf dist node_modules", // 清理构建产物和依赖// --- 钩子脚本 ---"prestart": "npm run typecheck", // 在 `start` 前执行"postbuild": "npm run analyze", // 在 `build` 后执行"pretest": "npm run lint", // 在 `test` 前执行// --- 高级场景 ---"analyze": "source-map-explorer dist/*.js", // 分析构建包体积"storybook": "start-storybook -p 6006", // 启动 Storybook"deploy": "gh-pages -d dist", // 部署到 GitHub Pages"docker:build": "docker build -t my-app .", // 构建 Docker 镜像"docker:run": "docker run -p 8080:80 my-app" // 运行 Docker 容器},"dependencies": {// 依赖项...},"devDependencies": {// 开发依赖项...}
}