npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@baicie/pkg

v0.1.7

Published

A powerful toolkit for creating, formatting, validating and manipulating package.json files

Readme

@baicie/pkg

一个功能强大的 package.json 工具包,用于创建、格式化、验证和操作 package.json 文件。

npm version license

✨ 特性

  • 🎨 格式化 - 标准化 package.json 格式,支持字段排序
  • 🏗️ 创建 - 快速创建各类项目的 package.json
  • 验证 - 全面验证 package.json 的正确性
  • 🔧 操作 - 轻松添加、删除、修改依赖和字段
  • 📦 类型安全 - 完整的 TypeScript 类型定义
  • 🚀 零依赖 - 轻量级,无外部依赖

📦 安装

npm install @baicie/pkg
# or
pnpm add @baicie/pkg
# or
yarn add @baicie/pkg

🚀 快速开始

创建 package.json

import { createPackageJson, createPackageJsonString } from '@baicie/pkg'

// 创建基础 package.json
const pkg = createPackageJson({
  name: 'my-app',
  version: '1.0.0',
  description: 'My awesome app',
  author: 'Your Name',
  license: 'MIT',
})

// 使用预设模板创建
const libPkg = createPackageJson({
  name: '@scope/my-lib',
  preset: 'library', // 'basic' | 'library' | 'cli' | 'monorepo' | 'typescript'
})

// 创建 JSON 字符串
const pkgString = createPackageJsonString({
  name: 'my-app',
  preset: 'basic',
})

格式化 package.json

import { formatPackageJson, prettifyPackageJson } from '@baicie/pkg'

const pkg = {
  name: 'my-app',
  version: '1.0.0',
  dependencies: {
    react: '^18.0.0',
    axios: '^1.0.0',
  },
}

// 自定义格式化
const formatted = formatPackageJson(pkg, {
  indent: 2,
  endOfLine: true,
  sortFields: true,
  sortDependencies: true,
  sortScripts: false,
})

// 使用默认最佳实践格式化
const prettified = prettifyPackageJson(pkg)

console.log(prettified)

验证 package.json

import { validatePackageJson, validateName, validateVersion } from '@baicie/pkg'

const pkg = {
  name: 'my-app',
  version: '1.0.0',
}

// 验证整个 package.json
const result = validatePackageJson(pkg)
if (result.valid) {
  console.log('✅ package.json 有效')
} else {
  console.log('❌ 验证失败:')
  result.errors.forEach(err => {
    console.log(`  - ${err.field}: ${err.message}`)
  })
}

// 验证包名
const nameErrors = validateName('My-Invalid-Name')
console.log(nameErrors) // [{ field: 'name', message: '包名不能包含大写字母', ... }]

// 验证版本号
const versionErrors = validateVersion('1.0')
console.log(versionErrors) // [{ field: 'version', message: '版本号格式不符合 semver 规范', ... }]

操作 package.json

import {
  addDependency,
  removeDependency,
  updateDependencyVersion,
  addScript,
  bumpVersion,
  addKeywords,
} from '@baicie/pkg'

let pkg = {
  name: 'my-app',
  version: '1.0.0',
}

// 添加依赖
pkg = addDependency(pkg, 'react', '^18.0.0', 'dependencies')
pkg = addDependency(pkg, 'typescript', '^5.0.0', 'devDependencies')

// 移除依赖
pkg = removeDependency(pkg, 'react')

// 更新依赖版本
pkg = updateDependencyVersion(pkg, 'typescript', '^5.3.0')

// 添加脚本
pkg = addScript(pkg, 'dev', 'vite')
pkg = addScript(pkg, 'build', 'vite build')

// 增加版本号
pkg = bumpVersion(pkg, 'minor') // 1.0.0 -> 1.1.0
pkg = bumpVersion(pkg, 'major') // 1.1.0 -> 2.0.0
pkg = bumpVersion(pkg, 'patch') // 2.0.0 -> 2.0.1

// 添加关键词
pkg = addKeywords(pkg, ['react', 'vite', 'typescript'])

排序功能

import { sortPackageJson, sortDependencies, sortScripts } from '@baicie/pkg'

let pkg = {
  version: '1.0.0',
  name: 'my-app',
  dependencies: {
    'z-package': '^1.0.0',
    'a-package': '^1.0.0',
  },
}

// 排序所有字段
pkg = sortPackageJson(pkg, {
  sortDependencies: true,
  sortScripts: true,
})

// 只排序依赖
pkg = sortDependencies(pkg)

// 只排序脚本
pkg = sortScripts(pkg)

工具函数

import {
  mergePackageJson,
  cleanObject,
  compareVersions,
  isScopedPackage,
  getPackageScope,
} from '@baicie/pkg'

// 合并两个 package.json
const base = {
  name: 'app',
  version: '1.0.0',
  dependencies: { react: '^18.0.0' },
}
const override = { version: '1.1.0', dependencies: { vue: '^3.0.0' } }
const merged = mergePackageJson(base, override)
// { name: 'app', version: '1.1.0', dependencies: { react: '^18.0.0', vue: '^3.0.0' } }

// 清理空值
const cleaned = cleanObject({ name: 'app', description: '', keywords: [] })
// { name: 'app' }

// 比较版本
compareVersions('1.2.3', '1.2.4') // -1
compareVersions('2.0.0', '1.9.9') // 1
compareVersions('1.0.0', '1.0.0') // 0

// 检查作用域包
isScopedPackage('@scope/package') // true
isScopedPackage('package') // false
getPackageScope('@scope/package') // 'scope'

📚 API 文档

创建功能

createPackageJson(options?: CreateOptions): PackageJson

创建一个新的 package.json 对象。

选项:

  • name - 包名
  • version - 版本号(默认:'0.1.0'
  • description - 描述
  • author - 作者
  • license - 许可证(默认:'MIT'
  • type - 模块类型(默认:'module'
  • private - 是否为私有包
  • preset - 预设模板:'basic' | 'library' | 'cli' | 'monorepo' | 'typescript'

createPackageJsonString(options?: CreateOptions, indent?: number): string

创建 package.json 的 JSON 字符串。

clonePackageJson(base: PackageJson, overrides?: Partial<PackageJson>): PackageJson

克隆并修改 package.json。

格式化功能

formatPackageJson(data: PackageJson, options?: FormatOptions): string

格式化 package.json 对象为字符串。

选项:

  • indent - 缩进空格数(默认:2
  • endOfLine - 文件末尾添加换行符(默认:true
  • sortFields - 字段排序(默认:true
  • sortScripts - 脚本排序(默认:false
  • sortDependencies - 依赖排序(默认:true

prettifyPackageJson(data: PackageJson): string

使用默认最佳实践格式化。

验证功能

validatePackageJson(data: PackageJson, strict?: boolean): ValidationResult

验证 package.json 的完整性和正确性。

返回值:

{
  valid: boolean
  errors: ValidationError[]
  warnings?: ValidationError[]
}

validateName(name: string): ValidationError[]

验证包名是否符合规范。

validateVersion(version: string): ValidationError[]

验证版本号是否符合 semver 规范。

操作功能

addDependency(data, name, version, type?): PackageJson

添加依赖。type 可以是 'dependencies' | 'devDependencies' | 'peerDependencies' | 'optionalDependencies'

removeDependency(data, name, type?): PackageJson

移除依赖。

updateDependencyVersion(data, name, version): PackageJson

更新依赖版本。

addScript(data, name, command): PackageJson

添加或更新脚本。

bumpVersion(data, type): PackageJson

增加版本号。type 可以是 'major' | 'minor' | 'patch'

排序功能

sortPackageJson(data, options?): PackageJson

排序 package.json 的字段。

sortDependencies(data): PackageJson

排序所有依赖字段。

sortScripts(data): PackageJson

排序 scripts 字段。

🎯 使用场景

1. CLI 工具

在脚手架工具中创建项目的 package.json:

import { createPackageJson, prettifyPackageJson } from '@baicie/pkg'
import fs from 'fs'

const pkg = createPackageJson({
  name: projectName,
  preset: 'library',
  author: 'Your Name',
})

fs.writeFileSync('package.json', prettifyPackageJson(pkg))

2. 代码规范工具

统一团队的 package.json 格式:

import { formatPackageJsonString } from '@baicie/pkg'
import fs from 'fs'

const content = fs.readFileSync('package.json', 'utf-8')
const formatted = formatPackageJsonString(content, {
  indent: 2,
  sortFields: true,
  sortDependencies: true,
})

fs.writeFileSync('package.json', formatted)

3. 自动化脚本

批量更新项目依赖:

import { updateDependencyVersion, prettifyPackageJson } from '@baicie/pkg'

let pkg = JSON.parse(fs.readFileSync('package.json', 'utf-8'))
pkg = updateDependencyVersion(pkg, 'react', '^18.3.0')
pkg = updateDependencyVersion(pkg, 'typescript', '^5.6.0')

fs.writeFileSync('package.json', prettifyPackageJson(pkg))

🤝 贡献

欢迎贡献代码、报告问题或提出建议!

📄 License

MIT © baicie