前端模块化规范

85 阅读2分钟

1、什么是模块化?什么是模块化规范?

模块化是一种管理方式,是一种生产方式,一种解决问题的方案。用一个模块去实现一个特定的功能,通过加载不同模块使用不同功能。但在使用模块开发时,一定要遵循一定的规范,因此就产生了模块化规范

2、为什么需要模块化开发和模块化规范?

当项目过大时,很容易产生变量、函数、对象命名冲突,而模块化可以解决命名冲突问题,而良好的模块化规范可以很好的降低代码耦合关系,提高代码扩展性、可维护性以及复用性,统一的模块化规范可以降低开发者的学习成本,并且提高开发效率

3、常见的模块化规范

3.1 CommonJS

CommonJS主要是Node.js使用,通过 require 同步加载模块, exports 导出内容。在CommonJS规范下,每个JS文件都是独立的模块,都有各自的作用域;可以在任意位置使用require导入,支持循环依赖; 注:浏览器端需要打包使用

// math.js
const PI = 3.1415926
function getSum(a, b) {
  return a + b
}

module.exports.PI = PI
module.exports.getSum = getSum

//main.js
const tool = require("./math")

function sum(){
  console.log(tool)  // { PI: 3.1415926, getSum: [Function: getSum] }
  console.log(tool.getSum(3, 4))  // 7
}

sum()

3.2 AMD (Asynchronous Module Definition)

AMD属于异步加载模块,用于解决浏览器端模块加载问题,因此主要用于浏览器端。通过关键字define定义模块,通过require异步加载

// math.js
define("tool", [], function() {
  const PI = 3.1415926
  function getSum(a ,b) {
    return a + b
  };
  return {
    PI,
    getSum
  }
});

// main.js
require(["tool"], function(tool) {
  console.log(tool.PI)
})

3.3 CMD (Common Module Definition)

CMD属于异步加载模块,同AMD一样主要用于浏览器端使用,也是通过definerequire异步加载模块;区别于AMD,CMD推崇依赖就近,而AMD推崇依赖前置

3.4 ESM(ECMAScript Module)

ESM是官方模块化规范,现代浏览器原生支持,通过import加载模块,export导出内容,在node环境同步加载,浏览器端异步加载,支持同步引用

// math.js  
const PI = 3.1415926;  
export const getSum = (a, b) => {  
return a + b;  
};  
  
// main.js  
import * as tool from "./math.js";  
console.log(tool.getSum(4, 5));