Node Package Execute - NPX #
- npx 是一个 npm 包执行器。它自 npm 
v5.2.0版本开始内置,无需单独安装。 - npx 主要目的是更方便地执行 Node.js 包提供的命令行工具,特别是那些你不想全局安装或只想偶尔使用的工具。
 
核心功能与工作方式 #
执行包命令: npx <command> [args...]
查找逻辑:
- 首先检查当前项目 node_modules/.bin 目录下是否存在该命令。如果存在,则直接执行本地版本。
 - 如果本地不存在,检查环境变量 PATH 中是否存在该命令(即全局安装的包)。如果存在,则执行全局版本。
 - 如果本地和全局都没有找到,npx 会临时从 npm 仓库下载对应的包,执行其指定的二进制文件(通常在包的 
package.json的bin字段定义),执行完毕后通常不会将包保留在本地(除非有缓存机制)。 
执行特定版本: npx <package-name>@<version> <command> 可以执行指定版本的包命令。
主要优势 #
- 避免全局安装污染: 对于只需要运行一次或偶尔使用的工具(如项目脚手架 create-react-app),无需使用 
npm install -g全局安装,避免污染全局环境和潜在的版本冲突。 - 使用最新版本: 默认情况下,如果需要临时下载,npx 会下载最新稳定版的包来执行,确保你使用的是最新的功能或修复。
 - 方便执行本地依赖: 无需配置 
npm scripts或写冗长的路径 (./node_modules/.bin/<command>),可以直接通过npx <command>执行项目本地安装的工具(例如npx jest运行测试)。 - 测试和试用: 可以方便地试用不同的 npm 包或其不同版本提供的命令,而无需在本地或全局安装它们。
 
开发一个 npx 命令 #
配置 package.josn,增加 bin 配置
#
{
  "name": "xxx-package",
  "version": "1.0.0",
  "main": "dist/index.js",
  "bin": {
    "xxx-command": "./dist/index.js"  // 指向编译后的 JS 文件
  },
  "scripts": {
    "build": "tsc && chmod 755 build/index.js",
    "prepublishOnly": "npm run build" // 发布前自动构建
  },
  "files": ["dist"], // 确保发布时包含 dist 目录
  "devDependencies": {
    "typescript": "^5.0.0"
  }
}配置源文件 #
src/index.ts
#!/usr/bin/env node
// 一定要有上面这一行。Shebang 告诉系统用 Node.js 执行此脚本。不加该行解析执行可能失败
import fs from 'fs';
// 示例:读取文件并打印内容
function main() {
  const filePath = process.argv[2]; // 获取命令行参数
  if (!filePath) {
    console.error('请提供文件路径');
    process.exit(1);
  }
  try {
    const content = fs.readFileSync(filePath, 'utf-8');
    console.log(content);
  } catch (error) {
    console.error('读取文件失败:', error.message);
  }
}
main();config tsconfig.json
#
{
  "compilerOptions": {
    "target": "ES2022",
    "module": "Node16",
    "moduleResolution": "Node16",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": [
    "src/**/*"
  ],
  "exclude": [
    "node_modules"
  ]
}本地测试 #
npm run build# 方法 1:全局安装测试
npm install -g .          # 全局安装你的包
xxx-command ./test.txt   # 执行命令
# 方法 2:使用 npx 直接测试
npx xxx-command ./test.txt发布后测试 #
npx -y -p xxx-package xxx-command any-file.txt关键点 #
- Shebang 行:
#!/usr/bin/env node必须放在 CLI 入口文件的第一行,确保用 Node 执行 - 文件权限:需要手动配置 
chmod +x权限,否则执行时会缺少权限