Open9

Nextjsの構築メモ

こばしゅんこばしゅん
npx create-next-app --ts

yarnで作られてまうな〜npmがいいなあ〜

これでいけた

npx create-next-app --ts --use-npm 
こばしゅんこばしゅん

tailwindcssいれてみる
https://tailwindcss.com/docs/guides/nextjs

npm install -D tailwindcss@latest postcss@latest autoprefixer@latest
npx tailwindcss init -p

実装をsrcディレクトリに移動したいので、下記のように書く

tailwind.config.js
module.exports = {
  purge: ['./src/pages/**/*.{js,ts,jsx,tsx}', './src/components/**/*.{js,ts,jsx,tsx}'],
  darkMode: false, // or 'media' or 'class'
  theme: {
    extend: {},
  },
  variants: {
    extend: {},
  },
  plugins: [],
}

2022.5 更新

purgeオプションはcontentオプションに名前変わったっぽい
https://github.com/tailwindlabs/tailwindcss/discussions/6019#discussioncomment-1609444


公式では @tailwindみたいに書かれてるけど、lintに怒られるのでこっち

/* ./styles/globals.css */
@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";
こばしゅんこばしゅん

eslint

デフォルトにプラスα

npm install -D eslint-config-airbnb @typescript-eslint/eslint-plugin @typescript-eslint/parser
こばしゅんこばしゅん

.eslintrc

{
  "extends": [
    "next/core-web-vitals", 
    "airbnb", 
    "airbnb/hooks", 
    "plugin:@typescript-eslint/recommended"
  ],
  "rules": {
    "react/jsx-filename-extension": [ // tsxファイルでJSXを使うため
      "error",
      { "extensions": [".jsx", ".tsx"] }
    ],
    "react/react-in-jsx-scope": 0, // Reactの宣言もういらんやろ
    
    "react/jsx-props-no-spreading": 0, // propsをスプレッドで許可したいため
    "@typescript-eslint/explicit-module-boundary-types": 0 // return typesは指定せずに型推論でいけそうな気がするため
  }
}

最初のふたつはrecommendでカバーされてほしいなあ。

こばしゅんこばしゅん

env、環境変数の型定義

ルートに以下を配置

globals.d.ts

declare namespace NodeJS {
    interface ProcessEnv {
      readonly NODE_ENV: 'development' | 'production' | 'test';

      /** サイト名 */
      readonly NEXT_PUBLIC_SITE_NAME: string;
    }
  }

こんな感じで補完されるようになる、うれしい

参考
https://maku.blog/p/r8iry9g/