npm检查预发布
npm预发布包的验证工具(模块、CLI工具)。
它做什么
验证你的npm包是否正常工作 之前 出版。捕捉破坏生产设施的常见包装问题。
支持2种包装类型:
- 普通模块 -验证生成、文件和导入
- CLI工具 -验证构建、文件和执行
安装
npm install --save-dev npm-check-prepublish用法
快速开始
# In your package directory
npx npm-check-prepublish程序化使用
import { CheckPrepublish } from 'npm-check-prepublish';
const checker = new CheckPrepublish();
const result = await checker.check();
process.exit(result.success ? 0 : 1);添加到package.json
{
"scripts": {
"check": "npm-check-prepublish",
"prepublishOnly": "npm run build && npm run check"
}
}验证步骤
步骤1:构建验证
- 跑
npm run build如果scripts.build存在 - 如果没有构建脚本,则跳过(无错误)
- 跳过:
--no-build
步骤2:文件验证
- 自动从package.json中检测所需文件(
main,module,types,bin) - 验证所有文件是否存在
- 跳过:
--no-check-required-files
步骤3:包验证
- 使用创建tarball
npm pack - 安装在临时目录中
--production - 验证已安装包中是否存在文件
- 验证排除的文件(src/、test/、.env\*)是否不在包中
- 跳过:
--no-pack
步骤4:运行时验证(特定类型)
法向模数
- 尝试导入模块
- 跳过:
--no-check-import
CLI工具
- 使用以下命令运行CLI
--version - 跳过:
--no-check-bin
包装类型检测
从package.json中自动检测到:
| 字段 | 检测到类型 |
|---|---|
有 bin | CLI工具 |
| 两者都不是 | 正常模块 |
配置
配置对象
interface VerifyConfig {
packageDir?: string; // default: process.cwd()
requiredFiles?: string[]; // append to auto-detected
// Skip flags
skipBuild?: boolean;
skipCheckRequiredFiles?: boolean;
skipPackage?: boolean;
skipCheckImport?: boolean;
skipCheckBin?: boolean;
}CLI标志
# Skip flags
--no-build # Skip build step
--no-check-required-files # Skip file verification
--no-pack # Skip npm pack + install
--no-check-import # Skip module import (modules)
--no-check-bin # Skip CLI execution (CLI tools)例子
示例1:普通模块
package.json:
{
"name": "my-utils",
"main": "./dist/index.js",
"scripts": {
"build": "tsc",
"check": "npm-check-prepublish"
}
}跑:
npm run check验证导入工作。
示例2:CLI工具
package.json:
{
"name": "my-cli",
"bin": {
"my-cli": "bin/cli.js"
},
"scripts": {
"build": "tsc",
"check": "npm-check-prepublish"
}
}跑:
npm run check验证CLI是否运行 --version.
为什么使用这个?
常见问题
- 缺少生产依赖关系 -依赖性
devDependencies但在运行时需要 - 排除的源文件 -
src/意外包含在包中的目录 - 错误的构建工件 -内置文件丢失或位置错误
- 破碎的进口 -安装后无法导入模块
- CLI执行失败 -二进制文件不可执行或缺失
真实世界示例
// ❌ This works in development but breaks in production:
import config from '../../config.json';
// ✅ Verification catches this because config.json is in excluded src/与CI/CD集成
{
"scripts": {
"prepublishOnly": "npm run build && npm run check"
}
}这可确保您无法发布损坏的包。
API
new CheckPrepublish(config)
创建检查器实例。
checker.check(): Promise
运行验证并返回结果。
退货:
{
success: boolean,
errors: Error[]
}许可证
麻省理工学院
