如何挂钩 NextJS 服务器的启动,以便可以进行一次性初始化?
这里有一个讨论,但到目前为止还没有解决方案。
只需将您的代码添加到
next.config.js
文件即可。
这样的事情应该可以解决问题:
//next.config.js
//imports
module.exports = async (phase, { defaultConfig }) => {
const nextConfig = {...}
console.log("Executes at server startup")
return nextConfig
}
我希望这个解决方案能够解决您的问题。
该存储库无需使用自定义服务器即可运行启动功能。 下一个JS加载之前和之后,可以分别执行。
// before next loading
console.log(process.env.ENV_TEST, '[expected]: undefined') // undefined
// after next loading
const command = process.argv[2]
if (['dev', 'start'].includes(command)) {
require('./node_modules/next/dist/bin/next')
check(init)
}
// function
// function
// function
// next loading check
/** @param {Function} fn */
function check(fn) {
setTimeout(() => {
if (!('LOAD_CHECK' in process.env)) {
setTimeout(check, 0, fn)
return
}
fn()
}, 50)
}
// after init function
function init() {
switch (command) {
case 'dev': {
// here dev script
console.log('run dev')
break
}
case 'start': {
// here start script
console.log('run start')
break
}
}
// commons script
console.log(process.env.ENV_TEST, '[expected]: Hello!!') // 'Hello!!'
}
有关更多信息,请参阅此存储库中的 app.js
您可以使用nextjs官方文档中的instrumention
这基本上是,我们在项目根目录下名为 Instrumention (js/ts) 的文件中导出一个名为 register 的函数。如果您使用的话,请在 src/ 目录中。 Nextjs 会在服务器实例启动时查找该文件并调用该函数。
下面是示例 instrumention.ts 文件。
阅读完整文档 这里
import { init } from 'package-init'
export function register() {
init()
}