Вопрос или проблема
У меня есть приложение на nextjs с установленным basePath.
//next.config.mjs
/**
* @type {import('next').NextConfig}
*/
const nextConfig = {
basePath: '/app1',
output: 'export',
webpack(config, { isServer }) {
config.module.rules.push({
test: /\.svg$/,
use: ['@svgr/webpack'],
});
config.plugins.push(
new NextFederationPlugin({
name: 'someremotemfe',
filename: `static/${isServer ? 'ssr' : 'chunks'}/remoteEntry.js`,
dts: false,
exposes: {
'./Component1': './components/component/Component1',
},
extraOptions: {
exposePages: false,
},
}),
);
return config;
},
};
Я пытаюсь развернуть это веб-приложение, доступное по адресу localhost:3001/app1, на SWA. В настоящее время удаленный URL для MFE или статических ресурсов доступен по адресу https://localhost:3001/app1/_next....
Вот мой файл yaml для развертывания статического веб-приложения azure.
- task: Bash@3
displayName: Сборка с использованием turbo
inputs:
targetType: 'inline'
script: |
pnpm run build
env:
NEXT_PUBLIC_MFE_HOST_URL: ${{ parameters.MfeHostUrl }}
- task: AzureStaticWebApp@0
displayName: 'Развернуть на SWA'
inputs:
app_location: 'apps/ui/out'
api_location: 'apps/api'
output_location: ''
skip_app_build: true
skip_api_build: true
verbose: true
azure_static_web_apps_api_token: ${{ parameters.DeploymentToken }}
env:
IS_STATIC_EXPORT: true
Как я могу сделать так, чтобы все хостилось по адресу https://...staticapps.net/app1/
?
Ответ или решение
Как разместить Next.js приложение (SSG) с basePath
в Azure Static Web Apps
Внедрение Next.js приложения с указанным basePath
в Azure Static Web Apps может вызвать некоторые сложности, особенно если вы используете статический экспорт (SSG) и хотите обеспечить корректную работу маршрутизации. Рассмотрим, как можно правильно настроить ваше приложение на Azure с учетом всех нюансов.
1. Настройка next.config.mjs
Ваша конфигурация Next.js выглядит корректно, но важно учитывать, что при использовании basePath
все статические ресурсы должны корректно ссылаться на путь, начинающийся с /app1
. Проверьте, что имя вашего приложения верно указано, и все используемые компоненты правильно подхватывают basePath
. Ваш next.config.mjs
выглядит следующим образом:
/**
* @type {import('next').NextConfig}
*/
const nextConfig = {
basePath: '/app1',
output: 'export',
webpack(config, { isServer }) {
config.module.rules.push({
test: /\.svg$/,
use: ['@svgr/webpack'],
});
config.plugins.push(
new NextFederationPlugin({
name: 'someremotemfe',
filename: `static/${isServer ? 'ssr' : 'chunks'}/remoteEntry.js`,
dts: false,
exposes: {
'./Component1': './components/component/Component1',
},
extraOptions: {
exposePages: false,
},
}),
);
return config;
},
};
Убедитесь, что все пути к статическим ресурсам в вашем коде корректно указывают на basePath
. Например, если вы используете изображения или другие статические ресурсы, их пути должны быть стабильными относительно basePath
.
2. Установка правильного пути в yaml
конфигурации
Посмотрим на ваш YAML файл для развертывания. Вам нужно убедиться, что пути указаны правильно. Важно, чтобы вы указали output_location
, который будет содержать сгенерированные статические файлы.
Ваш YAML файл выглядит следующим образом:
- task: Bash@3
displayName: Build using turbo
inputs:
targetType: 'inline'
script: |
pnpm run build
env:
NEXT_PUBLIC_MFE_HOST_URL: ${{ parameters.MfeHostUrl }}
- task: AzureStaticWebApp@0
displayName: 'Deploy to SWA'
inputs:
app_location: 'apps/ui/out'
api_location: 'apps/api'
output_location: ''
skip_app_build: true
skip_api_build: true
verbose: true
azure_static_web_apps_api_token: ${{ parameters.DeploymentToken }}
env:
IS_STATIC_EXPORT: true
3. Исправления в yaml
конфигурации
На этапе развертывания вам нужно убедиться, что output_location
правильно указывает на выходные файлы, созданные вашим Next.js приложением. После статической сборки Next.js в папке out
должны находиться все необходимые статические файлы, включая директория с ресурсами с basePath
.
Обновите вашу конфигурацию следующим образом:
- task: AzureStaticWebApp@0
displayName: 'Deploy to SWA'
inputs:
app_location: 'apps/ui/out'
api_location: 'apps/api'
output_location: 'out' # Убедитесь, что это указание на выходные файлы
skip_app_build: true
skip_api_build: true
verbose: true
azure_static_web_apps_api_token: ${{ parameters.DeploymentToken }}
env:
IS_STATIC_EXPORT: true
4. Тестирование развертывания
После выполнения всех вышеуказанных пунктов разверните приложение в Azure Static Web Apps и протестируйте доступ к вашей странице по адресу https://<your-app-name>.staticapps.net/app1/
. Все маршруты и ресурсы должны подхватываться соответствующим образом. Обратите внимание на консоль разработчика вашего браузера для выявления возможных ошибок загрузки ресурсов или маршрутизации.
Заключение
Настройка Next.js приложения с использованием basePath
в Azure Static Web Apps требует внимательного подхода к конфигурации и корректным указаниям путей в зависимости от структуры проекта. Следуя описанным шагам, вы сможете успешно развернуть ваше приложение и обеспечить его корректную работу. Если возникнут дополнительные вопросы, рекомендую обратиться к документации Azure или сообществу разработчиков Next.js для получения поддержки.