如何将 NewRelic 集成到与 Webpack 捆绑在一起的 Node Typescript Express 服务器中?

bea*_*mes 11 node.js express newrelic typescript

坦白说,我都试过了。我并不是 Webpack 的高手,但是这些年来我似乎在配置新项目方面相处得很好。

我现在似乎无法做的是将 NewRelic 服务设置到现有的 Node/Typescript/Express/Webpack 应用程序中。

就目前情况而言,我的应用程序很好地捆绑到我的 /dist 文件夹中的单个文件中,并且运行快速灵活。似乎 New Relic 推出的这个“节点代理”与 Typescript 导入配合得不好。

Webpack 配置

const path = require('path');
const webpack = require('webpack');
const nodeExternals = require('webpack-node-externals');
const NodemonPlugin = require ('nodemon-webpack-plugin');

module.exports = (env = {}) => {
const config = {
    entry: ['./src/app.ts'],
    mode: env.development ? 'development' : 'production',
    target: 'node',
    devtool: env.development ? 'inline-source-map' : false,
    resolve: {
        extensions: ['.ts', '.js'],
        modules: ['node_modules', 'src', 'package.json'],
    },
    module: {
        rules: [
            {
                test: /\.ts$/,
                use: ['ts-loader', 'eslint-loader'],
                // exclude: /node_modules/,
            },
        ],
    },
    plugins: [],
    externals: [ 'newrelic', nodeExternals() ]
};

if (env.nodemon) {
    config.watch = true;
    config.plugins.push(new NodemonPlugin())
}
return config;
};
Run Code Online (Sandbox Code Playgroud)
  • 存在一个标准的 /project_root/.newrelic 文件
  • CircleCi 选择该项目并运行 package.json ==>“webpack”中的“build:ci”脚本
  • 输出是/dist/main.js

参考
https://docs.newrelic.com/docs/agents/nodejs-agent/installation-configuration/install-nodejs-agent https://docs.newrelic.com/docs/agents/nodejs-agent/installation-configuration/ nodejs-agent-configuration https://discuss.newrelic.com/t/node-agent-fails-with-webpack/24874

Sha*_*han 6

应用程序起点的第一行应该是

import newrelic from 'newrelic';
Run Code Online (Sandbox Code Playgroud)

当然,先运行npm install newrelic --save

然后,在存储库的根目录(src 之外)创建一个 newrelic.js 文件。

然后您输入以下详细信息:

'use strict'
exports.config = {
  app_name: ['appName'],
  license_key: '1234567890',
  allow_all_headers: true,
  attributes: {
    exclude: [
      'request.headers.cookie',
      'request.headers.authorization',
      'request.headers.proxyAuthorization',
      'request.headers.setCookie*',
      'request.headers.x*',
      'response.headers.cookie',
      'response.headers.authorization',
      'response.headers.proxyAuthorization',
      'response.headers.setCookie*',
      'response.headers.x*'
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。你也可以做 `import 'newrelic';` 这样 linting 就不会抱怨未使用的变量。 (9认同)