Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 启动应用程序时运行Next.js函数/脚本_Javascript_Next.js - Fatal编程技术网

Javascript 启动应用程序时运行Next.js函数/脚本

Javascript 启动应用程序时运行Next.js函数/脚本,javascript,next.js,Javascript,Next.js,我有一个(服务器端)函数,我想在第一次启动next.js服务器时运行。通常,我会在package.json脚本定义:节点/path/to/script.js&&next start中执行类似操作。但是这个脚本从“webpacked”代码中导入了一些资源,所以这并不容易。(我知道可以在node.js中使用——实验模块,打开es6支持,但这也带来了它自己的问题,我不想陷入兔子洞) 到目前为止,我拥有的最佳解决方案是创建一个api端点来运行这些脚本,然后在启动后手动点击该端点。但这样做似乎是一种黑客行

我有一个(服务器端)函数,我想在第一次启动next.js服务器时运行。通常,我会在
package.json
脚本定义:
节点/path/to/script.js&&next start
中执行类似操作。但是这个脚本从“webpacked”代码中导入了一些资源,所以这并不容易。(我知道可以在node.js中使用
——实验模块
,打开es6支持,但这也带来了它自己的问题,我不想陷入兔子洞)

到目前为止,我拥有的最佳解决方案是创建一个api端点来运行这些脚本,然后在启动后手动点击该端点。但这样做似乎是一种黑客行为,如果有人发现它,这个端点可能会被用于某种DoS攻击


有没有更好的解决方案,只允许在应用程序启动时注册要运行的函数/回调?我想可能的位置是,但在可能的设置列表中我没有看到任何可能的位置。

我想你可以使用next.config文件中的webpack配置来注册一个新插件,并在构建完成后运行它

module.exports = {
    webpack: (config, options) => {
        config.plugins.push(
            {
                apply: (compiler) => {
                    compiler.hooks.afterEmit.tap('AfterEmitPlugin', (compilation) => {
                        console.log(".. Run after build")
                    });
                }
            }    
        )
        return config
    },
}

您是否尝试过自定义server.js文件?我考虑过,但我希望有一个不那么激烈的解决方案。他们似乎建议不要这样做,因为“…自定义服务器将删除重要的性能优化,如无服务器功能和自动静态优化。”好吧,据我所知,如果您运行next.js API,您将像无服务器功能一样运行它,因此您不必首先启动服务器,您没有像传统express服务器那样运行的服务器。我不知道您的上下文,但您可以让每个路由以单例模式调用此脚本,例如,让页面存储一个状态,说明它是否已运行,如果未运行,则在调用时再次运行,或使用自定义服务器