Javascript模块加载框架——seajs

2023-05-16

最近看了一些开源web的项目,发现其前台采用的框架seajs在编写JavaScript代码上很是方便,现将学习的记录记于此。

1.什么是JavaScript模块加载

为了解决不同javascript库里操作对象的命名冲突问题以及不同javascript库之间依赖的问题,对于大型的web前端应用来说,按需加载则是需要的。JavaScript模块加载即是按页面功能需要加载所需的js文件,又可以解决前端库之间因相互依赖渗透造成的错综复杂的关系,便于日后系统的维护升级,同时还可解决多个js文件间变量名称冲突的问题。
JavaScript模块加载框架结构通常如下:

  • 一个模块加载器文件。如loader.js 多个底层模块(如selector、ua等),
  • 多个业务模块(如dialog、suggest等)
  • 多个页面相关的脚本调用文件

JavaScript模块加载框架的优势:

  • 按需加载:只加载当前页面需要的模块和文件,不需加载任何多余文件和代码。大大缩减了代码量
  • 并行加载:很多loader提供了并行加载多个文件的功能,减少了代码加载的时间,优点能做到下载和执行相分离。
  • 利于团队开发:团队中每个人负责开发各自的模块,之间互不影响。
  • 最大限度的利用缓存:模块颗粒化后,每次更新可能只是其中一个小模块,其他未更新的可以利用浏览器中的缓存。

2.Seajs

SeaJS是一个遵循CMD规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制。
Seajs官方网址:http://seajs.org/docs/
Seajs源码github网址:https://github.com/seajs/seajs
Seajs简易文档网址:http://yslove.net/seajs/
可以从上述网址中下载seajs,深入学习seajs

下述的seajs的编码流程可以满足大部分的开发的,深入的seajs的使用可以到seajs官方文档(http://seajs.org/docs/#docs )中学习

1)html页面

<!DOCTYPE html>
<html xmlns:wb="http://open.weibo.com/wb">
<head>
    <title>地图</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="X-UA-Compatible" content="IE=8, IE=9,IE=edge">
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="Access-Control-Allow-Origin" content="*">
</head>
<style type="text/css">
html, body, #mapDiv {
    margin: 0;
    width: 100%;
    height: 100%;
}
</style>

<script src="js/seajs/sea.js"></script>
<script src="js/config.js"></script>
<script>
    seajs.use('./js/mytest/myopenlayertest');
</script>

<body>
<div class="map" id="mapDiv"></div>
</body>
</html>

首先需要引入seajs文件,在引入seajs后,则需要对seajs进行一些简单的配置,配置的内容我们放在了config.js文件中,这个后面介绍。
在正确配置好seajs后,我们则需要加载我们的业务js文件,同时运行里面的代码的时候了,我们需要使用seajs的函数use来进行模块加载,如上述代码中的这句 seajs.use(‘./js/mytest/myopenlayertest’);来进行调用。

2)seajs配置

//seajs 的简单配置
seajs.config({
  base: "./js/",
  //配置基本类库
  alias: {
    'jquery':'jquery/jquery-2.2.2.min.js',
    'openlayer':'openlayers/3_14_2/ol.js'
  },
  // 变量配置  
  vars: {  
       //本地语言
      'locale': 'zh-cn' ,
      //项目上下文
      'web-app':''
  },  
  // 映射配置  
  map: [  
    ['http://nosp.com/js/', 'http://localhost:8080/js/']  
  ],  
  debug: true
});
//解决无法使用JQuery符号$问题
seajs.on('exec', function(module) {
   if (module.uri === seajs.resolve('jquery')) {
      window.$ = window.jQuery = module.exports;
   }
});

3)业务功能myopenlayertest.js

define(function(require, exports, module) {
    var 
        $=require('../jquery/jquery-2.2.2.min'),
        OpenLayers=require("../openlayers/3_14_2/ol");
    var map = new ol.Map({
        layers: [
          new ol.layer.Tile({
            source: new ol.source.OSM()
          })
        ],
        target: 'mapDiv',
        controls: ol.control.defaults({
          attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
            collapsible: false
          })
        }),
        view: new ol.View({
          center: [0, 0],
          zoom: 2
        })
      });
});

通过上面的代码编写,我们使用seajs配合jquery、openlayers简单的完成了一幅地图的展示,如下图:
map

这个示例工程的结构图如下:
工程图片

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript模块加载框架——seajs 的相关文章

  • 了解设置 JQuery 变量

    了解设置 JQuery 变量 最近 我通过在 StackOverflow 上遇到的另一个问题寻找帮助 了解到如何设置 JQuery 变量 如下所示 您可以通过简单地调用变量来创建输入字段 并且锚变量似乎也定义了样式 var clicked
  • 在 Vue.js 中从父组件执行子方法

    目前 我有一个 Vue js 组件 其中包含其他组件的列表 我知道使用 vue 的常见方式是将数据传递给孩子 并从孩子向父母发出事件 但是 在这种情况下 我想在子组件中的按钮出现时执行子组件中的方法 parent被点击 哪种方法最好 一种建
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • 使用 Angular 下载具有动态 src 的脚本

    Angular 提供了通过动态名称动态加载模板的方法ng include 该部分中的内联 JS 和 CSS 可以正常加载 但没有一个好的方法来下载带有动态 url 的脚本 我们需要下载脚本 相对于调用它们的 html 部分的路径 即我们有一
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • 如何抑制窗口鼠标滚轮滚动...?

    我正在开发嵌入页面中的画布应用程序 我有它 因此您可以使用鼠标滚轮放大绘图 但不幸的是 这会滚动页面 因为它是文章的一部分 当我在 dom 元素上滚动鼠标滚轮时 是否可以阻止鼠标滚轮在窗口上滚动 附加鼠标滚轮 不是 Gecko DOMMou
  • 除了更改标题之外,如何在 Firefox 中强制另存为对话框?

    有没有办法在 ff 中强制打开 www example com example pdf 的另存为对话框 我无法更改标题 如果您可以将文件以 Base64 格式输出到客户端 则可以使用 data uri 进行下载 location href
  • 音频 blob 的 URL.createObjectURL 在 Firefox 中给出 TypeError

    我正在尝试从创建的音频 blob 创建对象 URLgetUserMedia 该代码在 Chrome 中可以运行 但在 Firefox 中存在问题 错误 当我打电话时stopAudioRecorder 它停在audio player src
  • Jquery/Javascript 上传和下载文件,无需后端

    是否可以在没有后端服务器的情况下在 JavaScript 函数中下载和上传文件 我需要导出和导入由 JavaScript 函数生成的 XML 我想创建按钮 保存 xml 来保存文件 但我不知道是否可行 另一方面 我希望将 XML 文件直接上
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • 如何在react-native中获取Text组件的onPress值

    我是一名新的 React Native 开发人员 我想使用 onPress 获取 Text 组件的值并将其传递给函数
  • FireFox 中的自动滚动

    我的应用程序是实时聊天 我有一个 Div 来包装消息 每条消息都是一个 div 所以 在几条消息之后 我的 DOM 看起来像这样 div div Message number two div div div div
  • 为什么我不能在 AngularJS 中使用 data-* 作为指令的属性名称?

    On the t他的笨蛋 http plnkr co edit l3KoY3 p preview您可以注意到属性名称模式的奇怪行为data 在指令中 电话 Test of data named attribute br
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • 条件在反应本机生产中失败,但在开发中有效

    我创建了一个反应本机应用程序 我需要通过它进行比较 如果属实 就会执行死刑 问题是 该条件适用于 React Native 开发模式 而不适用于 React Native 生产版本 我使用 firebase 作为数据库 也使用 redux
  • Safari 支持 JavaScript window.onerror 吗?

    我有一个附加到 window onerror 的函数 window onerror function errorMsg url line window alert asdf 这在 firefox chrome 和 IE 中工作正常 但在 s
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a

随机推荐