上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

[油猴脚本开发指南]CMD简单介绍

[复制链接]
  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    637

    主题

    5196

    回帖

    6078

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6078

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2022-9-12 01:45:32 | 显示全部楼层 | 阅读模式

    前文

    CMD表示Common Module Definition
    通用模块定义
    该规范由国内发展而来
    由玉伯提出
    其浏览器实现为Sea.js

    批注

    Sea.js说实话是我见过最疯狂最黑科技的库了
    每次看到相关的文章都感觉头皮发麻

    使用

    参考
    https://seajs.github.io/seajs/docs/#quick-start
    入口执行

    seajs.config({
      base: "../sea-modules/",
      alias: {
        "jquery": "jquery/jquery/1.10.1/jquery.js"
      }
    })
    
    // 加载入口模块
    seajs.use("../static/hello/src/main")

    使用seajs.config进行配置
    然后使用seajs.use调用入口模块
    声明模块也与amd类似
    如果没有配置则默认为同目录文件名

    // 所有模块都通过 define 来定义
    define(function(require, exports, module) {
    
      // 通过 require 引入依赖
      var $ = require('jquery');
      var Spinning = require('./spinning');
    
      // 通过 exports 对外提供接口
      exports.doSomething = ...
    
      // 或者通过 module.exports 提供整个接口
      module.exports = ...
    
    });

    有一个require引入依赖,export用来导出依赖,也可以通过module.exports导出模块

    加载异步模块

    使用require.async
    加载完毕后使用回调函数

    define(function(require, exports, module) {
      require.async(['./a', './b'], function(a, b) {
      });
    });

    使用方式还是很简单的,如果你看懂了说明你已经学会了本节
    关于更多可以参考
    https://www.zhangxinxu.com/sp/seajs/docs/zh-cn/module-definition.html#require-async
    https://seajs.github.io/seajs/docs/
    如果你仍然学有余力
    那让我们进入加强篇

    加强篇-十全大补丸

    你可能很好奇
    require('jquery')这句话
    为什么就可以同步执行并且拿到对应的数据
    我们查阅一下资料可以找到
    https://www.zhihu.com/question/20342350/answer/32484869
    实际上原理是通过Function.tostring匹配出来对应的模块
    然后解析模块路径,反复执行该过程
    最后解析到最里层模块
    然后还是执行我们一开始的调用函数
    其实现过程堪称疯狂
    而竟然是2013年的库
    关于该部分在
    https://github.com/seajs/seajs/issues/259
    也有一些影子
    要求必须使用require、不能二次赋值require、必须使用常量等
    我只能说太他妈酷了
    (确实如知乎的卢勃大佬所言、官方没顺口提到这个问题还是挺蛋疼的,第一眼看的时候懵了好久...但是真的很惊艳于想出这种想法)

    引用

    https://www.cnblogs.com/xiaohuochai/p/6879432.html
    https://seajs.github.io/seajs/docs/#quick-start
    https://www.zhihu.com/question/20342350/answer/32484869

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表