当前位置: 首页 > news >正文

工具链和其他-异步模块加载

目录

CMD/AMD

Asynchronous Module Definition(AMD异步模块定义,语法风格)

Common Module Definition

ES6/CommonJS

CommonJS

ES6 Module

加载器示例

总结


cmd和amd的区别

现在有哪些异步加载方式

整体结构

编程:commonjs es6 module (有可能解析不了,需要传输层)

传输:cmd/amd(早期是异步加载模块用的,不是一个中间层;现在是一个加载模块,不把程序写在里面)

执行:require.js webpack模块加载器......(异步加载器)

CMD/AMD

Asynchronous Module Definition(AMD异步模块定义,语法风格)

amd不是一个很好的设计

// 模块创建
// a.js
define(['functions/foo'], (foo) => { // 数组:依赖foo——文件在functions/fooconsole.log(foo())
})
// 模块使用
// a.js
//         数组代表所有依赖                函数接收所有依赖
require(['jquery', 'a.js'], ($, printFoo) => {$("#foo").click(()=> {printFoo()    })
})

Common Module Definition

// 模块使用
// a.js
define((require, exports) => {function printFoo() {const foo = require('./foo') // 声明后置console.log(foo())    }exports = printFoo // 声明后置 用到在声明
})
// 模块使用
// a.js
use((require) => {const $ = require('jquery') // 同步模型,异步的话可以用asyns await,promiseconst printFoo = require('./a.js')$("#foo").click(() => {printFoo()    })
})

ES6/CommonJS

CommonJS

node支持

浏览器访问转义为浏览器可解读的cmd

// 模块使用
// a.js
function A(){...}
module.exports = A
// 模块引用
const A = require("./a.js")
A()

ES6 Module

// 模块使用
// a.js
function A(){...}
export default A
// 模块引用
import A from './a.js'
A()

加载器示例

const express = require('express')
const app = express() 
const path = require('path')
app.use(express.static(path.resolve(__dirname, 'lib')))
app.get('/', (req, res) => {res.send(`<html><body><script src='/require.js' ></script><script>require.path = '/'require(['add', 'mult'], (add, mult) => {console.log(add(3, 5))console.log(mult(3, 5))})</script></body></html>`)
})
app.listen(3000)
// add.js
define('add', (a, b) => {return a + b
})
// mult.js
define('mult', (a, b) => {return a * b
})

总结

  • CMD/AMD:底层建设 (浏览器用的)
  • CommonJS/ES6 Module: 书写规范
http://www.lryc.cn/news/62731.html

相关文章:

  • 第一次使用R语言
  • 《语文教学通讯》栏目 收稿范围
  • Towards Principled Disentanglement for Domain Generalization
  • 计算机网络学习02
  • 网络交换机端口管理工具
  • redis五大命令kv设计建议内存淘汰
  • 如何真正认识 Linux 系统结构?这篇文章告诉你
  • 【移动端网页布局】流式布局案例 ① ( 视口标签设置 | CSS 样式文件设置 | 布局宽度设置 | 设置最大宽度 | 设置最小宽度 )
  • 力扣---LeetCode88. 合并两个有序数组
  • H7-TOOL的CANFD Trace全解析功能制作完成,历时一个月(2023-04-28)
  • 探析Android中的四类性能优化
  • ubuntu18.04 安装编译zlmediakit
  • C++ -5- 内存管理
  • (Linux)在Ubuntu系统中添加新用户并授予root权限
  • AttributeError: ‘ChatGLMModel‘ object has no attribute ‘prefix_encoder‘
  • Huggingface的GenerationConfig 中的top_k与top_p详细解读
  • 学生信息管理系统简易版(文件读写操作)
  • C/C++每日一练(20230426)
  • halcon灰度积分投影/垂直积分投影
  • Unity打包的apk在安卓4.4.2盒子上碰到的问题
  • docker的简单使用(centos7中为例)
  • Stable Diffusion人工智能图像合成
  • 【Java EE】-CSS详解
  • C#_语言简介
  • 【Python_Opencv图像处理框架】直方图与傅里叶变换
  • Know-Evolve: Deep Temporal Reasoning for Dynamic Knowledge Graphs
  • 电脑高效率工作、学习工具软件推荐
  • Java8新特性函数式编程 - Lambda、Stream流、Optional
  • AutoGPT安装教程
  • 轻量级服务器nginx:负载均衡