0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

モノレポでnpm公開する(走り書き)

Last updated at Posted at 2024-11-18

概要

  • ほとんど初めてのnpmの公開だったので、次回ように簡単に手順をまとめる
  • 現状は取っ散らかってしまっているので、次回の0から構築時にブラッシュアップ予定

初めに

基礎的な内容を含めてめちゃくちゃわかりやすい。簡単な初期構築や基本的なコマンドについて記載されている。

公開に必要な準備

リポジトリrootのpackage.jsonの作成

package.json
{
  "name": "my-project",
  "license": "UNLICENSED",
  "private": true
}

公開するディレクトリを作成する

# packages/ui配下にuiを作成する
npm init --scope tetex-public -w packages/ui

# 今回はreactのuiを公開するためreactを導入する
npm create vite@latest

.npmrc .npmignore

上述した参考サイトより、あると便利らしい。

.npmrc
init-author-email=support@example.com
init-author-name=My Organization
init-author-url=https://example.com/
init-license= UNLICENSED
init-version=0.0.0
.npmignore
node_modules/
.git/
.gitignore
test/
__tests__/
*.test.js
*.spec.js
.DS_Store
.history

packages/package.jsonの修正

package.json
{
  "name": "@tetex-public/ui",/* 公開するので追加 */
  "version": "0.0.1",/* 公開するので追加 */
  "author": "koinunopochi",/* 公開するので追加 */
  "license": "MIT",/* 公開するので追加 */
  "description": "",
  "private": false,/* 公開するので追加 */
  "type": "module",
  "main": "./dist/index.cjs.js",/* 公開するので追加 */
  "module": "./dist/index.es.js",/* 公開するので追加 */
  "types": "./dist/index.d.ts",/* 公開するので追加 */
  "exports": {/* 公開するので追加 */
    ".": {
      "import": "./dist/index.es.js",
      "require": "./dist/index.cjs.js",
      "types": "./dist/index.d.ts"
    },
    "./style.css": "./dist/index.css"/* 公開するので追加 */
  },
  "files": [/* 公開するので追加 */
    "dist"
  ],
  "scripts": {
    "dev": "vite",
    "build": "tsc -b && vite build",
    "lint": "eslint .",
    "preview": "vite preview"
  },
  "peerDependencies": { /* 公開するので追加 */
    "react": "^18.3.1",
    "react-dom": "^18.3.1"
  },
  "devDependencies": {
    "@eslint/js": "^9.13.0",
    "@types/node": "^22.9.0",
    "@types/react": "^18.3.12",
    "@types/react-dom": "^18.3.1",
    "@vitejs/plugin-react-swc": "^3.5.0",
    "autoprefixer": "^10.4.20",
    "eslint": "^9.13.0",
    "eslint-plugin-react-hooks": "^5.0.0",
    "eslint-plugin-react-refresh": "^0.4.14",
    "globals": "^15.11.0",
    "postcss": "^8.4.49",
    "react": "^18.3.1",
    "react-dom": "^18.3.1",
    "tailwindcss": "^3.4.15",
    "typescript": "~5.6.2",
    "typescript-eslint": "^8.11.0",
    "vite": "^5.4.10"
  },
  "publishConfig": { /* 公開するので追加 */
    "access": "public"
  },
  "dependencies": {
    "class-variance-authority": "^0.7.0",
    "tailwind-merge": "^2.5.4",
    "vite-plugin-dts": "^4.3.0"
  }
}

vite.config.tsにbuildを追加する

vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react-swc';
import { resolve } from 'path';
import dts from 'vite-plugin-dts';

// https://vite.dev/config/

export default defineConfig({
  plugins: [
    react(),
    dts({
      // 型定義ファイルの生成
      insertTypesEntry: true,
    }),
  ],
  resolve: {
    alias: {
      '@': resolve(__dirname, './src'),
    },
  },
  build: {
    lib: {
      entry: resolve(__dirname, 'src/index.ts'),
      name: '@tetex/ui',
      formats: ['es', 'cjs'],
      fileName: (format) => `index.${format}.js`,
    },
    rollupOptions: {
      external: ['react', 'react-dom', 'tailwindcss'],
      output: {
        globals: {
          react: 'React',
          'react-dom': 'ReactDOM',
        },
        // 固定の文字列を指定
        assetFileNames: 'index.css',
      },
    },
  },
});

src/index.tsを作成する(npmにおけるエントリーポイント)

index.ts
// 現状は、テールウィンドの定義程度
import './styles/globals.css';

公開する手順

Login + build + 公開テスト

npm login
npm run build
# パッケージの内容確認
npm pack
# パッケージの公開(テスト)
npm publish --dry-run

事前準備

login後に

https://www.npmjs.com/~[username]?activeTab=orgs

にアクセスする。

organizationタブに行けるので、そこで今回作成したルートプロジェクトの名前を入れる。

お試し公開

npm publish
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?