Search code examples
node.jsnewrelicnuxt.js

Use newrelic in nuxt


I am trying to add newrelic agent to my nuxt application. I have installed the needed package and added my license key and set an application name in newrelic.js configuration file:

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

My problem is that I also need to require this configuration file at the top of my server.js file and since this file is dynamically created and placed under the .nuxt folder I have no idea how to do this.

In a standard nodejs application I would simply add the require('newrelic'); to the top of my startup script or perhaps add a new script entry in package.json looking something like this:

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

Solution

  • I ended up using express to solve this:

    npm i express
    touch server/index.js
    

    We will now load newrelic in the server/index.js file and after that create our nuxt instance:

    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();
    

    I also updated the script section in my package.json:

    "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"
    }
    

    Hope this can help anyone who faces the same kind of problem.