美文网首页JavaScript初探
CommonJS规范与AMD、UMD、ES6

CommonJS规范与AMD、UMD、ES6

作者: 雷雨leiyu | 来源:发表于2021-05-11 14:48 被阅读0次

读前两个疑问:一动态编译与静态编译对规范的影响,二是模块值的引用与值的拷贝的区别。

  • CommonJS规范:该规范主要应用用服务器端,一个文件就是一个模块,Nodejs就是采用的CommonJS规范(动态编译);
  • AMD规范: 全称为Asynchronous Module Definition,中文为异步模块定义,采用异步方式加载模块,适合在浏览器中使用,RequireJS采用的AMD规范;
  • UMD规范:全称为Universal Module Definition,中文为通用模块定义,主要是为了解决CommonJS与AMD不能通用的问题;
  • ES Module:是JavaScript官方提供的标准化模块系统(静态编译);

CommonJS模式

  • module.exports用于规范模块对外接口,exports是module.exports的一个引用;
  • require用于加载外部模块,加载的是值的拷贝并且在加载后不能改变,同时缓存起来;
  • CommonJS采用同步加载模块,所以适合加载本地服务器资源,而在浏览器端受网络影响不适合采用;
const moment = require('moment')
module.exports = {
  now: () => {
    return moment.format('YYYY MM DD')
  }
}

AMD规范

  • define是一个全局函数,用来定义模块,define.amd属性是一个对象标明遵循AMD规范;
  • 模块定义:define(?, dependencies, factory)
  • require用于加载外部模块;
  • return用于规范模块的对外接口;
// 定义dog.js
define(function () {
  console.log("狗狗")
  return {
    say: () => "我是一条狗"
  }
})
// 定义main.js
define(function(require) {
  var dog = require('./dog')
  console.log(dog.say())
})
// index.html引用
<script src="https://cdn.bootcss.com/require.js/2.3.6/require.min.js"></script>
<script>
// main.js在当前目录
requirejs(["main"])
</script>

UMD规范

  • 通过define.amd对象来判断是否是AMD规范;
  • 通过exports或者module.exports来判断是否是CommonJS规范;
  • 如果不是以上两者则被认为是原始的JavaScript规范;
  • UMD支持老式的全局变量规范;
// bundle.js
(function(global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
    typeof define === 'function' && define.amd ? define(factory):
      (global = global || self, global.run = factory())
}) (this, (function() {
  return () => "hello world"
}))
// index.html
<script src="bundle.js"></script>
<script>
  console.log(run());
</script>

ES Module规范

  • 同时兼容在浏览器和node环境中运行;
  • 导入导出通过import和export来实现;
  • ES Module输出的是值的引用,而CommonJS输出的是值的拷贝;
  • ES Module是在编译时执行,而CommonJS总是在运行时加载;
// demo.js
export default {
  run: () => "hello world"
}
// index.js
import demo from "./demo.js"
console.log(demo.run())

相关文章

  • JS模块化

    模块化规范:CommonJS,AMD,CMD,UMD,ES6 Module CommonJS CommonJS是服...

  • JS的各种模块化规范

    AMD CMD CommonJs UMD ES6 一路演进 AMD 异步模块定义规范(Asynchron...

  • CommonJS规范与AMD、UMD、ES6

    读前两个疑问:一动态编译与静态编译对规范的影响,二是模块值的引用与值的拷贝的区别。 CommonJS规范:该规范主...

  • 模块(二) es6 module typescript modu

    系列文章导航 模块(一) CommonJs,AMD, CMD, UMD 本文参考阮一峰 ES6入门 Module的...

  • AMD CommonJS 和 UMD

    在 ESM 之前,前端常用的模块规范有 AMD,CommonJS 以及 UMD,其中 AMD 是浏览器端的 Jav...

  • gulp-babel

    因amd和commonjs都是require转换时默认commonjs,如需AMD转换,也可以填写UMD

  • js模块化

    js的模块化大致分为4种规范 amd cmd commonjs 和es6模块化 1.amd规范 amd规范又叫异步...

  • Webpack 个人理解的脑图

    Webpack 特色 模块规范 Webpack 同时支持 AMD 、 CommonJS 和 ES6 module ...

  • ES6 模块,CommonJS,AMD,CMD,UMD之间的区别

    很多人分不清ES6模块,CommonJS,AMD,CMD,UMD,今天就从特性和使用,来说一下,他们之间的区别. ...

  • ES6学习(14)模块化

    ES6 之前的模块化规范有:CommonJS => NodeJS、Browserify;AMD => requir...

网友评论

    本文标题:CommonJS规范与AMD、UMD、ES6

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