구성 요소가 포함된 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.js
const {preBuildDevelopment} = require("./preBuildUtilities.js")
preBuildDevelopment();
preBuildProd.js
const {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.js
import 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.)