npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

rjs-report

v0.1.0

Published

Analyse r.js build output - report size of bundles, duplicated modules, programmatic and cli APIs

Downloads

6

Readme

rjs-report

Analyse your r.js optimization output. Especially useful when optimizing your app into multiple output bundles. See the size of each bundle and large duplicated modules.

Why?

Large web applications can be bundled into multiple chunks (or multiple bundles) using r.js optimizer. This can help speed up the initial load of the app since the browser needs to download smaller files as well as parse and evaluate less code. Splitting the app into separate dynamically loaded parts can also help in development since less modules need to be loaded in on any given page. However, sometimes when creating these bundles with r.js, you might need to tweak which bundle certain modules should go to. If a module is large, you could

  • build it into the root bundle if it's needed frequently
  • duplicate it into some of the page bundles to avoid weighing down the rest of the pages
  • put it into it's own bundle and load it on demand

rjs-report helps you make those decisions by listing the sizes of bundles, modules and duplicates.

Features

  • see the size of each bundle produced by r.js optimizer
  • see duplicate modules that appear in more than one bundle
  • see sizes of all your modules
  • see all sizes ungzipped and gzipped
  • list bundle and module paths with no sizing information for use with other tools

Examples

Summary report

$ rjs-report -d public/dist summary

Module (261.7KB / 56.2KB) lib/d3/d3.js duplicated in
  app/modules/books/routes/books_new_route.js
  app/modules/magazines/routes/magazines_route.js


Module (59.9KB / 12.5KB) lib/fileupload/jquery.fileupload.js duplicated in
  app/modules/books/routes/review_route.js
  app/modules/books/routes/editor_route.js


Module (53.1KB / 10.9KB) lib/jquery.sparkline.js duplicated in
  app/modules/magazines/routes/magazines_route.js
  app/modules/music/routes/music_route.js


Bundle                                                               Size     Gzipped
-------------------------------------------------------------------  -------  -------
app/modules/books/routes/editor_route.js                             1.7MB    367.2KB
app/modules/magazines/routes/magazines_route.js                      965.8KB  223.4KB
app/boot.js                                                          485.6KB  129.1KB
lib/highcharts.js                                                    453.0KB  129.9KB
app/modules/books/routes/books_new_route.js                          449.8KB  102.8KB
app/modules/books/routes/review_route.js                             337.7KB  80.6KB
app/modules/music/routes/music_route.js                              271.8KB  65.5KB
app/modules/books/routes/experiment_route.js                         173.5KB  41.3KB
app/modules/books/routes/books_route.js                              172.6KB  41.2KB
lib/highcharts-more.js                                               61.1KB   16.9KB
-------------------------------------------------------------------  -------  -------
                                                                     4.9MB    1.2MB

Module report

$ rjs-report -d public/dist modules --min-size 200000 --no-grouping

453.0KB / 129.9KB lib/highcharts.js
261.7KB / 56.2KB lib/d3/d3.js
247.0KB / 72.2KB lib/jquery.js
16.7KB / 4.9KB components/leap/view.js

Plain bundle list

$ rjs-report -d public/dist bundles --plain

app/modules/books/routes/editor_route.js
app/modules/magazines/routes/magazines_route.js
app/modules/books/routes/books_new_route.js
app/modules/books/routes/review_route.js
app/modules/music/routes/music_route.js
app/modules/books/routes/experiment_route.js
app/modules/books/routes/books_route.js
lib/highcharts-more.js
lib/highcharts.js
app/boot.js

Usage

Install

npm install -g rjs-report

And then use like so

rjs-report --dir path/to/your/r.js/build/output [command] [options]

#e.g.
rjs-report -d public/dist summary --min-size 20000

Commands

  Usage: rjs-report [options] [command]

  Commands:

    summary [options]      report size of each bundle and large duplicates
    duplicates [options]   list modules found in multiple bundles
    modules [options]      list and filter modules
    bundles [options]      list bundles

  Options:

    -h, --help        output usage information
    -V, --version     output the version number
    -d, --dir [path]  The r.js optimization output dir (should contain the build.txt file)

summary

  Usage: summary [options]

  Options:

    -h, --help              output usage information
    -s, --min-size [bytes]  minimum size of duplicates to be reported

duplicates

  Usage: duplicates [options]

  Options:

    -h, --help              output usage information
    -s, --min-size [bytes]  minimum size of duplicates to be reported

modules

  Usage: modules [options]

  Options:

    -h, --help              output usage information
    -p, --plain             a list of paths with no size information
    -b, --bundle [name]     filter by bundle
    -g, --grep [name]       filter by name
    -s, --min-size [bytes]  filter by min size
    -G, --no-grouping       don't group by bundle

bundles

  Usage: bundles [options]

  Options:

    -h, --help   output usage information
    -p, --plain  a list of paths with no size information

Programmatic API

All of the same commands and (most of the) options are available for use within node. The commands return JSON.

var path = require('path');
var rr = require('rjs-report');

var buildDir = path.resolve(__dirname, "./public/app-built");

rr.bundles(buildDir);
rr.bundles(buildDir, {plain: true});
rr.modules(buildDir, {minSize: 100000})

TODO

  • [ ] support modules with plugins in the module id
  • [ ] resolve paths that don't directly map to the file system (mapped/aliased modules)