require

原文写的很详细,推荐:https://www.jianshu.com/p/b8a6824c8e07

http://www.ruanyifeng.com/blog/2012/11/require_js.html

前端模块化,AMD与CMD的区别

<script src="1.js"></script>
<script src="2.js"></script>
<script src="3.js"></script>
<script src="4.js"></script>
这样的写法有很大的缺点:
(1)加载的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长;
(2)由于js文件之间存在依赖关系,因此必须严格保证加载顺序(比如上例的1.js要在2.js的前面),依赖性最大的模块一定要放到最后加载,当依赖关系很复杂的时候,代码的编写和维护都会变得困难。
require.js的诞生,就是为了解决这两个问题。
(1)实现js文件的异步加载,避免网页失去响应;
(2)管理模块之间的依赖性,便于代码的编写和维护。

使用:如果你担心在头部引用这个require.js会使网页失去响应,你可以将它放底部,或者写成下面这样:

<script src="js/require.js" defer async="true" ></script>
async属性表明这个文件需要异步加载,避免网页失去响应。IE不支持这个属性,只支持defer。


优点:

1.使用RequireJS,会在相关的js加载后执行回调函数,这个过程是异步的,所以它不会阻塞页面。

2.更加方便的模块依赖管理。相信你曾经一定遇到过因为script标签顺序问题而导致依赖关系发生错误,这个函数未定义,那个变量undefine之类的。通过RequireJS的机制,你能确保在所有的依赖模块都加载以后再执行相关的文件,所以可以起到依赖管理的作用。

3.更加高效的版本管理。想一想,如果你还是用的script脚本引入的方式来引入一个jQuery2.x的文件,然后你有100个页面都是这么引用的,那当你想换成jQuery3.x,那你就不得不去改这100个页面。但是如果你的requireJS有在config中做jQuery的path映射,那你只需要改一处地方即可。

4. cdn加载不到js文件,可以请求本地文件只需要在require.config中做下配置即可,
'jq' : ['https://cdn.bootcss.com/jquery/3.3.1/jquery','js/jquery'],数组第一个元素是cdn文件,第二个是本地文件
<head>
    <meta charset="UTF-8">
    <title>require</title>
    <script data-main="js/main" src="https://cdn.bootcss.com/require.js/2.3.5/require.js"  defer async="true"></script>
</head>
require.config({
    paths : {
    'jq' : ['https://cdn.bootcss.com/jquery/3.3.1/jquery','js/jquery']
    },
    baseUrl:'test/jss'
})
require(['jq','../../a'],function(){
    console.log('全部加载完成');
    $('span').css('color','red')
})

requireJS在不同情况下的相对路径。

以下是相对路径的规则:

1.如果<script>标签引入require.js时没有指定data-main属性,则以引入该js的html文件所在的路径为根路径。

2.如果有指定data-main属性,也就是有指定入口文件,则以入口文件所在的路径为根路径。在本例子中也就是main.js所在的script文件夹就是根路径,这也是为什么配置jQuery的时候需要返回上层目录再进入lib目录才能找到jQuery文件。

3.如果再require.config()中有配置baseUrl,则以baseUrl的路径为根路径。
以上三条优先级逐级提升,如果有重叠,后面的根路径覆盖前面的根路径。

define

定义模块, define ( function (name, deps, callback){  }),一个参数是定义模块名,第二个参数是传入定义模块所需要的依赖,第三个函数则是定义模块的主函数,主函数和require的回调函数一样,同样是在依赖加载完以后再调用执行。

//   js/script/desc.js,没有依赖,第二个参数可以省略
define(function(){
    return{
        decs : 'this js will be request only if it is needed',
    };
})

//   js/script/alertdesc.js,有依赖,第二个参数为依赖的模块
define(['script/desc'],function(desc){
    return function (){
        alert(JSON.stringify(desc));
    };
})

为什么省略第一个参数name,因为如果哪一天我将这个文件转移到其他目录下,那我就得在这这里再修改一次模块名。官方其实也不推荐,用官方的说法是:让优化工具去自动生成这些模块名吧!


异步加载依赖模块,浏览器不会失去响应;它指定的回调函数,只有前面的模块都加载成功后,才会运行,解决了依赖性的问题。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue中,require是一个用于导入模块或资源的全局方法。它可以用来引入JSON文件、图片以及其他类型的文件。require方法可以通过指定文件路径来导入文件。具体可以通过三种方式进行引入。 第一种方式是使用require方法直接引入JSON文件。这可以通过在代码中使用require方法并提供文件路径来实现。例如,可以通过以下方式引入一个名为data.json的JSON文件: const data = require('./data.json'); 第二种方式是使用require.context方法遍历文件夹并获取指定文件。require.context方法接受四个参数:目录路径、是否遍历子目录、匹配文件的正则表达式、模式(默认为同步)。使用require.context方法可以方便地导入多个文件。例如,可以使用以下代码导入指定文件夹下的所有图片文件: const images = require.context('./images', false, /\.png$/); const imagePaths = images.keys(); imagePaths.forEach(path => { const image = images(path); console.log(image); }); 第三种方式是直接使用require方法引入图片。可以通过提供图片的相对路径来引入图片文件。例如,可以使用以下代码引入名为logo.png的图片: const logo = require('./logo.png'); console.log(logo); 总结来说,Vue中的require方法可以用于引入模块、JSON文件和图片等资源。可以通过直接使用require方法或使用require.context方法来实现导入文件的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值