pnpm init と pnpm create vite で生成される package.json を比較してみた

pnpm init と pnpm create vite で、生成される package.json にいくつか違いがあることに気づいたので、調べてみました。

生成される package.json

pnpm init の場合

$ pnpm init
Wrote to //package.json

{
  "name": "local-chat-app",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

vite template の場合

$ pnpm create vite chat-prototype --template react-ts

生成された package.json

{
  "name": "chat-prototype",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build",
    "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
    "preview": "vite preview"
  },
  "dependencies": {
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  },
  "devDependencies": {
    "@types/react": "^18.2.66",
    "@types/react-dom": "^18.2.22",
    "@typescript-eslint/eslint-plugin": "^7.2.0",
    "@typescript-eslint/parser": "^7.2.0",
    "@vitejs/plugin-react": "^4.2.1",
    "eslint": "^8.57.0",
    "eslint-plugin-react-hooks": "^4.6.0",
    "eslint-plugin-react-refresh": "^0.4.6",
    "typescript": "^5.2.2",
    "vite": "^5.2.0"
  }
}

これらの package.json を比較すると、いくつかの違いがあることがわかります

違いの中で気になった項目

プロジェクト名とバージョン

pnpm init: プロジェクト名は現在のディレクトリ名を使用し、バージョンは "1.0.0" から開始します。 pnpm create vite: プロジェクト名は指定した名前を使用し、バージョンは "0.0.0" から開始します。

private フィールド

pnpm create vite で生成された package.json には "private": true が含まれています。これはプロジェクトが誤って公開されるのを防ぐためです。

type フィールド

pnpm create vite で生成されたファイルには "type": "module" が含まれており、ESモジュールを使用することを示しています。

keywords フィールド

pnpm init にはプロジェクトを説明するキーワードのリストを含みます。

  1. プロジェクトの分類: プロジェクトの主要な特徴や技術を簡潔に表現するキーワードを列挙します。

  2. 検索性の向上: npm レジストリでプロジェクトを公開する場合、これらのキーワードは検索結果の改善に役立ちます。ユーザーが関連するキーワードで検索した際に、プロジェクトが見つかりやすくなります。

  3. プロジェクトの概要: 開発者や潜在的なユーザーに、プロジェクトの主要な特徴や目的を素早く理解してもらうのに役立ちます。

感想

pnpm init はパッケージとして公開することも意図しているためか、vite template 用とは違うプロパティがあった。