🙆

Next.jsをAmplify Hostingでモノレポ対応するまでにやったこと

2023/02/08に公開

前提

バージョン

  • Nextjs:13.1.6
  • @aws-amplify/cli:10.5.2

ディレクトリ構成

.
├── packages
│   ├── api
│   └── web
└── package.json

Amplify Hostingのデフォルトの設定ではデプロイできない

2023年2月8日時点でAmplifyが自動生成するamplify.ymlではモノレポ環境のNextjsをデプロイすることはできませんでした。

version: 1
applications:
  - backend:
      phases:
        build:
          commands:
            - '# Execute Amplify CLI with the helper script'
            - amplifyPush --simple
    frontend:
      phases:
        preBuild:
          commands:
            - yarn install
        build:
          commands:
            - yarn run build
      artifacts:
        baseDirectory: .next
        files:
          - '**/*'
      cache:
        paths:
          - node_modules/**/*
    appRoot: packages/web

やったこと

モノレポ環境ではルートディレクトリがトレース対象にならないので、next.config.jsで以下の設定を追加する。

experimental: {
  outputFileTracingRoot: path.join(__dirname, '../../'),
}

Advanced Features: Output File Tracing | Next.js

.next/standaloneがAmplify Hostingが期待する形になるように、postBuildをamplify.ymlに追加する。

version: 1
applications:
  - backend:
      phases:
        build:
          commands:
            - '# Execute Amplify CLI with the helper script'
            - amplifyPush --simple
    frontend:
      phases:
        preBuild:
          commands:
            - cd ../../
            - yarn install
        build:
          commands:
            - cd packages/web
            - yarn run build
        postBuild:
          commands:
            - shopt -s dotglob
            - mv -f .next/standalone/packages/vendor/* .next/standalone
            - rm -rf .next/standalone/packages
      artifacts:
        baseDirectory: .next
        files:
          - '**/*'
      cache:
        paths:
          - node_modules/**/*
    appRoot: apps/vendor

Cannot find module 'next/dist/server/next-server.js' · Discussion #39432 · vercel/next.js

Discussion