前端模块化-实现mini-webpack

前言

本文总结如何实现一个简单的打包器 mini-webpack

本节对应的 demo 可以在这里找到。

需求分析

假设我们有一个 index.js 文件,内容如下:

const {
   
    add } = rquire("./add.js");
console.log(add(1, 2));

对应的 add.js 文件内容如下:

function add(a, b) {
   
   
  return a + b;
}

module.exports = {
   
   
  add,
};

我们需要将这两个文件打包成一个文件,可以在 index.html 中引入并在浏览器运行,该如何做到呢?

代码实现

一种简单的实现方式是,将 index.js 和 add.js 文件内容拼接成一个字符串。

// src/index.js
const {
   
    add } = rquire("./add.js");
console.log(add(1, 2));

// src/add.js
function add(a, b) {
   
   
  return a + b;
}

module.exports = {
   
   
  add,
};

但是这样会存在一些问题:

  • 浏览器中并不支持 require 语法
  • 原先文件天然对变量进行了隔离,合并成一个文件后变量没有隔离,容易造成命名冲突

因此我们可以考虑在外面加一层自执行函数,将 require 语法转换成浏览器支持的语法,同时将变量隔离起来。

// src/index.js
function Index(require, module, exports) {
   
   
  const {
   
    add } = rquire("./add.js");
  console.log(add(1, 2));
}

function Add(require, module, exports) {
   
   
  // src/add.js
  function add(a, b) {
   
   
    return a + b;
  }

  module.exports = {
   
   
    add,
  };
}

// 定义require函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值