首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JS模块加载框架 SeaJS

SeaJS是一个遵循CMD规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制,兼容所有主流浏览 SeaJS的主要目的是令JavaScript开发模块化并可以轻松愉悦进行加载...,让开发可以专注于代码本身的逻辑 上手示例 html中加载初始化模块init.js,init 中调用 module1 模块,同时 module1 模块调用 module2 模块 ?...,他有三个参数: 1)require 模块加载函数,用于记载依赖模块 2)exports 接口点,将数据或方法定义在其上则将其暴露给外部调用 3)module 模块的元数据,存储了模块的元信息(module.id...模块的ID、module.dependencies 此模块依赖的所有模块的ID列表、module.exports 与exports指向同一个对象) 模块的寻址 (1)绝对地址——给出js文件的绝对路径...require("http://example/js/a"); (2)相对地址——用载入函数所在js文件的相对地址寻找模块 例如有 js/a.jsjs/m/b.js 在b.js中调用上级级目录下的

6K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JS】938- require加载实现原理

    在大多数情况下我们会在浏览中去运行javascript,有了node的出现,我们可以在node中去运行javascript,这意味着哪里安装了node或者浏览,我们就可以在哪里运行javascript.../name.txt'); } catch(e) { // 文件不存在 } 复制代码 4.手动实现require模块加载 首先导入依赖的模块path,fs, vm, 并且创建一个Require...来抽象,使用tryModuleLoad来加载模块内容,Module和tryModuleLoad我们稍后实现,Require的返回值应该是模块的内容,也就是module.exports。...,实现js和json Module....module.exports; } 复制代码 6.自动补全路径 自动给模块添加后缀名,实现省略后缀名加载模块,其实也就是如果文件没有后缀名的时候遍历一下所有的后缀名看一下文件是否存在。

    1.7K20

    加载的方法_JS加载

    ==c2); // true 同一个类加载加载同名的类,第一次加载加载的类会缓存到类加载的缓存,再次加载直接在缓存读取,两次加载的是同一个类 //直接获取类的类加载...} } 在应用程序中,默认我们获取上下文类加载、类型对象getClassLoader都是采用的同一个应用程序类加载,类在第一次被加载后会缓存到类加载的缓存中,由于是同一个类加载此时同名的类不能被多次加载...,且应用程序类加载只能加载classpath下的类。...如果我们想加载自定义路径下的类,需要用到自定义类加载,可以去指定路径下加载类,且通过创建多个类加载对象,加载的同名类相互隔离,也就是说同名类可以被多个自定义类加载对象加载。...,创建多个类加载对象去加载同一个类,会得到多个类型对象。

    5.9K10

    如何实现一个异步模块加载

    今天就结合模块,和大家讲分享一下:如何实现一个简单的模块加载。 正文 最近参考 require.js 的API,自己动手实现了一个简单的异步模块加载: fake-requirejs。...因为这有助于我集中有限的精力研究模块化这一个概念,所以后来决定实现requirejs,这是一个相对来说比较简单的异步模块加载。...所以: 作为一个合格的模块加载,必须解决循环依赖的问题。 那么,让我们先来看看别人是怎么处理的吧。...那么问题来了: 在原先的设计中, 每一个define是跟一个模块一一对应的,require只能用一次,用于主入口模块(如:main.js)的加载。...errorFn); } // Task类继承于Module类 Task.prototype = Object.create(Module.prototype); 至此,我们就完成了一个简单的异步模块加载

    62520

    JS框架设计之加载所在路径的探知一模块加载系统

    1、要加载一个模块,我们需要一个URL作为加载地址,一个script作为加载媒介,但用户在require是都用ID,我们需要一个将ID转换为URL的方法,思路很简单,强加个约定,URL的合成规则是为:...basepath+模块ID+".js" 2、当浏览自上而下分析DOM,在浏览解析我们的Javascript文件时(指的是加载文件)时,他就肯定是DOM树最后一个加入的script标签,因此有下面的方法...node=nodes[nodes.length-1];//拿到最后一个加载的script标签对象,也就是加载 var src=document.querySelector?.../加载/zcLoadJs.js">'); document.write('<script src="http://common.cnblogs.com/script/jquery.<em>js</em>...的路径 zcLoadJs为我的<em>加载</em><em>器</em>,里面执行getBasePath()方法,预期得到zcLoadJs.<em>js</em>的服务<em>器</em>路径,但是在IE678中却返回juqery.<em>js</em>的路径,这个不奇怪,很多的常规方法在IE

    1K50

    Node.js 分享:require 加载实现原理

    在大多数情况下我们会在浏览中去运行javascript,有了node的出现,我们可以在node中去运行javascript,这意味着哪里安装了node或者浏览,我们就可以在哪里运行javascript.../name.txt'); } catch(e) { // 文件不存在 } 复制代码 4.手动实现require模块加载 首先导入依赖的模块path,fs, vm, 并且创建一个Require...来抽象,使用tryModuleLoad来加载模块内容,Module和tryModuleLoad我们稍后实现,Require的返回值应该是模块的内容,也就是module.exports。...,实现js和json Module....module.exports; } 复制代码 6.自动补全路径 自动给模块添加后缀名,实现省略后缀名加载模块,其实也就是如果文件没有后缀名的时候遍历一下所有的后缀名看一下文件是否存在。

    1.9K20

    Node.js模块加载机制

    7、Node.js模块加载机制 (1)模块查找规则-当模块拥有路径但没有后缀时 image.png require方法根据模块路径查找模块,如果是完整路径,直接引入模块。...如果模块后缀省略,先找同名JS文件再找同名JS文件夹 如果找到了同名文件夹,找文件夹中的index.js 如果文件夹中没有index.js就会去当前文件夹中的package.json文件中查找main选项中的入口文件...如果找指定的入口文件不存在或者没有指定入口文件就会报错,模块没有被找到 (2)模块查找规则-当模块没有路径且没有后缀时 Node.js会假设它是系统模块 Node.js会去node_modules文件夹中...首先看是否有该名字的JS文件 再看是否有该名字的文件夹 如果是文件夹看里面是否有index.js 如果没有index.js查看该文件夹中的package.json中的main选项确定模块入口文件 否则找不到报错...本机域名:localhost 本地IP :127.0.0.1 (2)创建web服务 // 引用系统模块 const http = require('http'); // 创建web服务

    1.8K20

    【Node.js模块加载机制

    作者主页: 作者主页查看更多前端教学 专栏分享:css重难点教学 Node.js教学 从头开始学习 目录 模块加载机制         优先从缓存中加载          内置模块加载机制...内置模块加载机制 内置模块是由Node.js官方提供的模块,内置模块加载优先级最高。 意思是说  如果自定义模块,与内置模块同名,则优先会加载内置模块。        ...按照准确标记的扩展名 补全js扩展名进行加载 补全json扩展名进行加载 补全node扩展名进行加载 加载失败,终端报错           第三方模块加载机制 如果传递给require()的模块标识符不是一个内置模块.../开头,则Node.js会从当前父级模块开始查找子级node_modules文件夹,然后从里面查找导入的模块名称。...package.json文件,或者main属性不存在,文件不存在的话,则会加载目录下的index.js文件 如果以上两部都失败了,则会报错 模块缺失

    1.2K20

    Node.js模块加载机制

    1.模块查找规则-当模块拥有路径但没有后缀时 require(' ./find.js') ; require(' ./find') ; require方法根据模块路径查找模块,如果是完整路径。...如果模块后缀省略,先找同名JS文件再找同名JS文件夹 如果找到了同名文件夹,找文件夹中的index.js 如果文件夹中没有index.js就会去当前文件夹中的package.json文件中查找...main选项中的入口文件 如果找指定的入口文件不存在或者没有指定入口文件就会报错,模块没有被找到 2.模块查找规则-当模块没有路径且没有后缀时 require(' find') ; Node.js...会假设它是 系统模块 Node.js会去node_ modules文件夹中 首先看是否有该名字的JS文件 再看是否有该名字的文件夹 如果是文件夹看里面是否有indexjs...如果没有index.js查看该文件夹中的package.json中的main选项确定模块入口文件 否则找不到报错

    1.3K30

    Node.js模块加载机制

    模块查找规则-当模块拥有路径但没有后缀时 require(' ./find.js') ; require(' ./find') ; require方法根据模块路径查找模块,如果是完整路径。...直接引入模块。...如果模块后缀省略,先找同名JS文件再找同名JS文件夹 如果找到了同名文件夹,找文件夹中的index.js 如果文件夹中没有index.js就会去当前文件夹中的package.json文件中查找...模块查找规则-当模块没有路径且没有后缀时 require(' find') ; Node.js会假设它是 系统模块 Node.js会去node_ modules文件夹中 首先看是否有该名字的...JS文件 再看是否有该名字的文件夹 如果是文件夹看里面是否有indexjs 如果没有index.js查看该文件夹中的package.json中的main选项确定模块入口文件 否则找不到报错

    1.8K20

    动手实现一个AMD模块加载(一)

    在Node.js中,process对象是一个全局对象,可以直接在Node.js的REPL环境中访问该对象。...该process对象有用的主要属性有 execPath:表示可执行文件的绝对路径 version:Node.js的版本号 versions:Node.js各种依赖的版本,是一个对象,包括node、v8...等版本 platform:Node.js运行的平台 argv:运行Node.js的命令行参数,是一个数组,第一个是命令,第二个是文件名,之后时附加参数 env:操作系统信息 pid:进程的PID...一个Node.js进程的主要方法有以下方法: process.memoryUsage():用于获取运行Node.js应用的进程的内存使用量,返回一个对象 rss:整数,进程的内存消耗量,单位是字节 heapTotal...process.chdir():用于改变Node.js的工作目录,参数为一个路径,可以是相对,也可以是绝对 process.cwd():用于获取当前的工作目录, console.log('directory

    94120

    动手实现一个AMD模块加载(二)

    在上一篇文章中,我们已经基本完成了模块加载的基本功能,接下来来完成一下路径解析的问题。...在之前的功能中,我们所有的模块默认只能放在同级目录下,而在实际项目中,我们的js很有可能位于多个目录,甚至是CDN中,所以现在这种路径解析是非常不合理的,因此我们需要将每个模块的name转化为一个绝对路径.../或者/这个需求是非常正常的,因此我们需要也支持这些实现。...我们再优化一下,我们完全可以在define中将name替换为一个绝对路径,同时在主模块加载依赖的时候,将依赖替换为绝对路径即可,因此我们可以在定义模块的时候就将这个这个路径替换好。...那么我们就应该在use方法加载模块的时候将这些变量名添加到这个变量名之下,之后再define中进行转化,那么最后我们的整个代码如下: (function(root){ var modMap = {}

    65620

    动手实现一个AMD模块加载(三)

    在上一篇文章中,我们的AMD模块加载基本已经能够使用了,但是还不够,因为我们没有允许匿名模块,以及没有依赖等情况。...实际上在amd的规范中规定的就是define函数的前两个参数是可选的,当没有id(模块名)的时候也就意味着不会有模块依赖于这个模块。...此时我们的一个简单的amd模块加载就这样写完了,删除console增加注释就可以比较好的使用了,最后整理一下代码如下: (function(root){ var modMap = {}; var...arguments, 0)); }) }); } else if(modMap[name].status === 'loading') { // 模块正在加载...'; /*为每个模块添加一个随机id*/ node.id = 'loadjs-js-' + (Math.random() * 100).toFixed(3); doc.body.appendChild

    38620
    领券