NodeJS 在nuxt中使用新旧版本

7tofc5zh  于 2023-02-08  发布在  Node.js
关注(0)|答案(3)|浏览(552)

我正在尝试添加newellegal代理到我的nuxt应用程序。我已经安装了所需的软件包,并添加了我的许可证密钥,并在newrelic.js配置文件中设置了一个应用程序名称:

npm i newrelic
cp node_modules/newrelic/newrelic.js .
nano newrelic.js

我的问题是,我还需要在我的server.js文件的顶部需要这个配置文件,由于这个文件是动态创建的,并放置在.nuxt文件夹下,我不知道如何做到这一点。
在一个标准的nodejs应用程序中,我只需要将require('newrelic');添加到启动脚本的顶部,或者在package.json中添加一个新的脚本条目,如下所示:

"scripts": {
  "dev": "node -r newrelic.js app.js"
}
00jrzges

00jrzges1#

我最终使用express来解决这个问题:

npm i express
touch server/index.js

现在我们将newrelic加载到server/index.js文件中,然后创建nuxt示例:

require('newrelic');
const express = require('express');
const consola = require('consola');
const { Nuxt, Builder } = require('nuxt');
const app = express();

// Import and Set Nuxt.js options
const config = require('../nuxt.config.js');
config.dev = process.env.NODE_ENV !== 'production';

async function start () {
  // Init Nuxt.js
  const nuxt = new Nuxt(config);

  const { host, port } = nuxt.options.server;

  // Build only in dev mode
  if (config.dev) {
    const builder = new Builder(nuxt);
    await builder.build();
  } else {
    await nuxt.ready();
  }

  // Give nuxt middleware to express
  app.use(nuxt.render);

  // Listen the server
  app.listen(port, host);
  consola.ready({
    message: `Server listening on http://${host}:${port}`,
    badge: true
  });
}
start();

我还更新了我的package.json中的script部分:

"scripts": {
  "dev": "cross-env NODE_ENV=development nodemon server/index.js --watch server",
  "build": "nuxt build",
  "start": "cross-env NODE_ENV=production node server/index.js"
}

希望这能帮助任何面临同样问题的人。

cs7cruho

cs7cruho2#

对于任何在这方面挣扎的人,我发现了一个简单得多的解决方案,使用nuxtmodules和钩子。
使用以下内容创建新文件modules/newRelic.js

module.exports = function () {
  this.nuxt.hook("listen", () => {
    require("newrelic");
  });
};

nuxt.config.js中导入模块

modules: [
  "~/modules/newRelic.js"
]

别忘了安装newrelacy(npm i newrelic)并将newrelic.js粘贴到应用程序的根文件夹中。

qv7cva1a

qv7cva1a3#

在Node.js中,您可以在实际脚本启动之前 * 要求 * 一个具有-r [module]语法的模块(参见Node.js文档)。
对于Nuxt,像这样修改你的npm运行脚本(而不是nuxt start):

node -r newrelic node_modules/nuxt/bin/nuxt.js start

这样,Node会先加载NewRelic,然后加载Nuxt,并确保NewRelic能够检测所有依赖项。如果您让Nuxt先启动,NewRelic将无法识别某些依赖项,例如 express
这是NewRelic推荐的,见他们的文档。

相关问题