🚙

開発日記-2024-07-27 / monorepoでルートの.envを共有する

公開日
4か月前
2024-07-27
更新履歴

monorepoでルートの.envを共有する

  • .
    • packages
      • package1
        • package2
        • apps
          • next
            • src
              • package.json
          • .env

        上記のような構成の ./apps/next のNext.jsのローカルサーバーを pnpm dev で起動した場合に、.env の環境変数を参照(process.env.XXXX)したい場合の方法。stackoverflowに答えがあった。

        以下はコマンドとpackage.jsonの修正内容メモ。

        Terminal
        pnpm add -w -D -E dotenv-cli
        apps/next/package.json
        {
          "scripts": {
            "dev": "pnpm with-env next dev",
            "with-env": "dotenv -e ../../.env --"
          },
        }

        shadcn/uiの初期化時に生成されるglobals.cssの.darkセクションが出力されない場合の対応方法

        shadcn/uiのドキュメント通りにダークモードの設定をしていたらうまくダークモードに切り替わらなかったので対応方法を残しておく。

        次のコマンドを実行するとshadcn/uiの初期化を行い、いくつかのファイルが自動的に修正される。

        Terminal
        pnpm dlx shadcn-ui@latest init

        このとき globals.css が次のように修正される。

        globals.css
        @layer base {
          :root {
            /* ... */
          }
        
          .dark { 
            /* ... */
          }
        }

        上記の .dark のセクションが実際のCSS(/_next/static/css/app/layout.css)に出力されない場合がある。Tailwind CSSでは使われていないclass属性は出力しないという仕様になっているため。

        解決策 その1

        なので、次のように tailwind.config.tssafelist'dark' を追加すると良い。

        tailwind.config.ts
        const config = {
          safelist: ['dark'],
        }

        解決策 その2

        他には次のように .dark:root[class~="dark"] に置き換えるという方法がある。

        globals.css
        @layer base {
          :root {
            /* ... */
          }
        
          :root[class~="dark"] { 
            /* ... */
          }
        }

        解決策 その3

        最後に @layer base { ... } の外側に出すという対応方法もある。

        これらの方法は以下の公式のissueにコメントがついていた。

        発生しない状況

        Tailwind CSSの設定の content: ['./src/**/*.{ts,tsx}'] の対象となっているファイルで、次のように何かの属性に dark という単語が含まれていた場合は問題は発生しない(CSSファイルに.darkセクションが出力される)ため気づかなかった。

        <ToggleGroupItem className="rounded-full" value="dark" aria-label="Toggle dark">