구성 요소가 포함된 NextJS getStaticProps
12107 단어 nextjsjavascript
getStaticProps를 사용하는 대신 모든 콘텐츠를 한 번에 미리 생성하고 구성 요소로 직접 가져올 수 있는지 확인하기로 결정했습니다.팀에서 이 페이지 제한
getStaticProps을 해결하기로 결정한 방법은 NodeJS 빌드 프로세스를 사용하여 필요한 모든 위치에서 콘텐츠를 가져오고 구성 요소가 표준json 파일로 가져올 프로젝트에 넣는 것입니다. 개발 및 생산 환경에 따라 다른 버전을 만들 수도 있습니다.설정
프로젝트 디렉토리에서
preBuildScripts 폴더에 추가할 좋은 위치를 찾으십시오(원하는 이름을 지정할 수 있음). 내 프로젝트 디렉토리에는 다음이 있습니다.src -> functions -> preBuildScripts
배포할 단일 환경이 있는 경우 두 개의 파일만 필요합니다. 각각의 추가 환경에 대해 실행할 추가 파일이 필요합니다. 이 예에서는 개발 환경과 프로덕션 환경에 대한 파일을 빌드합니다.
새 파일:
preBuildUtilities.js
preBuildDev.js
preBuildProd.js
테스트 설정
preBuildUtilities.js 내부에 다음과 같은 모듈 내보내기 코드를 추가합니다.module.exports.preBuildDevelopment = async() => {
console.log("Loading the development content!")
}
module.exports.preBuildProduction = async() => {
console.log("Loading the production content!")
}
이제 다른 각 파일 내에서 해당 함수를 호출할 수 있습니다.
preBuildDev.jsconst {preBuildDevelopment} = require("./preBuildUtilities.js")
preBuildDevelopment();
preBuildProd.jsconst {preBuildProduction} = require("./preBuildUtilities.js")
preBuildProduction();
이제 설정이 거의 완료되었습니다! 이러한 함수를 호출하는 방법은 간단합니다. NPM은 접두사가
package.json 인 pre 파일에서 스크립트를 자동으로 실행합니다. 자세한 내용은 여기에서 확인할 수 있습니다. https://docs.npmjs.com/cli/v8/using-npm/scripts#life-cycle-scriptsPackage.json 파일 업데이트
package.json를 열고 다음을 표시하는 scripts 섹션을 찾습니다."scripts": {
"dev": "next dev",
"build": "next build"
}
다음과 같이 그 위에 새 스크립트를 추가합니다.
다중 환경 예
"scripts": {
"predev": "node src/functions/preBuildScripts/preBuildDev.js",
"dev": "next dev",
"prebuild:dev": "node src/functions/preBuildScripts/preBuildDev.js",
"build:dev": "next build",
"prebuild:prod": "node src/functions/preBuildScripts/preBuildProd.js",
"build:prod": "next build"
}
단일 환경 예
다음은 단일 환경 설정의 예입니다.
"scripts": {
"predev": "node src/functions/preBuildScripts/preBuildDev.js",
"dev": "next dev",
"prebuild": "node src/functions/preBuildScripts/preBuildDev.js",
"build": "next build"
}
특정 프로젝트에 맞게 폴더 경로를 수정해야 합니다. 이제 서버가 꺼져 있는지 확인하고 터미널을 열고 일반 명령을 실행하십시오
npm run dev. 콘솔에 Loading the development content!가 표시되어야 합니다!이제 설정이 완료되었으므로 원하는 기능을 무엇이든 추가할 수 있습니다
preBuildUtilities.js.새 파일 만들기
preBuildUtilities.js 내부에서 일부 JSON 데이터를 생성하는 샘플 API 요청을 생성해 보겠습니다. CMS에서 콘텐츠를 가져오고 데이터로 구성 요소를 채우려는 것처럼 가장합니다.이를 위해 Star Wars API을 사용할 수 있으며 이 기능을 필요에 따라 교체할 수 있습니다. 우리는
preBuildDevelopment() 함수에 초점을 맞출 것이지만 preBuildProduction() 에 대해 동일한 패턴을 따를 것입니다.preBuild 스크립트를 빌드하는 단계는 다음과 같습니다.
Fetch는 아직 NodeJS에서 널리 지원되지 않기 때문에 이 예제에서는 Axios를 사용합니다. 프로젝트에 필요한 모든 종류의 HTTP 요청 시스템을 자유롭게 사용하세요. 동일하게 작동합니다.
참고: 경합 상태를 방지하기 위해 여기에서 동기식을 사용합니다. 또한 이것을 실행하기 전에 폴더가 존재하는지 확인하십시오. 그렇지 않으면 노드가 적절한 디렉토리를 찾는 동안 오류가 발생할 수 있습니다.
const fs = require('fs');
const axios = require('axios').default;
module.exports.preBuildDevelopment = async() => {
const API = `https://swapi.dev/api/people`;
const response = await axios.get(API);
const data = response.data.results;
fs.writeFileSync("./src/data/preBuild/starWarsData.json", JSON.stringify(data))
}
서버가 꺼져 있는지 확인한 다음
npm run dev 를 사용하여 시작합니다. 서버가 실행되면 파일 디렉토리를 확인하여 새 JSON 파일이 있는지 확인하십시오. 잘만되면!이제 모든 구성 요소에서 다음과 같이 데이터를 참조할 수 있습니다.
StarWarsList.jsimport starWarsData from "src/data/preBuild/starWarsData.json";
export const StarWarsList = () => {
return (
<ul>
{starWarsData.map((item, index) => (
<li key={`star-wars-item-${index}`}>{item.name}</li>
))}
</ul>
)
}
이제 구성 요소가 서버 측/정적 데이터를 활용하고 있습니다! 🎉
Reference
이 문제에 관하여(구성 요소가 포함된 NextJS getStaticProps), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/brewhousedigital/nextjs-getstaticprops-with-components-f25텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)