webpack 是一个模块打包器,主要目的是在浏览器上打包 JavaScript 文件。
原理
特性
打包 CommonJs 和 AMD 模块(以及绑定)
可创建单个或多个按需加载的块,以减少初始加载时间
在编译期间会解决依赖关系,减少了运行时的大小
加载器可以在编译时预处理文件,如 coffee-script 到 javascript
示例代码
// webpack is a module bundler // This means webpack takes modules with dependencies // and emits static assets representing those modules. // dependencies can be written in CommonJs var commonjs = require("./commonjs"); // or in AMD define(["amd-module", "../file"], function(amdModule, file) { // while previous constructs are sync // this is async require(["big-module/big/file"], function(big) { // for async dependencies webpack splits // your application into multiple "chunks". // This part of your application is // loaded on demand (Code Splitting) var stuff = require("../my/stuff"); // "../my/stuff" is also loaded on demand // because it's in the callback function // of the AMD require }); }); require("coffee!./cup.coffee"); // "Loaders" can be used to preprocess files. // They can be prefixed in the require call // or configured in the configuration. require("./cup"); // This does the same when you add ".coffee" to the extensions // and configure the "coffee" loader for /\.coffee$/ function loadTemplate(name) { return require("./templates/" + name + ".jade"); // many expressions are supported in require calls // a clever parser extracts information and concludes // that everything in "./templates" that matches // /\.jade$/ should be included in the bundle, as it // can be required. } // ... and you can combine everything function loadTemplateAsync(name, callback) { require(["bundle?lazy!./templates/" + name + ".jade"], function(templateBundle) { templateBundle(callback); }); }