рдореИрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рдЦреЛрдЬ-рдЕрдк npm рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрддрд╛-рдкрде рд╣реИ ред locate-path
рдХреЛ рдЗрд╕рдХреЗ рдХреЛрдб рдХреЗ рднреАрддрд░ fs
рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЬрдм рдореИрдВ рдЕрдкрдирд╛ рдРрдк рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ:
[ error ] ./node_modules/locate-path/index.js
Module not found: Can't resolve 'fs' in 'C:\...\node_modules\locate-path'
Could not find files for /index in .next/build-manifest.json
Promise { <pending> }
ModuleNotFoundError: Module not found: Error: Can't resolve 'fs' in 'C:\...\node_modules\locate-path'
at factory.create (C:\...\node_modules\webpack\lib\Compilation.js:823:10)
at factory (C:\...\node_modules\webpack\lib\NormalModuleFactory.js:397:22)
at resolver (C:\...\node_modules\webpack\lib\NormalModuleFactory.js:130:21)
at asyncLib.parallel (C:\...\node_modules\webpack\lib\NormalModuleFactory.js:224:22)
at C:\...\node_modules\neo-async\async.js:2830:7
at C:\...\node_modules\neo-async\async.js:6877:13
at normalResolver.resolve (C:\...\node_modules\webpack\lib\NormalModuleFactory.js:214:25)
at doResolve (C:\...\node_modules\enhanced-resolve\lib\Resolver.js:184:12)
at hook.callAsync (C:\...\node_modules\enhanced-resolve\lib\Resolver.js:238:5)
at _fn0 (eval at create (C:\...\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:15:1)
at resolver.doResolve (C:\...\node_modules\enhanced-resolve\lib\UnsafeCachePlugin.js:37:5)
at hook.callAsync (C:\...\node_modules\enhanced-resolve\lib\Resolver.js:238:5)
at _fn0 (eval at create (C:\...\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:15:1)
at hook.callAsync (C:\...\node_modules\enhanced-resolve\lib\Resolver.js:238:5)
at _fn0 (eval at create (C:\...\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:27:1)
at resolver.doResolve (C:\...\node_modules\enhanced-resolve\lib\DescriptionFilePlugin.js:42:38)
рдореИрдВрдиреЗ рдкрддрд╛-рдкрде рд░реЗрдкреЛ рдореЗрдВ рдПрдХ
рдХреНрд▓реЛрди https://github.com/TidyIQ/nextjs-issue рдФрд░ npm run dev
рдЪрд▓рд╛рдПрдВред
рдХреЛрдИ рд╣рд░рдЬ рдирд╣реАрдВ
рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ fs
рдЙрдкрдпреЛрдЧ getStaticProps
рдпрд╛ getServerSideProps
, рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдЬреАрд╡рдирдЪрдХреНрд░ рдореЗрдВ рдЪрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗ рд░рд╣реЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреЗрдбрд╝ рд╣рд┐рд▓ рдЬрд╛рдПред
рдЖрдк рдЗрд╕ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЗрддреНрд░рд╣реАрди рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рдЕрдЧрд░ рдЖрдк рдЕрднреА рднреА getInitialProps
рд╕рд╛рде рдПрдХ рд╡рд┐рд░рд╛рд╕рддреА Next.js рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдиреАрдЪреЗ рдкрдврд╝реЗрдВ
рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ -- рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдХрднреА рднреА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдЧреА:
рдпрд╛рдж рд░рдЦреЗрдВ, рдЖрдк рдХреЗрд╡рд▓ FS-рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдЪрд╛рд▓рди _рдкрд░ рд╕рд░реНрд╡рд░_ рдХрд░рддреЗ рд╕рдордп рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рддреЗ рд╕рдордп fs
рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдпрджрд┐ рдЖрдк fs
, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ getInitialProps
ред
рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдВрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде next.config.js
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:
module.exports = {
webpack: (config, { isServer }) => {
// Fixes npm packages that depend on `fs` module
if (!isServer) {
config.node = {
fs: 'empty'
}
}
return config
}
}
рдореБрдЭреЗ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡реЗрдирд┐рд▓рд╛ рдЗрдВрд╕реНрдЯреЙрд▓ рдкрд░ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдиреЗрдХреНрд╕реНрдЯрдЬ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ
https://github.com/zeit/next.js/tree/5787cbd9de33ea9add7cadeb04689b0d4b02976d/examples/blog-starter
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдпрд╣ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдХреЗрд╡рд▓ fs
рдХрд╛ рдЙрдкрдпреЛрдЧ getStaticProps / getServerSideProps рдореЗрдВ рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрдВрдбрд▓ рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рдереАред рдЕрдЧрд░ рдореИрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ fs
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди getStaticProps рдХреЗ рдЕрдВрджрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЪрд▓рд╛/рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрдВрдбрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдмрд╛рд░ рдЬрдм рдлрд╝рдВрдХреНрд╢рди getStaticProps рдХреЗ рдЕрдВрджрд░ рд╕рдВрджрд░реНрднрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрдВрдбрд▓ рдореЗрдВ рджрд┐рдЦрдирд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЫрд┐рдкреЗ рд╣реБрдП рддрд░реНрдХ рд╣реИрдВ рдЬреЛ getStaticProps рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЖрдпрд╛рдд рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдирд┐рд░реНрдпрд╛рдд рдореЗрдВ рдЕрдкреНрд░рдпреБрдХреНрдд рд╣реЛрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдХреБрдЫ рдШрдВрдЯреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдВ рдмрд┐рддрд╛рдП рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд╢рд╛рдпрдж рдбреЙрдХреНрд╕ рдореЗрдВ рдХрд╣реАрдВ рдПрдХ рд╕рд┐рдбреЗрдиреЛрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд╛рдпрдХ :)
рдХреНрдпрд╛ рдЫрд┐рдкрд╛ рд╣реБрдЖ рддрд░реНрдХ рд╕рд┐рд░реНрдл рд╡реЗрдмрдкреИрдХ рдХрд╛ рдкреЗрдбрд╝ рдирд╣реАрдВ рд╣рд┐рд▓ рд░рд╣рд╛ рд╣реИ? рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ рддреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЕрдЧрд▓рд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрдВрдбрд▓ рдореЗрдВ getStaticProps
рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдЖрдпрд╛рддрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрд╣реАрдВ рднреА рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗрдмрдкреИрдХ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрднреА рднреА рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдмрдВрдбрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдЫрд┐рдкрд╛ рд╣реБрдЖ рддрд░реНрдХ рд╕рд┐рд░реНрдл рд╡реЗрдмрдкреИрдХ рдХрд╛ рдкреЗрдбрд╝ рдирд╣реАрдВ рд╣рд┐рд▓ рд░рд╣рд╛ рд╣реИ? рдЬрдм рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ рддреЛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЕрдЧрд▓рд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрдВрдбрд▓ рдореЗрдВ
getStaticProps
рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдЖрдпрд╛рддрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИредрдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрд╣реАрдВ рднреА рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗрдмрдкреИрдХ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрднреА рднреА рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдмрдВрдбрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред
рдирд╣реАрдВ, рд╡реЗрдмрдкреИрдХ рдЯреНрд░реА рд╢реЗрдХрд┐рдВрдЧ рдЗрддрдирд╛ рдкрд░рд┐рд╖реНрдХреГрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрди рдирд┐рд░реНрдпрд╛рддреЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╣рд┐рд▓рд╛ рд╕рдХреЗред рдЯреНрд░реА рд╢реЗрдХрд┐рдВрдЧ getStaticProps / getServerSideProps / getStaticPaths рдХреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЗрд╕ рдХрд╕реНрдЯрдо рдмреИрдмреЗрд▓ рдкреНрд▓рдЧрдЗрди рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: https://github.com/vercel/next.js/blob/canary/packages/next/build/babel/plugins/next-ssg-transform .ts
рдУрд╣ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╡реЗрдмрдкреИрдХ рдХреЛ рдХрдо рдХрд░рдХреЗ рдЖрдВрдХрд╛ рд╣реИ :)
рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рдпрд╣ _within_ getServerSideProps
рд╕реЗ рд╣реЛ рд░рд╣рд╛ рд╣реЛрдЧрд╛?
рдирдорд╕реНрддреЗред @aloukissas рдХреА рддрд░рд╣ рдореЗрд░реЗ рдкрд╛рд╕ dotenv
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореЗрд░реЗ index.js
getStaticProps()
рднреАрддрд░ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред next.config.js
рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдпрд╣ рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ @Timer рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХреЛрдИ рд╕реБрд░рд╛рдЧ? рдореИрдВ Next.js
v.9.4.0 . рдХреЛ рд╣рдЯрд╛ рд░рд╣рд╛ рд╣реВрдВ
рдзрдиреНрдпрд╡рд╛рдж!
fast-glob
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реБрдИ
рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдореЗрдВ рдмрдВрдбрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдмреЗрд╣рддрд░реАрди рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдмрд╛рд╣рд░ рдирд┐рдХрд▓рд╛, рдореИрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрдХ рдЪрд░ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреЛ fast-glob
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ fs
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ getStaticProps
рдЕрдВрджрд░ рдХрд╣реАрдВ рднреА рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЗрд╕рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЗрдВ fast-glob
рдЖрдпрд╛рдд рдХрд░рддреА рд╣реИрдВ
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
import glob from 'fast-glob'
import path from 'path'
export const BLOG_PATH = path.join(process.cwd(), 'posts')
export const blogFilePaths = glob.sync(`${BLOG_PATH}/blog/**/*.mdx`)
import { BLOG_PATH, blogFilePaths } from './mdxUtils'
export const getStaticProps = () => {
const posts = blogFilePaths.map((filePath) => {
...
}
return { props: { posts } }
}
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ BLOG_PATH
рдХрд╣реАрдВ рднреА index.js
рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЗрд╕реЗ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдХреЗрд╡рд▓ blogFilePaths
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдиреЗ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рджреАред
рдЕрдзрд┐рдХ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП тЖТ https://github.com/vercel/next.js/discussions/17138
рдзрдиреНрдпрд╡рд╛рдж @ deadcoder0904 рдпрд╣ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:
import Layout from '../components/template'
import Main from '../components/main'
import Menu from '../components/menu'
import 'dotenv/config'
export async function getStaticProps () {
const avatarLocation = process.env.AVATAR_URL
const avatarTitle = process.env.AVATAR_TITLE
return {
props: {
avatarLocation,
avatarTitle
}
}
}
export default function RenderMainPage ({ avatarLocation, avatarTitle }) {
return (
<Layout
avatarURL={avatarLocation}
topLeft={<Menu />}
middle={<Main avatarURL={avatarLocation} avatarTitle={avatarTitle} />}
/>
)
}
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЯреВрд▓ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ import 'dotenv/config'
рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рд╕рдВрднрд╡рдд: рдпрд╣ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕реЗ env рдЪрд░ рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╢рд╛рдпрдж рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ, рдореИрдВ рдЕрднреА рднреА Next.js рд╕реАрдЦ рд░рд╣рд╛ рд╣реВрдВ :)
@ ig-perez рдЕрдЧрд▓реЗ v9.4 рддрдХ, рдЙрдирдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрд░реАрдХрд╛ рд╣реИ тЖТ https://nextjs.org/docs/basic-features/environment-variables
рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрдврд╝реЗрдВ :)
рдпрд╣ рдХрдорд╛рд▓ рд╣реИ, рдореИрдВрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЕрдкрдирд╛ рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЖрдзреБрдирд┐рдХ Next.js рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ (9.4+)
рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ
fs
рдЙрдкрдпреЛрдЧgetStaticProps
рдпрд╛getServerSideProps
, рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдЬреАрд╡рдирдЪрдХреНрд░ рдореЗрдВ рдЪрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗ рд░рд╣реЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреЗрдбрд╝ рд╣рд┐рд▓ рдЬрд╛рдПредрдЖрдк рдЗрд╕ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЗрддреНрд░рд╣реАрди рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рдЕрдЧрд░ рдЖрдк рдЕрднреА рднреА
getInitialProps
рд╕рд╛рде рдПрдХ рд╡рд┐рд░рд╛рд╕рддреА Next.js рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдиреАрдЪреЗ рдкрдврд╝реЗрдВрдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ -- рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдХрднреА рднреА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдЧреА:
https://github.com/TidyIQ/nextjs-issue/blob/aef67b12d91d299d0978550005a40cbb34f74b71/pages/index.js#L5
рдпрд╛рдж рд░рдЦреЗрдВ, рдЖрдк рдХреЗрд╡рд▓ FS-рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдЪрд╛рд▓рди _рдкрд░ рд╕рд░реНрд╡рд░_ рдХрд░рддреЗ рд╕рдордп рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рддреЗ рд╕рдордп
fs
рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗредрдпрджрд┐ рдЖрдк
fs
, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓getInitialProps
редрдХреНрд▓рд╛рдЗрдВрдЯ рдмрдВрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде
next.config.js
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ: