Node.js Lambda Tracing and Webpack Compatibility
Overview
Datadog’s tracing libraries (dd-trace) are known to be not compatible with bundlers like webpack due to the use of conditional imports and other issues. While webpack cannot build dd-trace, your application can still use the dd-trace and datadog-lambda-js libraries provided by the prebuilt Datadog Lambda layer. Follow the instructions below.
webpack
- Follow the installation instructions for Node.js and ensure the Datadog Lambda layer for Node.js is added to your Lambda function. 
- Remove - datadog-lambda-jsand- dd-tracefrom your- package.jsonand the build process.
 
- Mark - datadog-lambda-jsand- dd-traceas externals. This tells the bundler to skip building them as dependencies, since they are already available in the Lambda runtime provided by the Datadog Lambda layer.
 - webpack.config.js - var nodeExternals = require("webpack-node-externals");
module.exports = {
  // use webpack-node-externals to exclude all node dependencies.
  // You can manually set the externals too.
  externals: [nodeExternals(), "dd-trace", "datadog-lambda-js"],
};
 
- If you are using the - serverless-webpackand have the option- includeModulesset to any value other than- false, serverless-webpack automatically packs external modules under node_modules. Therefore, you must force exclude- datadog-lambda-jsand- dd-trace. Skip this step if you don’t use- serverless-webpackor you don’t have the- includeModulesoption in your serverless.yml.
 - serverless.yml - custom:
  webpack:
    # Note: You only need the following if you already have the includeModules option configured
    includeModules:
      # ... your existing configuration for includeModules
      forceExclude:
        - dd-trace
        - datadog-lambda-js
    packagerOptions:
      scripts:
        # optional, only needed when they are included as transitive dependencies 
        - rm -rf node_modules/datadog-lambda-js node_modules/dd-trace
 
esbuild
- Follow the installation instructions for Node.js and ensure the Datadog Lambda layer for Node.js is added to your Lambda function. 
- Remove - datadog-lambda-jsand- dd-tracefrom your- package.jsonand the build process.
 
- Mark - datadog-lambda-jsand- dd-traceas externals. This tells the bundler to skip building them as dependencies, since they are already available in the Lambda runtime provided by the Datadog Lambda layer.
 
- Follow the steps on the Esbuild support page to use Datadog’s Esbuild plugin. This enables instrumentation of bundled dependencies. - esbuild.config.js (if using esbuild-config) - {
  "external": ["dd-trace", "datadog-lambda-js"],
}
 
- serverless.yml (if using serverless-esbuild) - custom:
  esbuild:
    exclude: ["dd-trace", "datadog-lambda-js", "aws-sdk"] # aws-sdk is needed because it is the default value for `exclude`
 
Further Reading
Additional helpful documentation, links, and articles: