webpack

一个 javascript 和 “朋友” 的捆绑器。将许多模块打包成几个捆绑的资产。代码分割允许按需加载应用程序的部分内容。通过 "加载器",模块可以是 CommonJs,AMD,ES6 模块,CSS,图像,JSON,Coffeeescript,LESS,......以及你自定义的东西。「A bundler for javascript and friends. Packs many modules into a few bundled assets. Code Splitting allows for loading parts of the application on demand. Through "loaders", modules can be CommonJs, AMD, ES6 modules, CSS, Images, JSON, Coffeescript, LESS, ... and your custom stuff.」

Github stars Tracking Chart

名字webpack

webpack 是一个模块捆绑器。它的主要目的是将 JavaScript 文件捆绑在浏览器中使用,但它也能对任何资源或资产进行转换、捆绑或打包。

安装

使用 npm:

npm install --save-dev webpack

使用 yarn:

yarn add webpack --dev

介绍

webpack是一个模块的捆绑器。它的主要目的是将JavaScript文件捆绑在浏览器中使用,但它也能够对任何资源或资产进行转换、捆绑或打包。

长话短说:

  • 捆绑 ES 模块CommonJSAMD 模块(甚至是组合)。
  • 可以创建一个单一的捆绑包或多个分块,在运行时异步加载(以减少初始加载时间)。
  • 在编译过程中解析依赖关系,减少运行时的大小。
  • 加载器可以在编译的同时对文件进行预处理,如 TypeScript 转为 JavaScript,Handlebars 字符串转为编译函数,图片转为 Base64 等。
  • 高度模块化的插件系统,可以满足您的应用程序的任何其他需求。

开始使用

查看 webpack 的快速 入门 指南和 其他指南

浏览器兼容性

webpack 支持所有 ES5 兼容 的浏览器(不支持 IE8 及以下版本)。webpack 还需要 Promise 来 import() 和 require.sure()。如果你想支持旧版本的浏览器,你需要在使用这些表达式之前 加载一个 polyfill

概念

插件

webpack 有一个丰富的插件接口。webpack 本身的大部分功能都使用了这个插件接口。这使得 webpack 非常灵活。

名字 状态 安装大小 描述
mini-css-extract-plugin mini-css-npm mini-css-size 将 CSS 提取到单独的文件中。它为每个包含 CSS 的 JS 文件创建一个 CSS 文件。
compression-webpack-plugin compression-npm compression-size 准备压缩版本的资产,以便用 Content-Encoding 提供给他们。
i18n-webpack-plugin i18n-npm i18n-size 为你的捆绑包添加 i18n 支持。
html-webpack-plugin html-plugin-npm html-plugin-size 简化 HTML 文件 (index.html) 的创建,以服务于您的 bundles。
extract-text-webpack-plugin extract-npm extract-size 从一个或多个 bundle 中提取文本到一个单独的文件中。

加载器(Loaders)

webpack 可以使用加载器来预处理文件。这允许你以超越 JavaScript 的方式捆绑任何静态资源。你可以使用 Node.js 轻松编写自己的加载器。

加载器可以通过在 require() 语句中使用 loadername!前缀来激活,或者通过 webpack 配置中的regex自动应用。

文件

名字 状态 安装大小 描述
raw-loader raw-npm raw-size 加载文件的原始内容 (utf-8)
val-loader val-npm val-size 以模块的形式执行代码,并将输出视为 JS 代码。
url-loader url-npm url-size 工作原理和文件加载器一样,但如果文件小于限制值,可以返回一个数据 Url。
file-loader file-npm file-size 发送文件到输出文件夹并返回(相对)url

JSON

名字 状态 安装大小 描述
json-npm json-size 加载JSON文件(默认包含)。
json5-npm json5-size 加载并转换 JSON 5 文件。
cson-npm cson-size 加载并转换 CSON 文件

转换(Transpiling)

名字 状态 安装大小 描述
<script> script-npm script-size 在全局上下文中执行一次 JavaScript 文件(如在脚本标签中),require() 不被解析。
babel-npm babel-size 加载 ES2015+ 代码,并使用 Babel 转码到ES5。
traceur-npm traceur-size 使用 Traceur 加载 ES2015+ 代码并转码到 ES5。
type-npm type-size 像 JavaScript 一样加载 TypeScript
awesome-typescript-loader awesome-typescript-npm awesome-typescript-size 用于 webpack 的超棒的 TypeScript 加载器
coffee-npm coffee-size 像加载 JavaScript 一样加载 CoffeeScript

模板(Templating)

名字 状态 安装大小 描述
html-npm html-size 将 HTML 导出为字符串,需要引用静态资源。
pug-npm pug-size 加载 Pug 模板并返回一个函数。
md-npm md-size 将 Markdown 编译成 HTML
posthtml-npm posthtml-size 使用 PostHTML 加载和转换一个 HTML 文件。
hbs-npm hbs-size 将 Handlebars 编译成 HTML

样式化(Styling)

名字 状态 安装大小 描述
<style> style-npm style-size 在 DOM 中添加模块的导出样式
css-npm css-size 加载已解析的 CSS 文件并返回 CSS 代码。
less-npm less-size 加载并编译一个 LESS 文件
sass-npm sass-size 加载并编译一个 Sass/SCSS 文件。
stylus-npm stylus-size 加载并编译 Stylus 文件
postcss-npm postcss-size 使用 PostCSS 加载和转换 CSS/SSS 文件。

代码检测和测试(Linting & Testing)

名字 状态 安装大小 描述
mocha-npm mocha-size 使用 mocha 进行测试(浏览器/NodeJS)
eslint-npm eslint-size 使用 ESLint 进行代码的预加载器。
jshint-npm jshint-size 使用 JSHint 的预加载器来检测代码。

框架(Frameworks)

名字 状态 安装大小 描述
vue-npm vue-size 加载和编译 Vue 组件
polymer-npm polymer-size 使用所选择的预处理器和 require() 处理 HTML 和 CSS,就像处理一流的模块一样处理 Web 组件。
angular-npm angular-size 加载和编译 Angular 2 组件
riot-npm riot-size Riot 官方 webpack 加载器

性能

webpack 使用异步 I/O,并且有多个缓存级别。这使得 webpack 在增量编译时速度非常快。

模块格式

webpack 支持 ES2015+、CommonJS 和 AMD 模块的开箱即用。它对你的代码的 AST 进行巧妙的静态分析。它甚至有一个评估引擎来评估简单的表达式。这让你可以支持大多数现有的库,开箱即用。

代码拆分

webpack 允许您将您的代码库分割成多个块。分块在运行时被异步加载。这减少了初始加载时间。

优化

webpack 可以做很多优化来减少 JavaScript 的输出大小,通过重复复制经常使用的模块,精简,并通过代码分割让你完全控制哪些是初始加载的,哪些是运行时加载的。它还可以通过使用哈希来使你的代码块缓存友好。

许可证

FOSSA Status


(vz Revised on 2021.01.30)

Overview

Name With Ownerwebpack/webpack
Primary LanguageJavaScript
Program languageJavaScript (Language Count: 8)
PlatformLinux, Mac, Windows
License:MIT License
Release Count619
Last Release Namev5.91.0 (Posted on )
First Release Namev1.0.0-beta2 (Posted on )
Created At2012-03-10 10:08:14
Pushed At2024-04-26 18:51:23
Last Commit At
Stargazers Count64.2k
Watchers Count1.5k
Fork Count8.7k
Commits Count16.8k
Has Issues Enabled
Issues Count9799
Issue Open Count147
Pull Requests Count4601
Pull Requests Open Count123
Pull Requests Close Count2023
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private

[![npm][npm]][npm-url]

[![node][node]][node-url]
[![deps][deps]][deps-url]
[![tests][tests]][tests-url]
[![builds][builds]][builds-url]
[![builds2][builds2]][builds2-url]
[![coverage][cover]][cover-url]
[![licenses][licenses]][licenses-url]
[![PR's welcome][prs]][prs-url]

Table of Contents

  1. Install
  2. Introduction
  3. Concepts
  4. Contributing
  5. Support
  6. Core Team
  7. Sponsoring
  8. Premium Partners
  9. Other Backers and Sponsors
  10. Gold Sponsors
  11. Silver Sponsors
  12. Bronze Sponsors
  13. Backers
  14. Special Thanks

Install with npm:

npm install --save-dev webpack

Install with yarn:

yarn add webpack --dev

webpack is a bundler for modules. The main purpose is to bundle JavaScript
files for usage in a browser, yet it is also capable of transforming, bundling,
or packaging just about any resource or asset.

TL;DR

  • Bundles ES Modules, CommonJS, and AMD modules (even combined).
  • Can create a single bundle or multiple chunks that are asynchronously loaded at runtime (to reduce initial loading time).
  • Dependencies are resolved during compilation, reducing the runtime size.
  • Loaders can preprocess files while compiling, e.g. TypeScript to JavaScript, Handlebars strings to compiled functions, images to Base64, etc.
  • Highly modular plugin system to do whatever else your application requires.

Get Started

Check out webpack's quick Get Started guide and the other guides.

Browser Compatibility

webpack supports all browsers that are ES5-compliant (IE8 and below are not supported).
webpack also needs Promise for import() and require.ensure(). If you want to support older browsers, you will need to load a polyfill before using these expressions.

Plugins

webpack has a rich plugin
interface
. Most of the features
within webpack itself use this plugin interface. This makes webpack very
flexible.

To the top