美文网首页
webpack打包后的文件如何在浏览器中运行

webpack打包后的文件如何在浏览器中运行

作者: babyyaqi | 来源:发表于2018-03-17 16:05 被阅读627次

    一起探索最真实的世界

    webpack是啥

    webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。
    webpack

    最简单的🌰

    const path = require('path');
    
    module.exports = {
      // JS 执行入口文件
      entry: './main.js',
      output: {
        // 把所有依赖的模块合并输出到一个 bundle.js 文件
        filename: 'bundle.js',
        // 输出文件都放到 dist 目录下
        path: path.resolve(__dirname, './dist'),
      }
    };
    

    以上是webpack.config.js的配置,非常简单,只配置了entry(入口)和ouput(输出)
    我们的目录如下

    |-- index.html
    |-- main.js
    |-- show.js
    |-- webpack.config.js
    

    index.html

    <html>
    <head>
      <meta charset="UTF-8">
    </head>
    <body>
    <div id="app"></div>
    <!--导入 webpack 输出的 JS 文件-->
    <script src="./dist/bundle.js"></script>
    </body>
    </html>
    

    main.js

    // 通过 CommonJS 规范导入 show 函数
    const show = require('./show.js');
    // 执行 show 函数
    show('Webpack');
    

    show.js

    // 操作 DOM 元素,把 content 显示到网页上
    function show(content) {
      window.document.getElementById('app').innerText = 'Hello,' + content;
    }
    
    // 通过 CommonJS 规范导出 show 函数
    module.exports = show;
    

    运行下

    webpack

    webpack打包后,根目录下dist目录下

    |-- dist/
    |---- bundle.s
    

    bundel.js

     (function (modules) { 
       //  webpack启动函数,modules就是webpack根据入口文件进行依赖解析后的模块数组,每个模块都是一个函数
      
       // 模块缓存数组,记录已经加载的模块
       var installedModules = {};
    
       // 加载函数
       function __webpack_require__(moduleId) {
    
         // 检测是否已经加载
         if (installedModules[moduleId]) {
           return installedModules[moduleId].exports;
         }
         // 根据模块id创建一个模块module,并且存入模块缓存数组
         var module = installedModules[moduleId] = {
           i: moduleId,
           l: false,
           exports: {}
         };
    
         // 执行传入的模块数组中modules[moduleId]
         modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
    
         // 模块加载状态置为true
         module.l = true;
    
         // 返回module的exports,这边就是各个模块定义的返回内容
         return module.exports;
       }
    
       // 加载入口模块,返回入口模块的module.exports
       return __webpack_require__(__webpack_require__.s = 0);
     })
    
     ([
       /* 0 */
       (function (module, exports, __webpack_require__) {
    
         // 通过 CommonJS 规范导入 show 函数
         const show = __webpack_require__(1);
         // 执行 show 函数
         show('Webpack');
    
       }),
       /* 1 */
       (function (module, exports) {
    
         // 操作 DOM 元素,把 content 显示到网页上
         function show(content) {
           window.document.getElementById('app').innerText = 'Hello,' + content;
         }
    
         // 通过 CommonJS 规范导出 show 函数
         module.exports = show;
    
    
       })
     ]);
    

    从上面打包之后的代码可以看出,webpack把我们的文件分成了不同的模块函数,初始加载入口模块函数,然后将加载后的模块函数进行缓存,每个模块函数加载后的返回值就是我们模块对外暴露的对象,这样就可以被其它模块进行使用,至此,这就是最简单的同步加载使用场景

    下一篇我们一起看webpack如何异步加载模块

    相关文章

      网友评论

          本文标题:webpack打包后的文件如何在浏览器中运行

          本文链接:https://www.haomeiwen.com/subject/tafjqftx.html