美文网首页
webpack核心原理二:源码

webpack核心原理二:源码

作者: 谢玉胜 | 来源:发表于2020-07-23 17:57 被阅读0次

    思路

    1. 递归的解析出模块之间的关系
    2. babel编译转换各模块的语法
    3. 生成浏览器端可执行的js文件 bundle.js

    执行

    1. 首先我们要创建默认配置文件 webpack.config.js
    const path = require("path")
    
    //基础的默认的配置
    module.exports = {
      entry: "./src/index.js",
      output: {
          filename: "main.js",
          path: path.resolve(__dirname,"./dist")
      }
    }
    
    1. 根据这个配置创建相关的文件
    2. 创建启动文件 webpack.js
      //启动webpack node webpack.js
    
    
    const options = require('./webpack.config.js')
    
    // 编译器Complier
     const Complier = require('./lib/complier')
    
     new Complier(options).run();
    

    这里我们创建了一个编译器类Complier ,然后将配置传入
    执行

    node webpack
    
    4331595415375_.pic.jpg

    数据结构格式

    最终执行生成可执行文件(复制到浏览器的控制台运行)

      (function(graph){
            function require(module){
                
                function localRequire(relativePath){
                   return require(graph[module].dependencies[relativePath])
                }
    
                var exports = {};
    
                (function(require,exports,code){
                    eval(code)
                })(localRequire,exports,graph[module].code)
    
                console.log("111",exports)
    
                return exports;
            }
            require('./src/index.js') //./src/index.js
    
            console.log("graph",graph)
        })({"./src/index.js":{"dependencies":{"./hello.js":"./src/hello.js"},"code":"\"use strict\";\n\nvar _hello = require(\"./hello.js\");\n\n//基本思路\n// 获取配置(webpack的默认配置) 根据配置启动webpack 执行\n//   1. 从入口的模块开始分析\n//    \t!有哪些依赖\n//    \t!转换代码   \t这里通过bable去转换\n//   2. 递归的分析相关的模块,有哪些依赖,转换代码\n//   3. 生成浏览器\t端可以执行的bundle文件\ndocument.write(\"Hello\" + (0, _hello.say)(\"webpack\"));"},"./src/hello.js":{"dependencies":{"./add.js":"./src/add.js"},"code":"\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.say = void 0;\n\nvar _add = require(\"./add.js\");\n\nvar say = function say(str) {\n  return str + (0, _add.add)();\n};\n\nexports.say = say;"},"./src/add.js":{"dependencies":{},"code":"\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.add = void 0;\n\nvar add = function add() {\n  return \"我是模块三\";\n};\n\nexports.add = add;"}})
    
    

    全部源码:https://github.com/allenxieyusheng/my-webpack

    相关文章

      网友评论

          本文标题:webpack核心原理二:源码

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