npm scripts详解

npm scripts详解

npm scripts 是 Node.js 项目开发中用于定义和执行脚本命令的核心功能,通过 package.json 文件的 scripts 字段配置。以下是深度解析和使用指南:

一、基础语法

  1. 基本结构
json 复制代码
{
  "scripts": {
    "dev": "vite",
    "build": "vite build"
  }
}
  • :脚本名称(如 dev
  • :实际执行的命令(如 vite
  1. 运行脚本
bash 复制代码
npm run <script-name>
# 例如:
npm run dev
  1. 特殊脚本名称
脚本名 直接执行方式 用途
start npm start 应用启动入口
test npm test 运行测试
prepublish 自动执行 发布前预处理

二、进阶特性

  1. 钩子脚本(生命周期脚本)
json 复制代码
{
  "scripts": {
    "prebuild": "rimraf dist",  // 在build前自动执行
    "build": "vite build",
    "postbuild": "echo 'Build completed'"  // 在build后自动执行
  }
}

常见钩子前缀:pre(之前)、post(之后)

  1. 环境变量传递
bash 复制代码
npm run dev -- --port 3000

等价于:

bash 复制代码
vite --port 3000
  1. 跨平台兼容

使用工具包避免平台差异:

json 复制代码
{
  "scripts": {
    "clean": "rimraf dist/*",  // 跨平台删除目录
    "copy": "cpx \"src/**/*.json\" dist"  // 跨平台复制
  }
}

推荐工具包:

  • rimraf:跨平台 rm -rf
  • cpx:跨平台文件复制
  • cross-env:跨平台环境变量设置
  1. 并行/串行执行
json 复制代码
{
  "scripts": {
    "parallel": "npm run task1 & npm run task2",  // 并行(Linux)
    "series": "npm run task1 && npm run task2",   // 串行
    "cross": "concurrently \"npm run task1\" \"npm run task2\""  // 跨平台并行
  }
}

推荐工具:concurrently

三、典型应用场景

  1. 开发环境启动
json 复制代码
{
  "scripts": {
    "dev": "vite --open",
    "dev:debug": "cross-env NODE_OPTIONS='--inspect' vite"
  }
}
  1. 构建流程
json 复制代码
{
  "scripts": {
    "build": "run-s clean lint build:*",
    "build:js": "rollup -c",
    "build:css": "sass src/:dist/",
    "clean": "rimraf dist",
    "lint": "eslint src"
  }
}

使用工具:npm-run-allrun-s 串行,run-p 并行)

  1. 测试套件
json 复制代码
{
  "scripts": {
    "test": "jest",
    "test:watch": "jest --watchAll",
    "test:cov": "jest --coverage",
    "test:e2e": "cypress run"
  }
}
  1. 项目发布
json 复制代码
{
  "scripts": {
    "prepublishOnly": "npm run build && npm test",
    "release": "standard-version",
    "postpublish": "git push --follow-tags"
  }
}

四、高级技巧

  1. 参数传递
json 复制代码
{
  "scripts": {
    "serve": "node server.js",
    "start": "npm run serve -- --port 8080"
  }
}
  1. 环境变量控制
json 复制代码
{
  "scripts": {
    "build": "cross-env NODE_ENV=production vite build"
  }
}
  1. 快捷命令
json 复制代码
{
  "scripts": {
    "d": "npm run dev",
    "b": "npm run build"
  }
}
  1. 组合复杂命令
json 复制代码
{
  "scripts": {
    "deploy": "npm run build && gh-pages -d dist"
  }
}

五、调试与优化

  1. 查看实际命令
bash 复制代码
npm run <script> --dry-run
  1. 性能分析
bash 复制代码
npm run build --timing
  1. 错误调试
bash 复制代码
npm run build --verbose
  1. 缓存清理
bash 复制代码
npm cache clean --force

六、最佳实践

  1. 语义化命名 :如 build:prodtest:unit

  2. 文档化脚本:在 README 中说明关键脚本

  3. 避免长命令:复杂逻辑应拆分为独立脚本或工具脚本

  4. 跨平台兼容 :始终使用 rimraf/cross-env 等工具

  5. 安全防护 :敏感操作添加确认提示:

    json 复制代码
    {
      "scripts": {
        "reset": "node -e \"if(confirm('确定要重置吗?')) require('fs').rmSync('data', { recursive: true })\""
      }
    }

七、与现代工具集成

  1. 配合 Vite
json 复制代码
{
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  }
}
  1. 配合 TypeScript
json 复制代码
{
  "scripts": {
    "typecheck": "tsc --noEmit"
  }
}
  1. 配合 Monorepo
json 复制代码
{
  "scripts": {
    "dev": "turbo run dev",
    "build": "turbo run build"
  }
}

掌握 npm scripts 能显著提升开发效率,建议根据项目需求组合基础命令,形成自动化工作流。对于复杂场景,可考虑使用更专业的构建工具(如 Gulp 或 Makefile)。

相关推荐
前端御书房2 分钟前
基于 Trae 的超轻量级前端架构设计与性能优化实践
前端·性能优化
南部余额8 分钟前
playwright解决重复登录问题,通过pytest夹具自动读取storage_state用户状态信息
前端·爬虫·python·ui·pytest·pylawright
前端与小赵18 分钟前
webpack和vite之间的区别
前端·webpack·vite
zy01010121 分钟前
React受控表单绑定
前端·javascript·react.js·mvvm·双向数据绑定
百锦再22 分钟前
React编程的核心概念:数据流与观察者模式
前端·javascript·vue.js·观察者模式·react.js·前端框架·ecmascript
2401_8724878824 分钟前
网络安全之前端学习(css篇2)
前端·css·学习
SuperYing34 分钟前
前端候选人突围指南:让面试官主动追着要简历的五大特质(个人总结版)
前端·面试
前端双越老师37 分钟前
我的编程经验与认知
前端
linweidong43 分钟前
前端Three.js面试题及参考答案
前端·javascript·vue.js·typescript·前端框架·three.js·前端面经
GISer_Jing1 小时前
前端常问的宏观“大”问题详解(二)
linux·前端·ubuntu