Next.js: Next.js API 겜로(및 페읎지)는 파음 읜Ʞ륌 지원핎알 합니닀.

에 만든 2019년 08월 05음  Â·  87윔멘튞  Â·  출처: vercel/next.js

Ʞ능 요청

Ʞ능 요청읎 묞제와 ꎀ렚되얎 있습니까? Ʞ술핎 죌십시였.

현재 API 겜로 또는 페읎지에서 파음을 읜을 수 없습니닀.

원하는 솔룚션 섀명

__dirname 겜로륌 사용하여 fs.readFile 륌 혞출하고 "귞냥 작동"하도록 하고 싶습니닀.

읎것은 개발 및 생산 몚드에서 작동핎알 합니닀.

고렀한 대안을 Ʞ술하십시였

읎것은 음부 용량에서 @zeit/webpack-asset-relocator-loader 와 통합핎알 할 수도 있습니닀. 읎 플러귞읞은 읎러한 유형의 요구 사항을 처늬합니닀.

귞러나 필수 사항은 아닙니닀. __dirname 및 __filename (상대 또는 cwd êž°ë°˜ 겜로 없음)에서만 _만_ 작동하는 항목읎멎 ꎜ찮습니닀.

추가 컚텍슀튞

예시:

// pages/api/test.js
import fs from 'fs'
import path from 'path'

export default (req, res) => {
  const fileContent = fs.readFileSync(
    path.join(__dirname, '..', '..', 'package.json'), 
    'utf8'
  )
  // ...
}

ì°žê³ : 위의 ☝ 예제륌 require 속음 수 있닀는 것을 알고 있지만 귞게 요점읎 아닙니닀. 😄

story feature request

가장 유용한 댓Ꞁ

ë‚Žê°€ 사용하는 í•Žê²° 방법:

# next.config.js
module.exports = {
    serverRuntimeConfig: {
        PROJECT_ROOT: __dirname
    }
}

겜로가 필요한 위치에

import fs from 'fs'
import path from 'path'
import getConfig from 'next/config'
const { serverRuntimeConfig } = getConfig()

fs.readFile(path.join(serverRuntimeConfig.PROJECT_ROOT, './path/to/file.json'))

읎것읎 현재 파음에 상대적읞 겜로가 있는 ì°žì¡° 파음의 필요성을 핎결하지 못한닀는 것을 알고 있지만 읎것은 낮 맀우 ꎀ렚된 사용 사례( /public/images 폎더에서 읎믞지 파음 읜Ʞ)륌 핎결합니닀.

몚든 87 댓Ꞁ

API 겜로륌 사용하여 파음 업로드륌 구현하렀고 시도하는 것을 두 번짞로 원했습니닀. 파음을 업로드할 수 있지만 S3 버킷에 업로드하렀멎 닀시 액섞슀할 수 있얎알 합니닀.

나는 읎것을 두 번짞! 또한 디렉토늬륌 읜을 수 있는 것은 우늬 회사의 사용에 맀우 쀑요합니닀. 팀 구성원 및 랔로귞 게시묌곌 같은 데읎터륌 윘텐잠 디렉토늬에 볎ꎀ하므로 디렉토늬의 몚든 파음을 요구하는 방법을 ì°Ÿê³  있습니닀.

위의 PR로 핎결됩니닀! ☝ 🙏

fs.writeFile 귞게 가능한가요? 예륌 듀얎 /api/route 에 게시된 웹훅을 Ʞ반윌로 JSON 파음을 만듀고 저장합니닀.

@marlonmarcello , 읎것읎 가능할 것입니닀. 계속 지쌜뎐 죌섞요 😊

읎거 읎믞 핎결됐얎?

아직, 당신은 #8334륌 구독할 수 있습니닀

@huv1k 감사합니닀!

읎 작업을 더 빚늬 진행하는 데 도움읎 되는 방법읎 있습니까?

죌목할 가치: TypeScript륌 사용하는 겜우 읎믞 JSON 파음을 몚듈로 직접 가젞올 수 있습니닀( resolveJsonModule 가 true 에서 tsconfig.json ). 예:

import myJson from '../../../some/path/my.json';

JSON 객첎의 몚양도 자동윌로 타입윌로 사용되Ʞ 때묞에 자동 완성 Ʞ능읎 정말 좋습니닀.

ë‚Žê°€ 사용하는 í•Žê²° 방법:

# next.config.js
module.exports = {
    serverRuntimeConfig: {
        PROJECT_ROOT: __dirname
    }
}

겜로가 필요한 위치에

import fs from 'fs'
import path from 'path'
import getConfig from 'next/config'
const { serverRuntimeConfig } = getConfig()

fs.readFile(path.join(serverRuntimeConfig.PROJECT_ROOT, './path/to/file.json'))

읎것읎 현재 파음에 상대적읞 겜로가 있는 ì°žì¡° 파음의 필요성을 핎결하지 못한닀는 것을 알고 있지만 읎것은 낮 맀우 ꎀ렚된 사용 사례( /public/images 폎더에서 읎믞지 파음 읜Ʞ)륌 핎결합니닀.

PR에서 볎니 읎것읎 조ꞈ 변겜되었습니닀 - 현재 계획읎 묎엇읞지에 대한 업데읎튞가 있습니까(또는 귞렇지 않은지)? 추구하고 싶지 않은 몇 가지 전략읎 있는 것 같습니닀. 목록을 작성하는 것을 엌두에 두섞요. + Ʞ여자듀읎 읎것을 시도할 수 있는 읎유는 묎엇입니까?

읎것은 Next.js에서 nexus 의 사용 을

ë‚Žê°€ 사용하는 í•Žê²° 방법:

# next.config.js
module.exports = {
    serverRuntimeConfig: {
        PROJECT_ROOT: __dirname
    }
}

겜로가 필요한 위치에

import fs from 'fs'
import path from 'path'
import getConfig from 'next/config'
const { serverRuntimeConfig } = getConfig()

fs.readFile(path.join(serverRuntimeConfig.PROJECT_ROOT, './path/to/file.json'))

읎것읎 현재 파음에 상대적읞 겜로가 있는 ì°žì¡° 파음의 필요성을 핎결하지 못한닀는 것을 알고 있지만 읎것은 낮 맀우 ꎀ렚된 사용 사례( /public/images 폎더에서 읎믞지 파음 읜Ʞ)륌 핎결합니닀.

멋진 낚자. 나륌 위핎 음했닀.

나는 읎것을 위핎 새로욎 getStaticProps 방법을 사용했습니닀(#9524에서). 읎 방법은 현재 불안정한 것윌로 표시되얎 있지만 공식적윌로 전달하는 것에 대핮 Next.js 팀의 좋은 지원읎 있는 것 같습니닀.

예:

export async function unstable_getStaticProps() {
  const siteData = await import("../data/pages/siteData.json");
  const home = await import("../data/pages/home.json");

  return {
    props: { siteData, home }
  };
}

@ScottSmith95 읎것을 사용하는 공개 소슀 프로젝튞가 있습니까? ì–Žë–€ 몚습음지 궁ꞈ합니닀.

읎 프로젝튞는 아직 였픈 소슀가 아니지만 질묞읎 더 있윌멎 낮 구성을 더 공유핎 드늬겠습니닀.

@ScottSmith95 _몚든 _ 질묞읎 있습니닀 😛

  1. 프로젝튞의 얎디에 데읎터 파음을 저장합니까? (왞부/낎부 src ?)
  2. 귞것듀을 사용하는 next.js 페읎지 컎포넌튞는 얎떻게 생게나요?
  3. 하드 윔딩된 겜로만 있습니까, 아니멎 겜로 맀개변수륌 Ʞ반윌로 파음을 로드할 수 있습니까?
  4. 특히 하드 윔딩된 겜로가 아닌 겜우 빌드/배포는 얎떻게 작동합니까?

@Svish 우늬는 프로젝튞 낎의 /data에 데읎터 파음을 저장합니닀. (페읎지는 /src/prages가 아니띌 /pages에 있습니닀.) 읎 페읎지 구성 요소는 닀음곌 같습니닀(props는 Ʞ볞 낎볎낎Ʞ읞 Home 구성 요소로 전송됚).

// /pages/index.js
const Home = ({ siteData, home }) => {
  return (
    <>
      <Head>
        <meta name="description" content={siteData.siteDescription} />
        <meta name="og:description" content={siteData.siteDescription} />
        <meta
          name="og:image"
          content={getAbsoluteUrl(siteData.siteImage, constants.siteMeta.url)}
        />
      </Head>
      <section className={`container--fluid ${styles.hero}`}>
        <SectionHeader section={home.hero} heading="1">
          <div className="col-xs-12">
            <PrimaryLink
              href={home.hero.action.path}
              className={styles.heroAction}
            >
              {home.hero.action.text}
            </PrimaryLink>
          </div>
        </SectionHeader>
        <div className={styles.imageGradientOverlay}>
          <img src={home.hero.image.src} alt={home.hero.image.alt} />
        </div>
      </section>
    </>
  );
};

동적 겜로가 있는 고꞉ 페읎지의 겜우 닀음곌 같읎 읎 데읎터륌 가젞옵니닀.

// /pages/studio/[member.js]
export async function unstable_getStaticProps({ params }) {
  const siteData = await import("../../data/pages/siteData.json");
  const member = await import(`../../data/team/${params.member}.json`);

  return {
    props: { siteData, member }
  };
}

동적 겜로륌 사용하멎 배포가 정말 원활하게 진행되며 getStaticPaths() 가 필요합니닀. 읎에 대한 묞서 는 RFC 륌 확읞하는

// /pages/studio/[member.js]
export async function unstable_getStaticPaths() {
  const getSingleFileJson = async path => await import(`../../${path}`);

  // These utility functions come from `@asmallstudio/tinyutil` https://github.com/asmallstudio/tinyutil
  const directoryData = await getDirectory(
    "./data/team",
    ".json",
    getSingleFileJson,
    createSlugFromTitle
  );
  const directoryPaths = directoryData.reduce((pathsAccumulator, page) => {
    pathsAccumulator.push({
      params: {
        member: page.slug
      }
    });

    return pathsAccumulator;
  }, []);

  return directoryPaths;
}

@ScottSmith95 유망

  1. 여Ʞ서 하는 음은 정적 사읎튞 생성을 위한 것입니까? 슉 next export ?
  2. getStaticPaths 가 겜로 맀개변수 목록을 반환한닀는 사싀을 제가 올바륎게 읎핎했나요? 귞런 닀음 각 렌더링에 대핮 getStaticProps 에 하나씩 (닀음윌로) 공꞉됩니까?
  3. 예륌 듀얎 맀개변수가 없는 페읎지에 getStaticPaths 없읎 getStaticProps 륌 사용할 수 있습니까?
  4. 당신읎 사용할 수있는 getStaticProps 에서 _app ? 예륌 듀얎 로드하렀는 사읎튞 전첎 구성읎나 읎와 유사한 것읎 있닀멎?

api는요?? 읎러한 후크는 페읎지용읎지만 API는 얎떻습니까?

혌란슀러워요. 닀음 구성에서 _dirname을 env 변수로 섀정할 수 있었습니닀. 따띌서 API에서 파음 시슀템에 액섞슀할 수 있었지만 로컬에서만 작동했습니닀. 지ꞈ 배포한 후 였류가 발생했습니닀. 배포 후 작동하지 않는 읎유는 묎엇입니까?

@josias-r 죌요 묞제는 음반적윌로 읜을 파음읎 배포에 포핚되지 않는닀는 점읎지만 파음을 포핚하는 방법곌 파음 유형에 따띌 닀늅니닀( js / json 음반적윌로 ꎜ찮지만 .jade 와 같은 닀륞 파음 형식은 파음을 읜고 처늬하Ʞ 위핎 별도의 @now/node 람닀/배포륌 사용하는 것곌 같읎 읎륌 처늬하는 대첎 방법읎 필요합니닀.

였류에 대핮 더 자섞히 섀명할 수 있닀멎 누군가가 당신을 도욞 수 있습니닀.

@BrunoBernardino 싀제로 낮 src 폮더 안의 JSON 파음을 찞조하고 있었습니닀. 귞러나 싀제로는 읎믞 배포에 싀팚한 fs.readdirSync(my_dirname_env_var) 메서드입니닀. 따띌서 배포 후 핎당 디렉토늬가 전혀 졎재하지 않는 것 같습니닀. 닀음은 낮 API륌 통핎 json에 대한 전첎 겜로에 액섞슀하렀고 할 때 얻는 것입니닀.

ERROR   Error: ENOENT: no such file or directory, open '/zeit/3fc37db3/src/content/somejsonfilethatexists.json'

귞늬고 ë‚Žê°€ 얞꞉했듯읎 읎것은 빌드하고 npm start 륌 싀행할 때 로컬에서 작동합니닀.

@josias-r 감사합니닀! 대신 (배포륌 디버귞하Ʞ 위핎) 상대 겜로(변수 없음)로 fs.readdirSync 륌 시도핎 볎셚습니까? 나는 음반적윌로 작동한닀는 것을 발견했윌며, 귞렇닀멎 쎈Ʞ화 프로섞슀( getInitialProps 또는 Ʞ타)의 얎딘가에 핎당 윔드륌 작성할 수 있윌므로 배포 프로섞슀는 핎당 파음읎 필요하닀는 것을 확읞한 닀음 싀제 윔드/로직에서 var로 파음을 계속 읜습니닀. 깔끔하지는 않지만 읎것읎 지원될 때까지 작동합니닀. ì–Žë–€ 겜우에는 __dirname 사용하는 것도 횚곌가 있닀고 생각합니닀.

@BrunoBernardino 룚튞 상대 겜로 ./ 에서 시작하는 파음 튞늬륌 만듀 수 있었습니닀. ë‚Žê°€ 얻은 것은 닀음 JSON읎었습니닀(녾드 몚듈읎 나엎되지 않음).

{
  "path": "./",
  "name": ".",
  "type": "folder",
  "children": [
    {
      "path": ".//.next",
      "name": ".next",
      "type": "folder",
      "children": [
        {
          "path": ".//.next/serverless",
          "name": "serverless",
          "type": "folder",
          "children": [
            {
              "path": ".//.next/serverless/pages",
              "name": "pages",
              "type": "folder",
              "children": [
                {
                  "path": ".//.next/serverless/pages/api",
                  "name": "api",
                  "type": "folder",
                  "children": [
                    {
                      "path": ".//.next/serverless/pages/api/posts",
                      "name": "posts",
                      "type": "folder",
                      "children": [
                        {
                          "path": ".//.next/serverless/pages/api/posts/[...id].js",
                          "name": "[...id].js",
                          "type": "file"
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "path": ".//node_modules",
      "name": "node_modules",
      "type": "folder",
      "children": ["alot of children here ofc"]
    },
    { "path": ".//now__bridge.js", "name": "now__bridge.js", "type": "file" },
    {
      "path": ".//now__launcher.js",
      "name": "now__launcher.js",
      "type": "file"
    }
  ]
}

JSON 파음읎 누띜된 것 같습니닀. 위에서 제안한 것처럌 윔드륌 통핎 파음을 포핚시킀셚습니까? 죌요 묞제는 배포 싀행읎 항상 동적 겜로륌 선택하는 것은 아니므로 정적 겜로륌 강제로 적용하는 것읎 곌거에는 횚곌적읎었닀는 것입니닀(싀제 윔드가 싀행될 필요는 없지만 ꎀ렚 파음읎 포핚). 귞게 말읎 되나요?

@BrunoBernardino 비 API 솔룚션윌로 전환했습니닀. 폎더에서 파음을 동적윌로 요구하고 읎 파음의 낎용만 필요하므로 import() 메서드륌 사용할 수 있습니닀. 나는 핎킹처럌 볎읎Ʞ 때묞에 읎런 식윌로 하고 싶지는 않았지만 볞질적윌로 낮 API 엔드포읞튞가 수행했을 것곌 동음한 작업을 수행하고 있습니닀.
... 정적 폎더에 파음을 넣윌렀고했지만 작동하지 않았습니닀. 귞러나 파음 시슀템에 액섞슀하는 것읎 믞래에 가능하Ʞ륌 바랍니닀.

나는 또한 í•Ží‚€ 솔룚션에 의졎핎알 했지만 읎것읎 곧 출시될 것읎며 읎러한 사용 사례가 "예상된 대로" 지원되Ʞ 때묞에 더 많은 사람듀읎 Next륌 프로덕션 쀀비 상태로 볎Ʞ 시작할 것입니닀.

ë‚Žê°€ 사용하는 í•Žê²° 방법:

# next.config.js
module.exports = {
    serverRuntimeConfig: {
        PROJECT_ROOT: __dirname
    }
}

겜로가 필요한 위치에

import fs from 'fs'
import path from 'path'
import getConfig from 'next/config'
const { serverRuntimeConfig } = getConfig()

fs.readFile(path.join(serverRuntimeConfig.PROJECT_ROOT, './path/to/file.json'))

읎것읎 현재 파음에 상대적읞 겜로가 있는 ì°žì¡° 파음의 필요성을 핎결하지 못한닀는 것을 알고 있지만 읎것은 낮 맀우 ꎀ렚된 사용 사례( /public/images 폎더에서 읎믞지 파음 읜Ʞ)륌 핎결합니닀.

멋진 낚자. 나륌 위핎 음했닀.

로컬 개발에서는 완벜하게 작동하지만 now 배포할 때는 작동하지 않는 것 같습니닀.

ENOENT: no such file or directory, open '/zeit/41c233e5/public/images/my-image.png'
    at Object.openSync (fs.js:440:3)
    at Object.readFileSync (fs.js:342:35)
    at getEmailImage (/var/task/.next/serverless/pages/api/contact/demo.js:123:52)
    at module.exports.7gUS.__webpack_exports__.default (/var/task/.next/serverless/pages/api/contact/demo.js:419:87)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async apiResolver (/var/task/node_modules/next/dist/next-server/server/api-utils.js:42:9) {
  errno: -2,
  syscall: 'open',
  code: 'ENOENT',
  path: '/zeit/41c233e5/public/images/my-image.png'
}

공용 폎더가 겜로로 읎동된닀는 것을 알고 있윌므로 프로덕션 환겜에서 Ʞ볞 폎더에서 강제로 검색하도록 시도했지만 여전히 동음한 결곌륌 얻었습니닀.

ENOENT: no such file or directory, open '/zeit/5fed13e9/images/my-image.png'
    at Object.openSync (fs.js:440:3)
    at Object.readFileSync (fs.js:342:35)
    at getEmailImage (/var/task/.next/serverless/pages/api/contact/demo.js:124:52)
    at module.exports.7gUS.__webpack_exports__.default (/var/task/.next/serverless/pages/api/contact/demo.js:331:87)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async apiResolver (/var/task/node_modules/next/dist/next-server/server/api-utils.js:42:9) {
  errno: -2,
  syscall: 'open',
  code: 'ENOENT',
  path: '/zeit/5fed13e9/images/my-image.png'
}

@PaulPCIO 당신읎 겪고 있는 묞제는 .json , .js 또는 .ts 파음읎 아니Ʞ 때묞입니닀. /public 아래의 파음은 CDN에 "배포"되지만 람닀(AFAIK)에는 배포되지 않윌므로 읎 겜우 includeFiles 사용하는 전용 람닀( @now/node ) 배포가 필요합니닀 includeFiles , 또는 핎당 닚음 파음만 필요한 겜우 base64 로 변환하고 var로 사용하십시였(전용 파음에 있든 없든).

@BrunoBernardino 예상대로 감사합니닀 base64 방식을 사용하겠습니닀

배포된 환겜에서 __dirname에 대한 음부 í•Žê²° 방법읞가요?

@NicolasHz 자섞히

@BrunoBernardino 낮 의견을 포핚한 마지막 의견을 볎멎 "map _dirname in the next config" 핎킹읎 배포에서 작동하지 않는닀고 확신합니닀. 심지얎 w/js 및 JSON 파음. 적얎도 now 배포의 겜우 사용자 지정 배포에는 포핚되지 않습니닀.

@BrunoBernardino 배포된 환겜의 로컬 겜로륌

@NicolasHz 알겠습니닀 . 예, 읜고/액섞슀핎알 하는 파음의 종류에 따띌 위의 솔룚션 쀑 하나륌 사용핎알 합니닀.

확읞만 하멎 config.js가 배포에서 작동하지 않습니닀.

ë‚Žê°€ 사용하는 í•Žê²° 방법:

# next.config.js
module.exports = {
  env: {
    PROJECT_DIRNAME: __dirname,
  },
}

귞늬고 겜로가 필요한 API 정의에서(allPosts 폎더에는 마크닀욎 형식의 몚든 랔로귞가 포핚되얎 있윌며 프로젝튞 룚튞에 있습니닀)

import fs from 'fs'
import { join } from 'path'

const postsDirectory = join(process.env.PROJECT_DIRNAME, 'allPosts')

지역 개발에 완벜하게 작동하고 있습니닀.
귞러나 지ꞈ zeit에 배포할 때 읎 였류가 발생합니닀.

[POST] /api/postsApi
11:00:13:67
Status:
500
Duration:
8.1ms
Memory Used:
76 MB
ID:
kxq8t-1585546213659-5c3393750f30
User Agent:
axios/0.19.2
{
  fields: [ 'title', 'date', 'slug', 'author', 'coverImage', 'excerpt' ],
  page: 1
}
2020-03-30T05:30:13.688Z    572075eb-4a7a-47de-be16-072a9f7005f7    ERROR   Error: ENOENT: no such file or directory, scandir '/zeit/1cc63678/allPosts'
    at Object.readdirSync (fs.js:871:3)
    at getPostSlugs (/var/task/.next/serverless/pages/api/postsApi.js:306:52)
    at module.exports.fZHd.__webpack_exports__.default (/var/task/.next/serverless/pages/api/postsApi.js:253:86)
    at apiResolver (/var/task/node_modules/next/dist/next-server/server/api-utils.js:48:15)
    at processTicksAndRejections (internal/process/task_queues.js:97:5) {
  errno: -2,
  syscall: 'scandir',
  code: 'ENOENT',
  path: '/zeit/1cc63678/allPosts'
}

@BrunoQuaresma 와 같은 @sjcodebook 은 ê·ž í•Žê²° 방법읎 로컬에서만 작동한닀고 말했습니닀. 나는 여전히 람닀가 파음 시슀템에 액섞슀하Ʞ 위핎 별도의 @now/node 배포륌 사용하고 있윌며 앱 자첎의 요청을 통핎 핎당 파음을 혞출합니닀(또는 배포하Ʞ 전에 필요한 정적 결곌 생성). 좀 믞쳀지만 작동합니닀.

안녕하섞요 @BrunoBernardino... 컀슀텀 녾드 서버가 있는 별도의 프로젝튞륌 말씀하시는 걎가요?

귞러나 액섞슀할 수 없는 겜우 " includeFiles " 섀정읎 있는 읎유륌 읎핎할 수 없습니닀. 🀔

@valse 동음한 프로젝튞에 있을 수 있습니닀. 닀음은 낮 now.json 의 슀니펫입니닀.

{
  "builds": [
    {
      "src": "next.config.js",
      "use": "@now/next"
    },
    {
      "src": "lambdas/**/*.ts",
      "use": "@now/node",
      "config": {
        "includeFiles": ["email-templates/**"]
      }
    }
  ],
  "routes": [
    {
      "src": "/lambdas/(.+)",
      "dest": "/lambdas/$1.ts"
    }
  ]
}

귞렇게 하멎 닀음곌 같읎 혞출할 수 있습니닀.

await ky.post(`${hostUrl}/lambdas/email?token=${someToken}`);

닀음 API 페읎지 낎부에서 읎메음을 볎낎고 pug 와 같은 템플늿 파음에서 읜는 것을 처늬하는 lambdas/email.ts 파음읎 있닀고 가정합니닀.

도움읎 되Ʞ륌 바랍니닀.

또한 "includeFiles"는 @now/node 에서만 작동합니닀(닀륞 겜우음 수도 있지만 @now/next 아님).

@BrunoBernardino 는 node 핚수륌 사용하는 것처럌 볎읎지만 읎제 ESM을 읜을 수 없습니닀!

읎것은 mdx 페읎지 목록을 가젞였렀고 할 때 발생합니닀.

암혞

import { NextApiRequest, NextApiResponse } from 'next'
import { promises as fs } from 'fs'
import { join } from 'path'
const { readdir } = fs

export default async (req: NextApiRequest, res: NextApiResponse) => {
  const postFiles = await readdir(join(process.cwd(), 'pages', 'blog'))

  const postNames: string[] = postFiles.filter((page: string) => page !== 'index.tsx')

  const posts = []

  for (const post of postNames) {
    const mod = await import(`../pages/blog/${post}`)

    posts.push({ ...mod, link: post.slice(0, post.indexOf('.')) })
  }

  res.status(200).json([])
}

ë‚Žê°€ 얻는 였류 :

export const title = 'My new website!'
^^^^^^

SyntaxError: Unexpected token 'export'

@talentlessguy 저는 Zeit/Vercel 팀읎 아니띌 ê·žì € 행복한 고객입니닀. 핎당 슀니펫에서 몇 가지 잠재적읞 묞제륌 볌 수 있윌므로 고객 지원에 더 적합할 수 있습니닀.

  1. Ʞ볞 겜로에 process.cwd() 대신 아묎 것도 사용하지 않거나 __dirname 륌 사용할 수 있습니닀. 나는 람닀에서 후자륌 사용하지 않았지만 닀륞 것듀은 사용하지 않았윌므로 귞것읎 묞제읞지 아닌지 확싀하지 않습니닀.
  2. NextApiRequest 및 NextApiResponse 륌 유형윌로 가젞였고 있지만 읎것은 @now/node" 에서 싀행되얎알 합니닀. 맞습니까? 따띌서 닀음곌 같읎 유형을 가젞와알 합니닀.
import { NowRequest, NowResponse } from '@now/node';
  1. pages/... 에서 가젞였Ʞ/읜Ʞ 쀑읎지만 includeFiles 륌 통핎 포핚하고 있습니까? 당신의 now.json 은(는) 얎떻게 생게습니까?

@BrunoBernardino

__dirname 는 항상 / 읎므로 사용할 수 없윌며 대신 process.cwd() 가 싀제 겜로륌 볎여쀍니닀.

수정 사항을 수띜했고 작동했습니닀.

람닀/posts.ts

import { NowResponse, NowRequest } from '@now/node'
import { promises as fs } from 'fs'
import { join } from 'path'
const { readdir } = fs

export default async (req: NowRequest, res: NowResponse) => {
  const postFiles = await readdir(join(process.cwd(), 'pages', 'blog'))

  const postNames: string[] = postFiles.filter((page: string) => page !== 'index.tsx')

  const posts = []

  for (const post of postNames) {
    const mod = await import(`../pages/blog/${post}`)

    posts.push({ ...mod, link: post.slice(0, post.indexOf('.')) })
  }

  res.status(200).json([])
}

지ꞈ.json

{
  "builds": [
    {
      "src": "next.config.js",
      "use": "@now/next"
    },
    {
      "src": "lambdas/**/*.ts",
      "use": "@now/node",
      "config": {
        "includeFiles": ["pages/blog/*.mdx"]
      }
    }
  ],
  "routes": [
    {
      "src": "/lambdas/(.+)",
      "dest": "/lambdas/$1.ts"
    }
  ]
}

ë‚Žê°€ 얻는 였류 :

import Meta from '../../components/Article/Meta.tsx'
^^^^^^

SyntaxError: Cannot use import statement outside a module

typescript 녾드 핚수가 .mdx 륌 몚듈로 췚꞉할 수 없는 것 같습니닀 :(

알겠습니닀. 묞제륌 찟은 것 같습니닀. 직접 가젞였는 대신 파음 낎용을 읜고 구묞 분석핎 볎십시였. 나는 귞런 작업을 가젞였는 것을 볞 적읎 없윌며, 음반 TS 대신 사용할 수도 있는 음부 Babel 마법에서만 작동하는 것처럌 볎입니닀.

@BrunoBernardino 당신읎 옳았지만 평범한 것읎 아닙니닀 ... 나는 대상을 esnext로 섀정하고 몚듈도 esnext로 섀정했습니닀. 몚든 것을 가젞올 수 있얎알하지만 얎떻게 든 귞렇지 않습니닀.

얎욌든 묞제와 ꎀ렚읎 없윌므로 얎딘가에 구Ꞁ링 할 것입니닀.

걱정 마. 몇 가지 팁읎 https://mdxjs.com/advanced/typescript 및 https://mdxjs.com/getting-started/webpack 에 있을 수 있윌므로 @now/node 배포륌 닀음곌 같읎 ì¡°ì •í•Žì•Œ 합니닀. 사용핎. 얎욌든 귞듀의 지원읎 도움읎 되얎알 합니닀.

읎것에 대한 ì–Žë–€ 움직임? API 겜로에서 사용할 html 읎메음 템플늿을 포핚할 수 있닀멎 좋을 것입니닀. 지ꞈ은 JS 파음에 포핚하고 있지만 읎 핎킹의 특별한 팬은 아닙니닀.

또 닀륞 핎킹은 webpack raw-loader륌 사용하여 js에 포핚시킀는 것입니닀.

yarn add --dev raw-loader
const templates = {
    verify: require("raw-loader!../template/email/verify.hbs").default,
};

귞런 닀음 templates.verify 륌 묞자엎로 사용합니닀.

읎것곌 ꎀ렚된 것윌로 볎읎는 next-i18next 에 묞제가 있습니닀( vercel/vercel#4271 ). Ʞ볞적윌로 now 는 /public/static/locales/ 안에 있는 .json 파음을 서버늬슀 핚수에 넣지 않습니닀. 여Ʞ에 녌의된 Ʞ능읎 닀음에 추가될 때까지 누구든지 í•Žê²° 방법을 제공할 수 있습니까?

@borispoehland 위에서 가젞였Ʞ/요구 í•Žê²° 방법을 시도했습니까? 작동핎알 합니닀.

@borispoehland 위에서 가젞였Ʞ/요구 í•Žê²° 방법을 시도했습니까? 작동핎알 합니닀.

@BrunoBernardino 정확한 의견읎 묎엇을 의믞하는지 몚륎겠습니닀.

public/static/locales 에 있는 몚든 .json 파음을 얎떻게든 서버늬슀 핚수로 가젞였는 예륌 듀얎 죌시겠습니까? 귞늬고 읎것을 ì–Žë”” 에서(ì–Žë–€ 파음에서) 합니까?

나는 닀음을 사용하고 있습니닀 (읎전에 얞꞉했듯읎 includeFiles 는 @now/next 와 혞환되지 않습니닀. 읎것읎 낮 묞제에 영향을 믞치는 겜우 idk).

게닀가, next-i18next 는 나에게 음종의 랔랙박슀읎Ʞ 때묞에(따띌서 거Ʞ에서 파음을 가젞였고 싶지 않음) next-i18next 가 직접 액섞슀하십시였(위의 닀륞 죌석에서 PROJECT_DIRNAME next.config.json 낎부에 정의되얎 가젞였Ʞ륌 수동윌로 수행핎알 했습니닀. 읎것은 제가 도달하렀고 하는 것읎 아닙니닀). vercel/vercel#4271 에서처럌 , 저는 now 가 제 .json 파음을 얎떻게든 서버늬슀 Ʞ능윌로 가젞였Ʞ륌 원합니닀.

@borispoehland 낎부 _any_ 파음에 pages/api (또는 ê·ž 쀑 하나가 혞출됩니닀) 같은 것을 할 https://github.com/vercel/next.js/issues/8251#issuecomment -544008976

가젞였Ʞ에 대핮 아묎 작업도 수행할 필요가 없습니닀. 요점은 webpack vercel읎 싀행되멎 핎당 파음읎 포핚되얎알 하고 작동핎알 한닀는 것을 알 수 있닀는 것입니닀.

나는 귞것읎 의믞가 있Ʞ륌 바랍니닀.

@borispoehland 낎부 _any_ 파음에 pages/api (또는 ê·ž 쀑 하나가 혞출됩니닀) 같은 것을 할 # 8251 (윔멘튞)

가젞였Ʞ에 대핮 아묎 작업도 수행할 필요가 없습니닀. 요점은 webpack vercel읎 싀행되멎 핎당 파음읎 포핚되얎알 하고 작동핎알 한닀는 것을 알 수 있닀는 것입니닀.

나는 귞것읎 의믞가 있Ʞ륌 바랍니닀.

@BrunoBernardino 읎 ì ‘ê·Œ 방식의 묞제는 json 파음읎 now : "읎뎐, ê·ž 디렉토늬 안의 몚든 json 파음을 재귀적윌로 선택하띌"띌고 말하는 더 쉬욎 방법읎 있습니까? 믞늬 감사드늜니닀

펞집: json 파음을 수동윌로 가젞였더띌도 읎전곌 동음한 였류가 발생합니닀. 나는 읎것을 위핎 새로욎 묞제륌 ì—Ž ​​것입니닀.

누군가가 토론에 찞여하는 데 ꎀ심읎 있는 겜우륌 대비 하여 낮 묞제에 대한 새 묞제륌 엎었습니닀 . 지ꞈ 감사합니닀, @BrunoBernardino !

__dirname 륌 정상적윌로 작동할 것윌로 예상하는 대로 사용할 수 있도록 하는 또 닀륞 옵션/í•Žê²° 방법은 webpack 구성을 조정하는 것입니닀.

Ʞ볞적윌로 webpack은 닀음곌 같읎 지시하지 않는 한 폎늬필을 사용하여 닀양한 녾드 전역에 별칭을 지정합니닀.
https://webpack.js.org/configuration/node/
귞늬고 webpack Ʞ볞 섀정은 __dirname 및 __filename 귞대로 두는 것입니닀. 슉, 폎늬필하지 않고 녞드가 정상적윌로 처늬하도록 합니닀.

귞러나, Next.js의 웹팩 섀정은 / 사용 웹팩 Ʞ볞값을 반영하지 않습니닀 https://github.com/vercel/next.js/blob/bb6ae2648ddfb65a810edf6ff90a86201d52320c/packages/next/build/webpack-config.ts#L661 -L663

ê·ž 몚든 것은 웹팩 구성을 조정하Ʞ 위핎 아래의 사용자 정의 Next 구성 플러귞읞을 사용했습니닀.

쀑요: 읎것은 제 사용 사례에서 작동합니닀. ꎑ범위한 환겜/구성에서 테슀튞되지 않았윌며 몚든 Next.js 닚위/통합 테슀튞에 대핮 테슀튞되지 않았습니닀. 귞것을 사용하멎 환겜에 의도하지 않은 부작용읎 있을 수 있습니닀.
또한 Next는 __dirname 및 __filename 대한 웹팩 Ʞ볞 섀정을 사용하지 않는 특정한 읎유가 있을 수 있습니닀. 따띌서 아래 윔드에는 의도하지 않은 부작용읎 있을 수 있윌므로 죌의핎서 사용핎알 합니닀.

또한 아래 플러귞읞은 next-compose-plugins 팚킀지와 핚께 사용하도록 섀계되었습니닀. https://github.com/cyrilwanner/next-compose-plugins

귞러나 음반 플러귞읞윌로도 작동핎알 합니닀. https://nextjs.org/docs/api-reference/next.config.js/custom-webpack-config

const withCustomWebpack = (nextCfg) => {
  return Object.assign({}, nextCfg, {
    webpack(webpackConfig, options) {
      // We only want to change the `server` webpack config.
      if (options.isServer) {
        // set `__dirname: false` and/or `__filename: false` here to align with webpack defaults:
        // https://webpack.js.org/configuration/node/
        Object.assign(webpackConfig.node, { __dirname: false });
      }

      if (typeof nextCfg.webpack === 'function') {
        return nextCfg.webpack(webpackConfig, options);
      }

      return webpackConfig;
    },
  });
};

@jkjustjoshing윌로 솔룚션을 구현

닀음 였류가 발생합니닀.

Error: GraphQL error: ENOENT: no such file or directory, open '/vercel/37166432/public/ts-data.csv'

낮 윔드:

const content = await fs.readFile(
  path.join(serverRuntimeConfig.PROJECT_ROOT, "./public/ts-data.csv")
);

파음에 대한 링크는 닀음곌 같습니닀. https://github.com/bengrunfeld/trend-viewer/blob/master/pages/api/graphql-data.js

@bengrunfeld 예, 귀하의 솔룚션은 로컬에서만 작동합니닀.

최귌에 비슷한 묞제가 있었고(API 겜로에서 파음을 읜고 싶었음) 솔룚션읎 예상볎닀 쉬웠습니닀.

path.resolve('./public/ts-data.csv') 시도

@borispoehland 정말 감사합니닀!! 귀하의 솔룚션은 훌륭하게 작동했습니닀!

@bengrunfeld 묞제 없습니닀. 저도 우연히 발견했습니닀( @BrunoBernardino ;)). 여Ʞ 있는 몚든 사람의 묞제에 대한 핎결책읎띌고 생각합니닀.

여전히 next.config.js 륌 섀정핎알 합니닀. @borispoehland 의 솔룚션읎 작동하는 것을 볎고 파음을 삭제했는데 비슷한 였류가 발생했습니닀.

귞런 닀음 위의 @jkjustjoshing 솔룚션윌로 재섀정하고

# next.config.js
module.exports = {
    serverRuntimeConfig: {
        PROJECT_ROOT: __dirname
    }
}

여전히 next.config.js 륌 섀정핎알 합니닀. @borispoehland 의 솔룚션읎 작동하는 것을 볎고 제거했는데 비슷한 였류가 발생했습니닀.

위의 @jkjustjoshing 솔룚션윌로 재섀정하고

# next.config.js
module.exports = {
    serverRuntimeConfig: {
        PROJECT_ROOT: __dirname
    }
}

@bengrunfeld 정말? 윔드의 닀륞 지점에서 여전히 PROJECT_ROOT ì ‘ê·Œ 방식을 사용하고 있을 수 있습니닀. 낮 프로젝튞에서는 읎 ì ‘ê·Œ 방식 없읎 작동하Ʞ 때묞입니닀. 였류가 얎떻게 생게습니까?

Vercel에 배포할 때 SSG 및 SSR/믞늬 볎Ʞ 몚드에서 몚두 작동하는 페읎지에 readFile 륌 작성하렀멎 얎떻게 í•Žì•Œ 합니까?

작동 하지 않는 데몚 저장소: https://github.com/mathdroid/blog-fs-demo

https://blog-fs-demo.vercel.app/

@mathdroid getStaticProps 및 getStaticPaths 핚수 낎에서 readFile 및 readdir 각각 읎동핎 볎십시였. 귞렇지 않윌멎 윔드가 람띌우저에서 싀행될 수 있습니닀.

귞러나 fs 가젞였는 것은 정상읎얎알 합니닀.

귞것읎 얎떻게 작동하는지 알렀죌십시였.

@borispoehland 멋진 솔룚션에 감사드늜니닀. path.resolve() ~ /public 가 로컬곌 Vercel에서 몚두 작동할 것읎띌고 예상하지 못했습니닀. 당신은 였늘의 낮 구섞죌입니닀. :+1:

@borispoehland 서버늬슀 Ʞ능 낎에서 솔룚션을 시도했지만 여전히 닀음을 얻습니닀.
ENOENT: 핎당 파음읎나 디렉터늬가 없습니닀. '/var/task/public/posts.json'을 엜니닀.

const postsFile = resolve('./public/posts.json');

const updateCache = async (posts: IPost[]): Promise<IPost[]> => {
    postCache = posts;
    fs.writeFileSync(postsFile, JSON.stringify(postCache)); // <====
    return postCache;
}

나는 next.config.js 없읎 우늬와 핚께 시도했닀.

module.exports = {
    serverRuntimeConfig: {
        PROJECT_ROOT: __dirname
    }
}

솔룚션읎 서버늬슀 Ʞ능에서 작동하지 않을 수 있습니까?

@borispoehland 서버늬슀 Ʞ능 낎에서 솔룚션을 시도했지만 여전히 닀음을 얻습니닀.
ENOENT: 핎당 파음읎나 디렉터늬가 없습니닀. '/var/task/public/posts.json'을 엜니닀.

const postsFile = resolve('./public/posts.json');

const updateCache = async (posts: IPost[]): Promise<IPost[]> => {
    postCache = posts;
    fs.writeFileSync(postsFile, JSON.stringify(postCache)); // <====
    return postCache;
}

나는 next.config.js 없읎 우늬와 핚께 시도했닀.

module.exports = {
    serverRuntimeConfig: {
        PROJECT_ROOT: __dirname
    }
}

솔룚션읎 서버늬슀 Ʞ능에서 작동하지 않을 수 있습니까?

나는 귞것읎 당신의 끝에서 작동하지 않는 읎유륌 몚륎겠습니닀 ... 죄송합니닀

좋아, @bengrunfeld 윔드륌 사용하여 읜Ʞ 작업을 수행했지만 불행히도 닀음곌 같읎 작성할 수 없습니닀.
[였류: EROFS: 읜Ʞ 전용 파음 시슀템, '/var/task/public/posts.json' ì—Žêž°]
따띌서 너묎 많은 데읎터베읎슀 혞출을 플하Ʞ 위핎 캐시륌 업데읎튞할 방법읎 없습니닀.

@neckaros .json 읎왞의 파음(예: .jpg 파음)을 읜Ʞ 위핎 제 ì ‘ê·Œ 방식을 사용핎 볎셚습니까 ?

좋아, @bengrunfeld 윔드륌 사용하여 읜Ʞ 작업을 수행했지만 불행히도 닀음곌 같읎 작성할 수 없습니닀.

[였류: EROFS: 읜Ʞ 전용 파음 시슀템, '/var/task/public/posts.json' ì—Žêž°]

따띌서 너묎 많은 데읎터베읎슀 혞출을 플하Ʞ 위핎 캐시륌 업데읎튞할 방법읎 없습니닀.

@neckaros S3(또는 닀륞 왞부 파음 시슀템)에서 쓰고 읜을 수 있얎알 하지만 저는 음반적윌로 휘발성읎 있을 수 있는 빠륎고 캐시된 항목에 redis륌 사용합니닀. https://redislabs.com은 "서버늬슀"로 유지하고 있윌며 원하는 겜우 https://nextjs-boilerplates.brn.sh에 프로덕션 쀀비 윔드 예제가

@borispoehland 나는 서람늬슀 Ʞ능에서 읜을 수는 있지만 ì“ž 수는 없습니닀. 귞러나 새 윘텐잠륌 추가하는 대신 슝분 빌드(재검슝)에서 캐시륌 새로 고쳐 작동하게 했습니닀. 나쁘지 않은 팚턎읎띌고 생각합니닀. 당신의 도움을 죌셔서 감사합니닀!

@BrunoBernardino 감사합니닀. 삎펎볎겠습니닀. 몇 명의 사용자가 있얎도 깚지지 않는 완전 묎료 췚믞 솔룚션을 ì°Ÿê³  있습니닀. :)

몇 명의 사용자가 있얎도 깚지지 않는 완전 묎료 췚믞 솔룚션을 ì°Ÿê³  있습니닀. :)

알았닀. RedisLabs와 Vercel읎 저륌 위핎 귞렇게 했습니닀. 💯

파Ʞ 후 확장 os 팚킀지로 작업하는 파음을 작성했습니닀 ...

import { tmpdir } from "os";
const doc = new PDFDocument()
const pdfPath = path.join(tmpdir(), `${store.id}${moment().format('YYYYMMDD')}.pdf`)
const writeStream = doc.pipe(fs.createWriteStream(pdfPath)

파음 읜Ʞ는 @subwaymatch 솔룚션곌 핚께 작동합니닀.
const logoPath = path.resolve('./public/logo.png')

파Ʞ 후 확장 os 팚킀지로 작업하는 파음을 작성했습니닀 ...

import { tmpdir } from "os";
const doc = new PDFDocument()
const pdfPath = path.join(tmpdir(), `${store.id}${moment().format('YYYYMMDD')}.pdf`)
const writeStream = doc.pipe(fs.createWriteStream(pdfPath)

파음 읜Ʞ는 @subwaymatch 솔룚션곌 핚께 작동합니닀.
const logoPath = path.resolve('./public/logo.png')

좋습니닀. 읎 파음의 낎용을 닀시 읜을 수 있습니까? 디렉토늬가 액섞슀 가능하고 영구적입니까?

@marklundin tmpdir 띌는 읎늄의 핚수륌 사용하멎 영구적읞지 의심되지만 읎것읎 작동하멎 싀제로 tmpdir 가 싀제로 얌마나 음시적읞지 아는 것읎 좋습니닀. 예... 🀔

읎에 대한 업데읎튞가 있습니까? getInitialProps에서는 작동하지만 API 겜로에서는 작동하지 않는 읎유가 궁ꞈ합니닀 🀷‍♂

낮 현재 í•Žê²° 방법

const data = await import(`../../../../data/de/my-nice-file.json`);
res.json(data.default);

현재 API 겜로에서도 읎 묞제가 있습니닀.

현재 API 겜로에서도 읎 묞제가 있습니닀.

여Ʞ에 몇 가지 횚곌적읞 솔룚션읎 있습니닀. 구첎적윌로 ì–Žë–€ 묞제가 있습니까?

읎 슀레드의 제안에도 불구하고읎 작업을 수행하는 데 얎렀움을 겪고 있습니닀. 낮 사용 사례는 가읎드륌 작성 쀑읎며 구성 요소 자첎와 핚께 구성 요소의 소슀 윔드륌 표시하렀는 것입니닀. 읎 작업을 수행하는 방법은 fs륌 사용하여 getServerSideProps 낎부에 구성 요소의 jsx 파음을 로드하고 파음 낎용의 묞자엎 값을 소품윌로 전달하는 것입니닀.

로컬에서 작동하는 것에 대핮 Ʞ분읎 읎상했지만 배포하렀고 했을 때 Ʞ쁚읎 사띌졌습니닀.:(

ì°žì¡°: https://github.com/ElGoorf/i18next-guide/blob/fix-example-components/pages/plurals.jsx

@ElGoorf 묞제는 public 파음읎 가장자늬에 있고 Ʞ능읎 람닀에 있닀는 것입니닀. 읎제 @vercel/next 여전히 includeFiles 허용하지 않윌므로 작동시킀는 가장 쉬욎 방법은 lambda 핚수륌 핚께 사용하는 것입니닀.

여Ʞ에 닀륞 사람듀을 도욎 샘플 윔드가 있습니닀. https://github.com/vercel/next.js/issues/8251#issuecomment -614220305

@BrunoBernardino 감사합니닀. "x 숚겚진 항목읎 더 많읎 로드됩니닀..."륌 놓친 쀄

불행히도 Edge/Lambda에 대핮 처음 듀었Ʞ 때묞에 귀하의 솔룚션에 얎렀움을 겪었지만 @balthild 의 솔룚션읎 node.fs 방법을 시도하Ʞ 전에 원래 추구했던 것에 더 가깝닀는 것을 알았습니닀. https:// /github.com/vercel/next.js/issues/8251#issuecomment -634829189

엄청난! 작동시킀셚나요? 아니멎 여전히 묞제가 있습니까?

Vercel읎 핎당 용얎륌 사용하는지 확싀하지 않지만 Edge는 정적 파음읎 제공되는 CDN을 의믞하고 람닀는 AWS Lambda 핚수처럌 격늬된 API 겜로에서 혞출되는 "백엔드" 핚수륌 의믞합니닀. .

읎뎐,

vercel에서 next.js륌 사용하여 파음 쓰Ʞ에 대한 업데읎튞가 있습니까? 묞제 없읎 읜을 수 있습니닀. const logoPath = path.resolve('./public/logo.png')

public/sitemap.xml 파음을 덮얎쓰렀고 합니닀(vercel의 크Ʞ 제한윌로 읞핎). 였류 없읎 공용 폎더에 정적 파음로만 반환할 수 있습니닀. 읎전에 zlib로 사읎튞맵을 구현하고 응답을 슀튞늬밍했지만 슀튞늌읎 완료될 때까지 Ʞ닀렞닀가 반환하는 것 같습니닀. 읎것은 크Ʞ 제한 였류에 도달하지 않지만 불행히도 맀우 느늜니닀. 나는 사람듀읎 가질 수 있는 몚든 제안에 ì—Žë € 있습니닀. 사읎튞맵은 API 혞출에서 별도의 백엔드로 빌드되며 정Ʞ적윌로 업데읎튞핎알 합니닀.

ë‚Žê°€ 시도한 것듀 :

  • xml 압축 및 슀튞늬밍 - 작동하지만 맀우 느늜니닀.
  • API 핚수에서 사읎튞맵을 빌드하고 반환하멎 불행히도 크Ʞ 제한에 도달합니닀.
  • 크Ʞ에 ꎀ계없읎 공용 폮더(작동)에서 정적 xml 파음을 읜지만 업데읎튞할 수 없습니닀.
  • 읎 파음에 대한 테슀튞 ì“°êž°ê°€ 작동하지 않습니닀. 파음/폎더에 대한 테슀튞 ì“°êž°ê°€ 작동하지 않음
  • "api" 핚수에서 정적 xml 파음을 반환하는 테슀튞, 크Ʞ 였류. 읎것은 로컬에서 작동합니닀.
  • "페읎지" getServerSideProp 크Ʞ 였류에서 정적 xml 파음을 반환하는 테슀튞입니닀. 읎것은 로컬에서 작동합니닀.
  • ì–Žë–€ 아읎디얎띌도 감사히 받겠습니까?

@emomooney , 저는 Vercel읎 핚수에 파음을 쓰는 것을 허용하지 않는닀고 생각합니닀(캐싱의 겜우에도), 왜냐하멎 서버늬슀의 죌요 "장점"은 상태 비저장 상태읎Ʞ 때묞에 상태가 추가될 것읎Ʞ 때묞입니닀. edge/cdn을 사용핎알 합니닀.

읎전에 zlib로 사읎튞맵을 구현하고 응답을 슀튞늬밍했지만 슀튞늌읎 완료될 때까지 Ʞ닀렞닀가 반환하는 것 같습니닀.

후속 혞출에 대핮 읎러한 느늌을 겜험한 것읞지 아니멎 윜드 슀타튞에 대핮 첫 번짞 혞출에 대한 속도 저하가 발생한 것읞지 궁ꞈ합니닀. 나는 읎것읎 ë‚Žê°€ 여Ʞ에서 하는 것곌 유사한 next.js API 핚수 또는 전용 람닀륌 통한 Vercel에 대한 API 혞출읎띌고 상상합니닀.

귞렇닀멎 여전히 너묎 느늬닀멎 "별도의 백엔드"가 Vercel 왞부에 있습니까? 귞렇닀멎 잠재적윌로 읎 파음을 사용하여 sitemap.xml 파음을 만듀고 vercel --prod 도메읞에 파음을 "캐싱"하여 읜고 액섞슀할 수 있윌며 업데읎튞하Ʞ만 하멎 됩니닀. robots.txt 륌 사용하여 사읎튞맵을 닀륞 도메읞/하위 도메읞에 연결합니닀.

읎 페읎지가 도움읎 되었나요?
0 / 5 - 0 등꞉