webpack简易的实现

webpack是前端的一种打包工具,可以把所有的资源(图片,css,js)打包成js。

模块式是把一个复杂的系统分解成多个模块方便统一管理

命名空间已经满足不了现今的前端开发项目管理的需求

- 命名空间可能会冲突,多个库可能会出现相同的命名空间

- 无法合理的管理项目依赖和版本

- 无法方便的控制依赖的加载顺序

模块化的几种方式

  1. commonJS规范

主要在nodejs体现的明显,是一种服务器端的模块化规范,核心思想是通过'require'方法来同步的加载依赖的其他模块,通过module.exports导出需要暴露的接口

用法

//导入
const moduleA = require('./moduleA');

//导出
module.exports = '.......'

//commonjs 的简易实现
let fs = require('fs');

function req (moduleName) {
  //content 代表的是内容
  let content = fs.readFileSync(moduleName, 'utf8');
  console.log(content);
  //最后一个参数是函数体
  let fn = new Function('exports', 'module', 'require', '__dirname', '__filename', content + '\n return module.exports')
  let module = {
    exports: {},
  }
  return fn(module.exports, module, req, __dirname, __filename);

  /* 
    function fn(exports,module,require,__dirname,__filename){
      module.exports = '这是一个模块的内容';
      return module.exports
    }
  
  */
}

2.AMD模块规范

也是一种js模块规范,与Commonjs最大的区别是它采用的是异步的方式去加载依赖的模块。AMD规范主要是为了解决针对浏览器端的模块化问题,主要的代表是requirejs。

优点:

- 可以在不转化代码的情况下,直接在浏览器端执行

- 可以加载多个依赖

-代码可以运行在浏览器环境和nodejs环境下

//define声明模块,通过require使用一个模块
let factories = {};
//参数-> 模块的名字,依赖,工厂函数
function define (moduleName, dependencies, factory) {
  factory.dependencies = dependencies; //将依赖记到factory 上
  factories[moduleName] = factory;
}

function require (mods, callback) {
  let result = mods.map(function (mod) {  //name,age
    let factory = factories[mod];
    let exports;
    let dependencies = factory.dependencies;
    require(dependencies, function () {
      exports = factory.apply(null, arguments)
    })
    return exports;
  })

  callback.apply(null, result)
}

define('name', [], function (require, factory) {
  return "小明"
});

define('age', ['name'], function (name) {
  return name + 30;
});

require(['name', 'age'], function (name, age) {
  console.log(name, age)
})

3.es6模块化

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值