首页 > 其他分享 >js模块规范

js模块规范

时间:2023-09-11 16:32:04浏览次数:29  
标签:function AMD exports 规范 module js 模块

1. commonJS:

(1). 特点: 模块加载会阻塞接下来代码的执行,需要等到模块加载完成才能继续执行(同步加载).

(2). 场景:

  • 环境:服务器环境
  • 应用

(3). 语法:

  • 导入: a. require('路径')
  • 导出: a. module.exports和exports b. exports只是对module.exports的一个引用: (1). 相当于Node为每个模块提供一个exports变量,指向module.exports. (2). 类似在每个模块头部,有一行var exports = module.exports

(4). demo:

// a.js
// 相当于这里还有一行:var exports = module.exports;代码
exports.a = 'Hello world';  // 相当于:module.exports.a = 'Hello world';

// b.js
var moduleA = require('./a.js');
console.log(moduleA.a);     // 打印出hello world

2. AMD:

(1). 特点:

  • 异步加载
  • 管理模块之间的依赖性,便于代码的编写和维护

(2). 场景:

  • 环境:浏览器环境
  • 应用:requireJS是参照AMD规范实现的

(3). 语法:

①. 导入:
    a. require(['模块名称'], function ('模块变量引用'){
         // 代码
       });

②. 导出:
    a. define(function () {
         return '值'
       });

(4). demo:

// a.js
define(function (){
  return {
   a:'hello world'
  }
});

// b.js
require(['./a.js'], function (moduleA){
    console.log(moduleA.a); // 打印出:hello world
});

3. CMD:

(1). 特点:

  • CMD在AMD基础上改进的一种规范.
  • 和AMD不同在于对依赖模块的执行时机处理不同: a. CMD是就近依赖 b. AMD是前置依赖

(2). 场景:

  • 环境:浏览器环境
  • 应用: a. seajs是参照UMD规范实现的 b. requireJS的最新的几个版本也是部分参照了UMD规范的实现

(3). 语法:

①. 导入:
    a. define(function(require, exports, module) {});

②. 导出:
    a. define(function (){ return '值' );

(4). demo:

// a.js
define(function (require, exports, module){
  exports.a = 'hello world';
});
// b.js
define(function (require, exports, module){
    var moduleA = require('./a.js');
    console.log(moduleA.a); // 打印出:hello world
});

4. UMD:

(1). 特点:

  • 通用模块定义规范(Universal Module Definition): a. 通过运行时或者编译时让同一个代码模块在使用CommonJs、CMD、AMD的项目中运行.
  • 兼容AMD和commonJS规范的同时,还兼容全局引用的方式.

(2). 场景:

  • 环境: 浏览器或服务器环境

(3). 语法:

①. 无导入导出规范,只有如下的一个常规写法:
    (function (root, factory) {
        if (typeof define === 'function' && define.amd) {
            //AMD
            define(['jquery'], factory);
        } else if (typeof exports === 'object') {
            //Node, CommonJS之类的
            module.exports = factory(require('jquery'));
        } else {
            //浏览器全局变量(root 即 window)
            root.returnExports = factory(root.jQuery);
        }
    }(this, function ($) {
        //方法
        function myFunc(){};
        //暴露公共方法
        return myFunc;
    }));

5. ES6 module:

(1). 特点:

  • 按需加载(编译时加载)
  • import和export命令只能在模块的顶层,不能在代码块之中
  • import()语句可以在代码块中实现异步动态按需动态加载

(2). 场景:

  • 环境:浏览器或服务器环境
  • 应用: a. Es6的最新语法支持规范

(3). 语法:

①. 导入:
    a. import {模块名A, 模块名B...} from '模块路径'

②. 导出:
    a. export和export default:
       (1). export只支持对象形式导出,不支持值的导出
       (2). export default命令:
            1. 用于指定模块的默认输出,只支持值导出,但只能指定一个
            2. 本质上它就是输出一个叫做default的变量或方法.

6. 总结:

  • 浏览器端: a. AMD(异步模块规范) - RequireJs b. CMD(普通模块规范) - SeaJs
  • Node端: a. CommonJs(同步模块规范)
  • 浏览器和Node兼容端: a. UMD(通用模块规范)

标签:function,AMD,exports,规范,module,js,模块
From: https://blog.51cto.com/u_16237074/7436834

相关文章

  • APK打包 output-metadata.json‘ which doesn‘t exist.
    自定义apk输出路径打包时,出现这个bugAproblemwasfoundwiththeconfigurationoftask':app:createReleaseApkListingFileRedirect'(type'ListingFileRedirectTask').-Inplugin'com.android.internal.version-check'type'com.android.bu......
  • python PEP8代码规范
    1.PEP8:W191indentation contains tabs因为粘贴来的代码用tab缩进,而现在的代码用space当缩进解决办法方法一:Edit->ConvertIndents->ToSpaces方法二:ctrl+shift+A=>在弹出的窗口中输入“ToSpaces”就可以将所有的tab转为space方法三:Code->R......
  • Web攻防--JNDI注入--Log4j漏洞--Fastjson反序列化漏洞
    JNDI注入什么是JNDIJNDI全称为JavaNamingandDirectoryInterface(Java命名和目录接口),是一组应用程序接口,为开发人员查找和访问各种资源提供了统一的通用接口,可以用来定义用户、网络、机器、对象和服务等各种资源。JNDI支持的服务主要有:DNS、LDAP、CORBA、RMI等。简单从安全......
  • 软件测试|好用的pycharm插件推荐(二)—— JSON Parser
    简介PyCharm是一款强大的Python集成开发环境(IDE),它提供了许多插件来增强开发体验。其中一个非常有用的插件是"JSONParser",它允许你在PyCharm中轻松解析和处理JSON数据。在本文中,我们将详细介绍如何安装和使用PyCharmJSONParser插件。安装JSONParser插件打开PyCharmIDE,并点击顶......
  • 大屏屏幕自适应大小的JS写法
    本项目用的是vue开发,首先需要定义一下根节点app节点的大小,这里用1920的默认宽度定义<style>#app{width:1920px;margin:0auto;transform:scale(1);transform-origin:00;}</style>js部分通过缩放的写法去在......
  • Lnton羚通视频分析算法开发平台关于AI智能识别操作行为流程规范识别算法分析展示
    Lnton羚通的算法算力云平台是一款优秀的解决方案,具有突出的特点。它提供高性能、高可靠性、高可扩展性和低成本的特性,使用户能够高效地执行复杂计算任务。此外,平台还提供丰富的算法库和工具,并支持用户上传和部署自定义算法,提升了平台的灵活性和个性化能力。AI工人操作行为流程规范......
  • Js基础-循环语句
    循环语句在js当中主要用于重复做一件事情。js当中最主要的循环语句有三种,for循环,while循环和do-while循环forfor是一种经常被用到的循环结构例如:控制台循环打印1到10的数字//for括号后跟着三个表达式,三个表达式用分号(;)隔开//vari=0表示定义一个循环遍历变量,......
  • BOSHIDA EMC滤波器对DC电源模块影响有多大?
    BOSHIDAEMC滤波器对DC电源模块影响有多大?随着电子设备的广泛应用,EMC(电磁兼容性)问题越来越受到关注。而EMC滤波器作为一种常见的电路器件,其作用在于抑制电源的干扰和防止外界干扰的影响。在DC电源模块的设计中,EMC滤波器的作用十分重要。 EMC滤波器对DC电源模块的影响主要体现......
  • 【源码】Vue.js 官方脚手架 create-vue 是怎么实现的?
    Vue.js官方脚手架create-vue是怎么实现的?摘要本文共分为四个部分,系统解析了vue.js官方脚手架create-vue的实现细节。第一部分主要是一些准备工作,如源码下载、项目组织结构分析、依赖分析、功能点分析等;第二部分分析了create-vue脚手架是如何执行的,执行文件的生成细节......
  • js箭头函数
    箭头函数中this的行为与常规函数的this行为有很大不同。无论如何执行或在何处执行,箭头函数内部的this值始终等于外部函数的this值。换句话说,箭头函数可按词法解析this,箭头函数没有定义自己的执行上下文。(1).格式:参数=>表达式/语句leta=b=>b*2;leta=b=>{......