Documentation Index
Fetch the complete documentation index at: https://injectivelabs-mintlify-jp-developers-first-half-1777019423.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Nuxt3 - 직관적인 웹 프레임워크
@InjectiveLabs에서 Injective 위에 탈중앙화 애플리케이션을 구축하기 위해 선호하는 UI 프레임워크는 Nuxt3입니다. @injectivelabs 패키지와 암호화 지갑과 상호 작용하는 데 필요한 일부 폴리필로 Nuxt3 + Vite 빌더를 구성하는 것을 도와드리겠습니다.
1. Nuxt 3 설치
Nuxt3 문서의 시작하기 가이드를 따르고 애플리케이션을 설정하세요.
2. @injectivelabs 패키지 설치
yarn을 사용하여 @injectivelabs 패키지를 설치할 수 있습니다.
$ yarn add @injectivelabs/sdk-ts @injectivelabs/networks @injectivelabs/ts-types @injectivelabs/utils
## 지갑 연결이 필요한 경우
$ yarn add @injectivelabs/wallet-strategy
이것들은 injective-ts 모노레포에서 가장 일반적으로 사용되는 패키지입니다.
3. Nuxt 구성 및 폴리필 추가
먼저 필요한 폴리필 패키지를 추가합니다
$ yarn add @bangjelkoski/node-stdlib-browser
$ yarn add -D @bangjelkoski/vite-plugin-node-polyfills
vue-tsc@1.8.8, nuxt@^3.8.1, typescript@^5.0.4 버전을 사용하고 있는지 확인하세요.
Buffer
모든 암호화 관련 탈중앙화 애플리케이션의 주요 종속성 중 하나는 Buffer입니다. 프로젝트에 Buffer를 추가하려면 종속성으로 설치한 다음 전역/window 객체로 가져오는 Nuxt 플러그인을 만들 수 있습니다:
// 파일명 - plugins/buffer.client.ts
export default defineNuxtPlugin(() => {
import('buffer/').then((Buffer) => {
window.Buffer = window.Buffer || Buffer.default.Buffer
globalThis.Buffer = window.Buffer || Buffer.default.Buffer
})
})
4. 상태 관리 사용
상태 관리로 pinia를 사용할 예정이라면 패키지에 추가하세요:
$ yarn add @pinia/nuxt@^0.4.9
5. vueuse 사용
많은 유틸리티 함수를 기본 제공하므로 @vueuse/nuxt를 종속성으로 추가하는 것이 좋습니다.
그런 다음 TypeScript를 사용하는 경우(권장) tsconfig.json을 구성해야 합니다. 다음 tsconfig.json을 기본으로 참조할 수 있습니다.
{
// https://nuxt.com/docs/guide/concepts/typescript
"extends": "./.nuxt/tsconfig.json",
"compilerOptions": {
"strict": true,
"module": "NodeNext",
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"types": ["@vueuse/nuxt", "@pinia/nuxt"]
},
"exclude": ["node_modules", "dist", ".output"]
}
6. nuxt.config.ts / packages.json
애플리케이션을 부팅하기 전에 모든 Nuxt 3 애플리케이션의 기본 구성 지점인 nuxt.config.ts에서 모든 것을 설정해야 합니다. 참조 nuxt.config.ts를 보고 개발자가 이해하기 쉽도록 주석을 사용하여 각 줄을 설명하겠습니다.
// 파일명 - nuxt.config.ts
import tsconfigPaths from 'vite-tsconfig-paths'
import { nodePolyfills } from '@bangjelkoski/vite-plugin-node-polyfills'
export default defineNuxtConfig({
ssr: false, // 애플리케이션을 사전 렌더링할지 여부
modules: [
// nuxtjs 모듈
'@pinia/nuxt',
'@vueuse/nuxt',
],
typescript: {
typeCheck: 'build', // 빌드 타입에서만 타입스크립트 검사를 수행하도록 build를 권장합니다
},
imports: {
// 스토어 정의의 자동 가져오기 (pinia를 사용하는 경우)
dirs: ['store/**'],
},
pinia: {
// pinia 정의 가져오기
autoImports: ['defineStore'],
},
plugins: [
{
// 우리가 만든 buffer 플러그인 가져오기
src: './plugins/buffer.client.ts',
ssr: false,
},
],
// 서버가 필요하지 않으므로 클라이언트 측에서만 사이트맵을 생성합니다
// 참고: Vite + Nuxt3의 사이트맵에 문제가 있습니다
// 일반적으로 사이트맵을 생성하는 데 너무 많은 시간/메모리가 걸리고
// 빌드 프로세스가 실패할 수 있습니다
// Github Actions/Netlify/Vercel 등에서 다른 전략을 사용해야 합니다
// 로컬에서 생성하고 busgnag과 같은 서비스로 푸시하는 것처럼
sourcemap: {
server: false,
client: true,
},
// Vite 관련 구성
vite: {
plugins: [
// 노드 + 암호화 폴리필 + vite TS 경로 해석 설정
tsconfigPaths(),
nodePolyfills({ protocolImports: false }),
],
build: {
sourcemap: false, // 생성하지 않음
// 기본 rollup 옵션
rollupOptions: {
cache: false,
output: {
manualChunks: (id: string) => {
//
},
},
},
},
// @bangjelkoski/vite-plugin-node-polyfills 플러그인에 대한
// 일부 Vite 관련 문제에 필요
optimizeDeps: {
exclude: ['fsevents'],
},
},
})
번들 크기를 줄이기 위해 수행할 수 있는 최적화가 하나 있습니다 - packages.json에 이러한 해상도를 추가하세요
"resolutions": {
"@ethereumjs/tx": "^4.1.1",
"**/libsodium": "npm:@bangjelkoski/noop",
"**/libsodium-wrappers": "npm:@bangjelkoski/noop"
}
7. 앱 부팅
마지막으로 yarn dev를 사용하여 로컬에서 앱을 시작하거나 yarn generate를 사용하여 Netlify, Vercel 등과 같은 정적 페이지 호스팅에 배포할 수 있는 정적 페이지를 생성할 수 있습니다.