Files
bot-agents/.agents/memory/package-json-shape.md
T
Danny Kim c02ab9b156
Check / check (pull_request) Successful in 37s
Add damem notes and skills
2026-10-16 08:28:47 +09:00

2.1 KiB

description
description
package.json key order is metadata, scripts, exports, imports, devDependencies, dependencies; standard fields only; no peerDependencies or packageManager

Key order (2026-10-14)

Metadata first, then scripts, exports, imports, devDependencies, dependencies. Oxfmt would re-sort the file, so vite.config.ts sets fmt: { sortPackageJson: false }; keep it, and keep the order by hand.

{
  "name": "@cunarist/eslint-plugin-x",
  "version": "0.1.0",
  "description": "...",
  "keywords": ["eslint", "eslint-plugin", "eslintplugin", "oxlint"],
  "license": "MIT",
  "repository": { "type": "git", "url": "git+https://github.com/..." },
  "type": "module",
  "files": ["dist"],
  "engines": { "node": ">=22" },
  "eslint-doc-generator": {/* tool options that can only live here */},
  "scripts": { "docs": "eslint-doc-generator" },
  "exports": { ".": "./dist/index.js" },
  "imports": { "#helpers": "./src/helpers/index.ts" },
  "devDependencies": { "vite-plus": "^1.1.0" },
  "dependencies": {},
}

The imports key order can carry meaning: import-check's enforce-layer-order reads it as the layer order. Never reorder it casually.

Fields

  • Standard fields only. engines has only node (never engines.bun). A tool-owned key (eslint-doc-generator) is allowed only because the tool reads nothing else and no other config file is allowed.
  • No packageManager. npm is detected from package-lock.json.
  • No peerDependencies, ever (user preference, 2026-10-14). If something is needed at runtime, it goes in dependencies.
  • dependencies = what runs or is type-referenced at runtime by consumers (the lit plugin ships parse5, oxc-parser, oxc-resolver, and @eslint/core for its public types; they stay external, never bundled).
  • devDependencies = everything else: vite-plus, eslint, @typescript-eslint/parser, eslint-doc-generator, esbuild, typescript-6, @types/node. ESLint is a devDependency only; plugins need nothing from it at runtime.

Refresh the lockfile with npm install (or npm install --package-lock-only for a version bump) and commit it with the change.