typescript - Nextjs Πώς να μεταφέρετε έναν προσαρμοσμένο φάκελο στην παραγωγή στο Vercel
Έχω αρχίσει πρόσφατα την ανάπτυξη στο περιβάλλον NextJS. Στο πρότζεκτ μου, έχω μερικά αρχεία JSON μέσα σε ένα φάκελο στον βασικό κατάλογο, και διαβάζω το περιεχόμενο αυτών των αρχείων μέσα στον κώδικά μου. Λειτουργεί καλά στον τοπικό μου υπολογιστή, αλλά όταν πηγαίνει σε παραγωγή στο διακομιστή της vercel, δεν μπορεί να διαβάσει το αρχείο γιατί το αρχείο δεν υπάρχει στον διακομιστή.
δώστε μου τη δομή αρχείων του έργου μου στον τοπικό υπολογιστή:
|--.next
|--components
|--jsonfiles
|--node_modules
|--pages
|--public
|--package.json
(and more)...
αλλά μετά την ανάπτυξη, όταν διαβάζω το περιεχόμενο του ριζικού καταλόγου χρησιμοποιώντας fs.readdirSync("./"), περιέχει μόνο τα ακόλουθα αρχεία και καταλόγους:
|--.next
|--___next_launcher.js
|--___vc_bridge.js
|--node_modules
|--package.json
και εδώ είναι ο κώδικας μου για την ανάγνωση του αρχείου:
const fs = require('fs');
const rawcontent = fs.readSync('./jsonfiles/list.json');
const list:array[] = JSON.parse(rawcontent);
...
Υπάρχει κάποια λύση γι' αυτό το πρόβλημα;
Απάντηση #1
Η Vercel βασίζεται σε κάποια εσωτερική μαγεία με την αντικατάσταση/ενίσχυση μονάδων που γίνεται από το NextJS. Π.χ. αν εισάγετε το path συγχρονισμένα, μπορείτε να ελέγξετε ποιοι φάκελοι θα είναι αναγνώσιμοι στη Vercel. Ακούγεται περίεργο αλλά είναι αλήθεια!
export async function getStaticProps() {
const path = await import("path").then(m => m.default) // won't be bundled
path.resolve("content") // works, does nothing
return {props: {}}
}
εναντίον
import "path" // won't be bundled unless used outside of SSR hooks
export async function getStaticProps() {
path.resolve("content") // works, does nothing, makes "content" accessible to lambdas on Vercel 🤷
return {props: {}}
}
Περισσότερες λεπτομέρειες εδώ: https://github.com/vercel/vercel/discussions/7971
