@numminorihsf/webpack-runtime-analyzer
v1.5.1
Published
Webpack plugin for analyzing internal processes, state and structure of bundles
Downloads
4
Maintainers
Readme
webpack-runtime-analyzer
Webpack 1.x/2.x plugin for analyzing internal processes, state and structure of bundles. Built on rempl.
Install
npm install webpack-runtime-analyzer --save-dev
Usage
Add plugin to your webpack config:
var RuntimeAnalyzerPlugin = require('webpack-runtime-analyzer');
// ...
plugins: [new RuntimeAnalyzerPlugin()]
You can set optional configuration for RuntimeAnalyzerPlugin
constructor with this defaults:
new RuntimeAnalyzerPlugin({
// Can be `standalone` or `publisher`.
// In `standalone` mode analyzer will start rempl server in exclusive publisher mode.
// In `publisher` mode you should start rempl on your own.
mode: 'standalone',
// Port that will be used in `standalone` mode to start rempl server.
// When set to `0` a random port will be chosen.
port: 0,
// Automatically open analyzer in the default browser. Works for `standalone` mode only.
open: false,
// Use analyzer only when Webpack run in a watch mode. Set it to `false` to use plugin
// in any Webpack mode. Take into account that a building process will not be terminated
// when done since the plugin holds a connection to the rempl server. The only way
// to terminate building process is using `ctrl+c` like in a watch mode.
watchModeOnly: true
})
For publisher
mode you should start rempl server on your own:
npm install -g rempl-cli
rempl
Also, you can use the GUI to control rempl server.
After you run Webpack you can open web interface of analyzer.
- In
standalone
mode the link to the web interface will be printed after build is done. Withopen
option set totrue
, the web interface will be opened in default browser automatically. - In
publisher
mode your should open URL of the rempl server, usually, it's http://localhost:8177/. You can set custom rempl server url viaREMPL_SERVER
environment variable.
Try the example to see how it works:
cd example
npm i
npm run dev
Key features
- Dashboard
- Dependency graph
- File size map
- Module details
- Realtime analyzing
- Open in editor
- Integration
- Working with huge bundles
Dashboard
The list of the modules and the assets is always at hand.
The left list
The left list contains all modules in your bundle.
Click on a module name to view detail info about the module.
Click on a module name withholding shift
key to open a file that related with this module in your editor.
The right list
The right list contains building output (chunks, static, etc).
Dependency graph
Take a look at the dependencies of the modules and at the modules stats.
Module types
There are a few basic module types:
- normal - module that you are requiring with
require(...)
- context - complex module that unites other modules when you are using
require.context(...)
Some modules can be marked as entry
. It means that this module is declared in entry
section in you webpack-config.
The modules is separated by file types (scripts, templates, styles, etc). Every file type has a different color. You can see these colors at the nodes of graph or at the color bar above the graph.
You can hover mouse cursor at the nodes of graph or at the color bar sections and see an additional module-info or a file type statistic.
Controls
- zooming graph with mouse/touchpad scrolling
- changing graph position with drag and drop on the white field.
- changing rendering speed by sliding speed slider
- pause/resume graph rendering with
space
-key
File size map
Look at the file map and find out why your bundle is so big.
Controls
- click to some block to expose it
- press
escape
to return to the root
Module details
Displays more useful details about the modules.
In the text input, you can choose a module or a file which info you want to see. Just start typing module/file name and choose it from the suggestion list.
In the table you can see some modules statistic:
Require
Displays modules are required by chosen module/file.
Occurrences
Displays modules are requiring chosen module/file.
Retained
Displays modules that required by chosen module/file recursively.
For example, we have three modules: foo
, bar
and baz
.
If foo
requires bar
and bar
requires baz
then:
- retained of
foo
is 2 (bar
andbaz
) - retained of
bar
is 1 (baz
) - retained of
baz
is 0
Exclusive
Displays modules are required only by this module/file and by all its dependencies recursively.
For example, we have three modules: foo
, bar
and baz
.
Case 1: If foo
requires bar
then foo
exclusive is 1
because no more modules that require bar
.
Case 2: If foo
and bar
requires baz
then:
foo
exclusive is0
becausebar
also requiresbaz
.bar
exclusive is0
becausefoo
also requiresbaz
.
Case 3: If foo
requires bar
and bar
requires baz
then:
foo
exclusive is2
because no more modules that requirebar
andbaz
bar
exclusive is1
because no more modules that requirebaz
Controls
- click on a module name to view detail info about the module
- click on a module name withholding
shift
-key to open a file that related with this module in your editor
Realtime analyzing
Analyzing process is performing in realtime.
Open in editor
You can open any bundle file in you favorite editor. Just set the EDITOR
variable in your environment then you will may click on any file path withholding shift
key to open the file in a chosen editor.
For example: export EDITOR=sublime && webpack -w
For more information about supported editors see open-in-editor documentation.
Source map support
- enable source-map in your webpack config (e.g.
devtool: 'source-map'
) - click on some
Required
module in details page and your editor will open the place (file, line and column) where clicked module was required by a filtered module - click on some
Occurrences
module in details page and your editor will open the place (file, line and column) where clicked module are requiring filtered module
Integration
You can use Webpack Runtime Analyzer everywhere when having an access to a web-view (e.g. web pages, browser plugins, mobile browsers and applications).
Atom Editor
Some code editors have access to a web view (e.g. iframe) and this is a great opportunity to integrate Webpack Runtime Analyzer in these editors to use unique editor features.
You can use Webpack Runtime Analyzer in Atom Editor by installed the plugin.
This plugin creates a bridge
between the editor and Webpack Runtime Analyzer. It allows you to open the UI directly in an editor tab and observing current editing file.
Open UI in editor
Just type Rempl
in command palette and enter rempl-server url (http://localhost:8177 by default).
Info about editing file
If the editing file is a part of the bundle, you can see the info about it in the following places:
details
page in the UI- the bottom bar of the UI
- the status bar of the Editor (two-way communication)
The bottom bar exists only when the UI is running within editor
How about other editors?
VS Code support is in plans... But if you want it faster, then like this comment ;)
Working with huge bundles
In huge bundles, there are many modules that are useless for analyzing.
For example, look at the AST Explorer bundle:
In this case graph is not usable, moreover overloaded graph decreases rendering performance.
You can enable Hide 3rd party modules
in the Options
menu to hide modules that aren't requiring your project modules.
So, modules list
, graph
and file map
will contain only modules that requiring your project modules.
Hide 3rd party modules
is enabled by default.
Webpack 1.x support
All features is working correctly with webpack 2.x and 1.x
License
MIT