Webpack
Webpack needs module imports to be known at build time. The normal agent loader scans plugin files and loads target modules at run time, so the agent uses a separate static loader when it detects a bundle.
Webpack support is experimental.
Plugins in the static loader
The current static loader includes:
- Node.js HTTP and HTTPS
- Express
- MySQL
- PostgreSQL
- MongoDB and Mongoose
- ioredis
- amqplib
- AWS SDK v2 DynamoDB, Lambda, SNS, and SQS
Axios and MySQL2 are not in the static loader because their package metadata cannot be loaded in the form expected by the current code. They can be instrumented by the normal loader but not by the current Webpack loader.
Missing optional modules at build time
The static loader contains imports for all modules in the list above. Webpack may report a missing
module even when your application does not use that plugin. Mark each unused optional module as
false in resolve.alias.
module.exports = {
target: 'node',
resolve: {
alias: {
amqplib: false,
'aws-sdk': false,
express: false,
ioredis: false,
mongodb: false,
mongoose: false,
mysql: false,
pg: false,
},
},
};
Keep a module out of this list when your bundle uses it and you want its plugin installed.
Disable a bundled plugin
The bundled loader currently checks its internal plugin file name, including Plugin. For
example:
export SW_AGENT_DISABLE_PLUGINS='MySQLPlugin,ExpressPlugin'
This differs from the normal loader, which uses mysql,express. Keep the value with the deployment
that needs it.
Limits
- Only plugins listed in the static loader can work in a bundle.
- The loader reads a target module’s
package.jsonto check its version. A package that blocks this import cannot use the current static loader. - A plugin contributor must add a new plugin to both the normal plugin directory and the static loader when Webpack support is possible.
- Tree shaking and other bundler changes can affect module patching. Test the final production bundle, not only the source application.
If bundling is not required, run the normal Node.js output and use the normal plugin loader.