rollup vs webpack vs browserify vs gulp vs parcel
JavaScript 打包和构建工具
rollupwebpackbrowserifygulpparcel类似的npm包:
JavaScript 打包和构建工具

JavaScript 打包和构建工具是用于将多个 JavaScript 文件及其依赖项组合成一个或多个文件的工具。这些工具可以优化代码,减少文件大小,提高加载速度,并提供开发时的构建流程自动化。它们在现代前端开发中扮演着重要角色,帮助开发者管理复杂的应用程序结构,提升开发效率和用户体验。

npm下载趋势
3 年
GitHub Stars 排名
统计详情
npm包名称
下载量
Stars
大小
Issues
发布时间
License
rollup56,027,20926,1432.76 MB61123 天前MIT
webpack37,898,56965,8195.66 MB20923 天前MIT
browserify1,936,30814,727363 kB3791 年前MIT
gulp1,908,23133,04111.2 kB346 个月前MIT
parcel263,81744,02543.9 kB5765 天前MIT
功能对比: rollup vs webpack vs browserify vs gulp vs parcel

模块化支持

  • rollup:

    Rollup 专注于 ES 模块,能够生成高效的打包文件,支持树摇优化,消除未使用的代码,适合构建库和组件。

  • webpack:

    Webpack 支持多种模块格式,包括 CommonJS 和 ES6 模块,能够处理复杂的依赖关系和动态导入。

  • browserify:

    Browserify 允许使用 CommonJS 模块语法,能够将 Node.js 模块打包到浏览器中。它支持动态加载模块,并能处理模块之间的依赖关系。

  • gulp:

    Gulp 本身不直接处理模块化,但可以与其他工具结合使用,如 Browserify 或 Webpack,通过任务定义来管理模块化构建。

  • parcel:

    Parcel 自动识别模块类型,支持 ES6 模块、CommonJS 和其他模块格式,简化了模块化的使用。

如何选择: rollup vs webpack vs browserify vs gulp vs parcel
  • rollup:

    选择 Rollup 如果你专注于构建库或需要生成高效的 ES 模块。Rollup 提供了树摇优化,能够消除未使用的代码,适合需要高性能输出的项目。

  • webpack:

    选择 Webpack 如果你需要一个功能强大的模块打包工具,能够处理复杂的依赖关系和多种资源类型。Webpack 适合大型应用程序,提供丰富的插件生态系统和灵活的配置选项。

  • browserify:

    选择 Browserify 如果你需要将 CommonJS 模块打包到浏览器中,并且希望保持简单的配置和使用方式。它适合小型项目或对模块化有基本需求的应用。

  • gulp:

    选择 Gulp 如果你需要一个基于流的构建系统,能够通过代码定义构建任务,适合需要高度自定义和灵活性的项目。Gulp 的 API 友好,适合喜欢编写 JavaScript 任务的开发者。

  • parcel:

    选择 Parcel 如果你想要一个零配置的打包工具,能够快速启动项目并自动处理依赖关系。它适合快速开发和原型设计,尤其是小型到中型项目。

rollup的README

npm version node compatibility install size code coverage backers sponsors license Join the chat at https://is.gd/rollup_chat

Rollup

Overview

Rollup is a module bundler for JavaScript which compiles small pieces of code into something larger and more complex, such as a library or application. It uses the standardized ES module format for code, instead of previous idiosyncratic solutions such as CommonJS and AMD. ES modules let you freely and seamlessly combine the most useful individual functions from your favorite libraries. Rollup can optimize ES modules for faster native loading in modern browsers, or output a legacy module format allowing ES module workflows today.

Quick Start Guide

Install with npm install --global rollup. Rollup can be used either through a command line interface with an optional configuration file or else through its JavaScript API. Run rollup --help to see the available options and parameters. The starter project templates, rollup-starter-lib and rollup-starter-app, demonstrate common configuration options, and more detailed instructions are available throughout the user guide.

Commands

These commands assume the entry point to your application is named main.js, and that you'd like all imports compiled into a single file named bundle.js.

For browsers:

# compile to a <script> containing a self-executing function
rollup main.js --format iife --name "myBundle" --file bundle.js

For Node.js:

# compile to a CommonJS module
rollup main.js --format cjs --file bundle.js

For both browsers and Node.js:

# UMD format requires a bundle name
rollup main.js --format umd --name "myBundle" --file bundle.js

Why

Developing software is usually easier if you break your project into smaller separate pieces, since that often removes unexpected interactions and dramatically reduces the complexity of the problems you'll need to solve, and simply writing smaller projects in the first place isn't necessarily the answer. Unfortunately, JavaScript has not historically included this capability as a core feature in the language.

This finally changed with ES modules support in JavaScript, which provides a syntax for importing and exporting functions and data so they can be shared between separate scripts. Most browsers and Node.js support ES modules. However, Node.js releases before 12.17 support ES modules only behind the --experimental-modules flag, and older browsers like Internet Explorer do not support ES modules at all. Rollup allows you to write your code using ES modules, and run your application even in environments that do not support ES modules natively. For environments that support them, Rollup can output optimized ES modules; for environments that don't, Rollup can compile your code to other formats such as CommonJS modules, AMD modules, and IIFE-style scripts. This means that you get to write future-proof code, and you also get the tremendous benefits of...

Tree Shaking

In addition to enabling the use of ES modules, Rollup also statically analyzes and optimizes the code you are importing, and will exclude anything that isn't actually used. This allows you to build on top of existing tools and modules without adding extra dependencies or bloating the size of your project.

For example, with CommonJS, the entire tool or library must be imported.

// import the entire utils object with CommonJS
var utils = require('node:utils');
var query = 'Rollup';
// use the ajax method of the utils object
utils.ajax('https://api.example.com?search=' + query).then(handleResponse);

But with ES modules, instead of importing the whole utils object, we can just import the one ajax function we need:

// import the ajax function with an ES import statement
import { ajax } from 'node:utils';

var query = 'Rollup';
// call the ajax function
ajax('https://api.example.com?search=' + query).then(handleResponse);

Because Rollup includes the bare minimum, it results in lighter, faster, and less complicated libraries and applications. Since this approach is based on explicit import and export statements, it is vastly more effective than simply running an automated minifier to detect unused variables in the compiled output code.

Compatibility

Importing CommonJS

Rollup can import existing CommonJS modules through a plugin.

Publishing ES Modules

To make sure your ES modules are immediately usable by tools that work with CommonJS such as Node.js and webpack, you can use Rollup to compile to UMD or CommonJS format, and then point to that compiled version with the main property in your package.json file. If your package.json file also has a module field, ES-module-aware tools like Rollup and webpack will import the ES module version directly.

Contributors

This project exists thanks to all the people who contribute. [Contribute]. . If you want to contribute yourself, head over to the contribution guidelines.

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

Special Sponsor

TNG Logo

TNG has been supporting the work of Lukas Taegert-Atkinson on Rollup since 2017.

License

MIT