🔧 nps脚本管理速查表
版本unknown 更新日志2025-11-18 GitHubehang-io/nps
340px

📦 安装与初始化 >>

  • npm install --save-dev nps | 项目级安装
  • npm install -g nps | 全局安装
  • npm install nps-utils | 安装工具库

项目初始化

# 从package.json迁移到nps
./node_modules/.bin/nps init

# 或使用npx
npx nps init

# 生成package-scripts.js
# 自动迁移现有脚本
nps init会自动将package.json中的scripts迁移到package-scripts.js

⚙️ 配置文件结构 >>

  • package-scripts.js | JavaScript配置文件(推荐)
  • package-scripts.yml | YAML配置文件
  • scripts | 根级脚本配置

JavaScript配置示例

const { series, rimraf, crossEnv } = require('nps-utils')

module.exports = {
  scripts: {
    default: "node index.js",
    clean: rimraf('dist'),
    build: series.nps('clean', 'webpack'),
    start: crossEnv('NODE_ENV=production', 'node server.js'),
    test: 'jest --coverage',
    lint: {
      js: "eslint .",
      css: "stylelint '**/*.css'"
    }
  }
}
JavaScript配置支持复杂逻辑和代码复用

📝 YAML配置支持 >>

  • scripts | 定义脚本命令
  • 数组格式 | 支持按顺序执行多个命令
  • 嵌套结构 | 支持点语法访问

YAML配置示例

scripts:
  default: node index.js
  lint: eslint .
  test: jest
  build:
    - rimraf dist
    - webpack
  start:
    - cross-env NODE_ENV=production
    - node server.js
  clean:
    - rm -rf node_modules
    - npm install
YAML配置更简洁,适合简单项目

🛠️ nps-utils工具库 >>

  • series | 串行执行脚本
  • parallel | 并行执行脚本
  • rimraf | 跨平台删除文件
  • crossEnv | 跨平台环境变量

工具库用法示例

const {
  series,
  parallel,
  rimraf,
  crossEnv,
  nps
} = require('nps-utils')

module.exports = {
  scripts: {
    // 串行执行:clean -> build
    build: series.nps('clean', 'webpack'),

    // 并行执行:lint & test
    test: parallel.nps('lint', 'unit'),

    // 跨平台删除
    clean: rimraf('dist'),

    // 环境变量
    start: crossEnv('NODE_ENV=production', 'node server.js'),

    // 嵌套调用
    deploy: series.nps('build', 'start')
  }
}
nps-utils提供跨平台兼容的工具函数

📋 CLI命令使用 >>

  • nps | 运行default脚本
  • nps help | 显示所有可用脚本
  • nps script.name | 运行嵌套脚本
  • nps b | 使用前缀快捷命令

命令执行示例

# 运行默认脚本
nps

# 运行指定脚本
nps build
nps test

# 运行嵌套脚本
nps lint.js
nps lint.css

# 使用前缀快捷
nps b              # 等同于 nps build
nps t              # 等同于 nps test
nps help b          # 显示build脚本帮助信息
前缀功能让脚本调用更快捷

🔌 环境变量配置 >>

  • LOG_LEVEL | 控制输出详细程度
  • NPS_PACKAGE_MANAGER | 指定包管理器
  • NODE_ENV | Node.js环境变量

环境变量设置

# 设置日志级别
export LOG_LEVEL=silent    # 静默模式
export LOG_LEVEL=info      # 默认级别
export LOG_LEVEL=debug     # 调试模式

# 指定包管理器
export NPS_PACKAGE_MANAGER=pnpm

# 临时设置
LOG_LEVEL=debug nps build
环境变量控制nps的行为和输出

🏗️ 高级脚本模式 >>

  • 条件执行 | 基于环境变量的条件脚本
  • 动态脚本 | 运行时生成脚本命令
  • 脚本组合 | 复杂的脚本编排

高级用法示例

const { series, parallel, crossEnv } = require('nps-utils')

module.exports = {
  scripts: {
    // 条件执行
    build: process.env.NODE_ENV === 'production'
      ? series.nps('clean', 'webpack:prod')
      : series.nps('clean', 'webpack:dev'),

    // 动态脚本
    test: `jest --coverage${process.env.CI ? ' --watchAll=false' : ''}`,

    // 复杂编排
    deploy: series(
      crossEnv('NODE_ENV=production'),
      parallel.nps('build', 'test'),
      'npm publish'
    ),

    // 环境特定
    'build:prod': crossEnv('NODE_ENV=production', 'webpack --mode production'),
    'build:dev': crossEnv('NODE_ENV=development', 'webpack --mode development')
  }
}
JavaScript配置提供强大的灵活性

🔄 脚本继承与扩展 >>

  • extends | 继承其他配置文件
  • scripts覆盖 | 重写继承的脚本
  • merge | 合并多个配置

配置继承示例

// base-scripts.js
module.exports = {
  scripts: {
    clean: 'rimraf dist',
    lint: 'eslint .',
    test: 'jest'
  }
}

// package-scripts.js
const baseScripts = require('./base-scripts')

module.exports = {
  ...baseScripts,
  scripts: {
    ...baseScripts.scripts,
    build: series.nps('clean', 'webpack'),
    deploy: series.nps('build', 'upload')
  }
}
继承机制支持配置的模块化和复用