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

后盾人JS -- 模块化开发

 开发模块管理引擎

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        let module = (function(){
            const moduleList = {}
            function define(name,modules,action){
                modules.map((m,i)=>{
                   modules[i] = moduleList[m]
                })
                moduleList[name] = action.apply(null,modules)
            }
            return {define}
        })()
        module.define("hd",[],function(){
            return{
                first(arr){
                    return arr[0]
                },
                max(arr,key){
                    return arr.sort((a,b)=>b[key]-a[key])[0]
                }
            }
        })
        module.define("lesson",["hd"],function(hd){
            let data = [
                {name:"js",price:199},{name:"mysql",price:78}
            ]
            hd.max(data,"price")
        })
        module.define("a",[],function(a){
            return{
                site:"后盾人",
                url:"houdunren.com"
            }
        })
        module.define("b",["a"],function(a){
            a.site = "hdcms"
        })
        module.define("c",["a"],function(a){
            console.log(a)
        })
    </script>
</body>
</html>

模块的基本使用

模块基本使用.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script type="module">
        import { title, url, show } from "./hd.js"   //这个路径必须写
        console.log(url)
    </script>
</body>

</html>

hd.js

let title = "后盾人"
let url = "houdunren.com"
function show() {
    console.log("我了个豆")
}
export{title,url,show}   //把url开放

模块延迟解析与严格模式

使用模块的时候默认就是严格模式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button>后盾人</button>
    <script type="module">
        import {}from"./hd.js"
        console.log(this)
    </script>
    <script>
        console.log(this)
    </script>
</body>
</html>

作用域在模块中的体现

只有导出接口才可以正常的使用私有

解析只会发生一次,可以减少解析时间,避免解析的错误

模块的具名导出与导入

模块的导入要有名字,没有名字会报错

如果有很多的接口需要导入的话,可以这样写:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script type="module">
        import * as api from "./hd.js"
        console.log(api.url)
        console.log(api.show())
    </script>
</body>
</html>

如果有的导入了但是没有使用也会被裁剪掉

别名使用

import {site as s}from "./hd.js"

这就是别名的使用(主要是简洁)

default默认导出

这是default默认导出,接收的时候使用默认导出的数据

export default function show() {
    console.log("我了个豆")
}

混合导入导出

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script type="module">
        import * as api from "./hd.js"
        console.log(api.default.show())
        console.log(api.url)
    </script>
</body>
</html>
let title = "后盾人"
let url = "houdunren.com"
export default
{
    show
} 
function show() {
    console.log("我了个豆")
}
export{title,url}   //把url开放 

最好使用具名导出,默认导出的时候最好按照原来的模块起名字

动态模块加载

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        import("./hd.js").then(module =>{
            console.log(module)
        })
    </script>
</body>
</html>

WEBPACK

WEBPACK是打包工具

把一堆js文件打包成文件夹15:

执行完这个init就产生了一个.json(配置文件)

这是安装:

点开配置文件添加一个命令:

"dev" : "webpack --mode development --watch"

 index.js是入口文件

因为添加过命令了,所以可以直接

进行编译

编译好之后就可以引入了


http://www.kler.cn/a/541649.html

相关文章:

  • Lombok使用指南
  • [2025年最新]2024.3版本idea无法安装插件问题解决
  • Qt通过FFmpeg打开RTSP并截图一帧作为背景
  • 程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<8>
  • Json-RPC框架项目(一)
  • 日志2025.2.9
  • 小游戏源码开发之可跨app软件对接是如何设计和开发的
  • Flutter_学习记录_基本组件的使用记录_2
  • 后盾人JS -- 异步编程,宏任务与微任务
  • HTML之JavaScript对象声明
  • MySQL下载过程
  • Flink内存配置和优化
  • 五十天精通硬件设计第27天-时域频域知识
  • Django中select_related 的作用
  • C++适用于所有输入法的解决方案(切换输入法)
  • GPIO函数详解(二)
  • pytest测试专题 - 1.2 如何获得美观的测试报告
  • 【Vue中BUG解决】npm error path git
  • ThreadLocal 原理?需要注意什么?
  • 自动控制视频讲解
  • CCFCSP备考第二天
  • 2.协同过滤算法
  • 第四期书生大模型实战营-第4关-L2G4000
  • 【RabbitMQ的监听器容器Simple和Direct】 实现和场景区别
  • 计算机视觉的研究方向、发展历程、发展前景介绍
  • Java网络编程学习(一)