试图理解 Webpack

Trying to understand Webpack

我是一名 HTML/CSS/PHP/MYSQL 程序员,现在正在努力学习一些 javascript。我通过挖掘我当前使用的网络邮件的代码(开源)并试图了解它是如何工作的来做到这一点的。我试图了解页面的不同部分是如何加载的(如果不重新加载页面,您将进入 PHP)。如果我没记错的话,它正在使用 webpack 来做到这一点。如果我没记错的话,页面的每一部分都作为一个模块加载。

/******/ (function(modules) { // webpackBootstrap
/******/    // The module cache
/******/    var installedModules = {};
/******/
/******/    // The require function
/******/    function __webpack_require__(moduleId) {
/******/
/******/        // Check if module is in cache
/******/        if(installedModules[moduleId])
/******/            return installedModules[moduleId].exports;
/******/
/******/        // Create a new module (and put it into the cache)
/******/        var module = installedModules[moduleId] = {
/******/            exports: {},
/******/            id: moduleId,
/******/            loaded: false
/******/        };
/******/
/******/        // Execute the module function
/******/        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/        // Flag the module as loaded
/******/        module.loaded = true;
/******/
/******/        // Return the exports of the module
/******/        return module.exports;
/******/    }
/******/
/******/
/******/    // expose the modules object (__webpack_modules__)
/******/    __webpack_require__.m = modules;
/******/
/******/    // expose the module cache
/******/    __webpack_require__.c = installedModules;
/******/
/******/    // __webpack_public_path__
/******/    __webpack_require__.p = "webmail/v/0.0.0/static/js/";
/******/
/******/    // Load entry module and return exports
/******/    return __webpack_require__(0);
/******/ })

这似乎是使这种魔法成为可能的(部分)代码。现在,稍后在代码中 webpack 是这样使用的:

AbstractSystemDropDownUserView.prototype.settingsClick = function ()
{
    __webpack_require__(/*! Knoin/Knoin */ 5).setHash(Links.settings());
};

如果我没记错的话,这个函数会在点击 settingsClick 按钮时加载一个模块。但是,模块编号 defined/assigned 在哪里?

非常感谢任何帮助我上路的人!

Webpack 从一个主要的 JS 文件开始,其配置的插件(允许在其中需要额外的资源),将这些资源编译成一个合并的脚本,以及当 JS 或 CSS 变化。奇怪的是,如果您查看项目的源代码,它将被设置为使用 require 或 ES6 样式模块 import/export 指令的多个 CommonJS/Node-Style 模块。

一些开始的地方:

您还应该看看:

  • Introduction to NPM - NPM 是您可能想要使用的大多数模块所在的位置。
  • NodeJS - 服务器端 JS 环境,大多数这些工具 运行 通过节点。
  • Browserify - Webpack 几乎是 browserify + 更多,您可能更喜欢更直接的方法
  • Gulp - Gulp 是一个基于流的构建工具,webpack 有自己的工具,但值得一看以获取更多想法。
  • BabelJS - 以前的 6to5 - 让您在今天的浏览器中使用现代 JS 功能。
  • ES5 Shims - 如果您需要支持 IE8,则需要这些。

Webpack 依赖于 node/iojs 的模块和工具,它也类似于带有附加功能的 browserify。