📦⚡ A precompiled JavaScript module bundler
Packem is an extensively precompiled general-purpose JavaScript module bundler with a focus on performance, flexibility and extendibility. Its crust is built with Rust, a zero-cost abstraction systems programming language with guaranteed memory safety.
Note: This is a pre-release version. Do not use it in production.
Since the v0.2 release, prebuilt Packem binaries are available for UNIX systems only. Binaries for Windows are not available for versions below v1.4.
Windows | macOS | Linux (Ubuntu) |
---|---|---|
❌ | ✔ | ✔ |
Additionally, Node 12 shipped a more stable implementation of the N-API which does not synchronize with the bindings implemented for the LC. For that reason, only the current versions of Node are battle-tested:
Node 10 | Node 9 | Node 8 |
---|---|---|
✔ | ✔ | ✔ |
Packem (v0.1.3-alpha) is +2X faster than Parcel (v1.12.3 - with multicore compilation).
Modern bundlers today do optimize your code heavily, minify them and create near-perfect bundles but it comes at an expensive cost, time. The time slice is worth the effort to boost your productivity and not unnecessarily spending too much time on the tool.
Packem's real power lies in its usage of Rust, which is the state-of-the-art in high performance solutions. This delivers close-to-the-metal speed when compared against other bundlers without comprimising features.
In a comparison of Packem against Parcel, each bundler had to compile the entire Lodash v4.17.1 to a single bundle and this was the results of the speed test:
Test No. | Packem | Parcel |
---|---|---|
1 | 4.23s | 11.01s |
2 (cold) | 5.12s | 12.39s |
3 | 4.55s | 11.80s |
Note
Packem v0.2 uses a faster method of parsing the module graph using V8's
JSON.parse()
on larger graphs, making it upto 1.2-2.0x faster than previous versions.
Packem is distrubuted as an npm package, so you can install it globally by executing the following command:
# Default installation method (with npm)
npm install -g packem
# For Yarn, run
yarn global add packem
Checkout the Getting Started guide for more details.
Packem uses a comprehensive class-based event system. Based off of this, plugins are instantiated in order of definition in the configuration during build time. Built-in events are also rehydrated into the plugins which they can hook onto using the PackemEventDispatcher
API. More details on this can be found in the Plugins API.
Most of the common plugins are not included with a single installation of Packem and will require you to install them manually. Some of these common plugins include:
quality
, compressionRatio
and dithering
to create efficiently optimized images that still retain fidelity.Packem is a community-led project. We depend on your contributions to sustain this project through financial support, filing issues and presenting PRs. Check the contribution guidelines for more details.
Check the FAQ page to get help on some common caveats.
This project exists thanks to all the people who contribute. [Contribute].
Become a financial contributor and help us sustain our community. [Contribute]
Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]
This project is licensed under the MIT License.