NextJS — одновременная сборка нескольких проектов со статическим экспортом?

#javascript #reactjs #webpack #next.js

#javascript #reactjs #webpack #next.js

Вопрос:

У меня есть небольшая Next.js проект, все данные поступают из нескольких конечных точек API, которые выглядят следующим образом:

 https://enpoint.com/some-query/project1
 

API спроектирован таким образом, что он может отвечать разными данными для разных сайтов:

 https://enpoint.com/some-query/project1
https://enpoint.com/some-query/project2
https://enpoint.com/some-query/project3
 

Сейчас я делаю next build amp;amp; next export так, как все, что мне нужно, это статический экспорт. Как только я запускаю эту команду, я получаю /out/project1 все файлы, необходимые для запуска сайта.

Мой вопрос — каков предпочтительный способ изменения Next.js процесс сборки, поэтому во next build amp;amp; next export время него будут выполняться вызовы API для https://enpoint.com/some-query/project1 , build out/project1 , а затем повторять те же шаги для project2 и project3 ?

Как только я создам свой проект, я хочу, чтобы в итоге:

 /out/project1
/out/project2
/out/project3
 

Есть идеи? Я искал в документах, но безуспешно.

Ответ №1:

Самое простое решение, которое я знаю, — запустить процесс сборки несколько раз с разными переменными среды.

Настройка команд сборки

 "build": "npm-run-all --parallel build:project1 build:project2 build:project3",
"build:project1": "PROJECT_ENV=project1 next build",
"build:project2": "PROJECT_ENV=project2 next build",
"build:project2": "PROJECT_ENV=project3 next build",
 

Вызывайте различные конечные точки API на основе переменных env

 export async function getStaticProps(context) {
  switch(process.env.PROJECT_ENV) {
    case 'project1': 
      // fetch project 1 data
    case 'project2': 
      // fetch project 2 data
    case 'project3': 
      // fetch project 3 data
  }
  return {
    props: {...}
  }
}
 

Возможно, это не самый лучший ответ, но я надеюсь, что это поможет.