精华内容
下载资源
问答
  • require

    2015-10-19 17:27:29
    require require是一个基于AMD规范实现的函数,它区别于传统的CommonJS require规范。因为它能够异步地加载动态的依赖,所以,我们对基于require的回调方式有了更多的需求。 TestsDiscussion API ...

    require

    require是一个基于AMD规范实现的函数,它区别于传统的CommonJS require规范。因为它能够异步地加载动态的依赖,所以,我们对基于require的回调方式有了更多的需求。

    API Specification

    局部require vs 全局require

    局部require可以被解析成一个合符AMD工厂函数规范的require函数。

    例如:

        define(['require'], function (require) {
            //the require in here is a local require.
        });
    
        define(function (require, exports, module) {
            //the require in here is a local require.
        });

    局部require也支持其他标准实现的API。

    全局require函数作用于全局,和define()类似。 全局require和局部require有着相同的行为,包含以下特征:

    • 模块ID应该认为是一个绝对的模块名称,而不是相对另一个模块的ID。
    • 只有在异步的时候,才可以使用require(id, callback?)的回调形式。因为异步加载模块的方式是先发出一个异步请求,然后等主线程代码段执行完毕才能进行异步回调来处理加载好的模块。

    实际中,我们经常会遇到一些阻塞模块加载的依赖,如果交互次数很多,需要大量的模块加载,应该采用全局依赖的形式去加载顶层模块。

    require(String)

    基于以下规范CommonJS Modules 1.1.1 require.根据参数,同步地返回模块ID所代表的模块。

    如果模块没有加载或者执行完成,就会抛出错误。特别需要指出的是,在同步加载的回调中,如果模块没有加载完成,禁止动态的获取模块,否则,就会抛出异常。

    使用define()定义模块时,依赖项中可以找到一个AMD模块:

        define(function (require) {
            var a = require('a');
        });

    工厂方法可以被解析成require('')的调用形式(例如,使用语法解析器或者使用Function.prototype.toString()或者正则表达式)去找到依赖,加载并且执行依赖,然后执行工厂方法内部代码,通过这样的方式,就可以获取到模块。

    require(Array, Function)

    参数Array是一个由模块ID组成的数组。当模块ID所以代表的模块加载完成且可用时,回调函数Function才开始执行,并且只被执行一次。各个模块按照依赖数组中的位置顺序以参数的形式传入到Function里。

    例如:

        define(function (require) {
            require(['a', 'b'], function (a, b) {
                //modules a and b are now available for use.
            });
        }); 

    require.toUrl(String)

    将形如[module ID] + '.extension'这种字符形式转化成URL路径。

    require.toUrl()方法采用通用的模块ID路径转化规则,将模块ID字符解析成URL路径.但它不支持以".js"这种扩展形式。所以,我们必须将'.extension'添加到了解析路径里。

    例如:

        //cart.js contents:
        define (function(require) {
            // 模块ID名 './templates/a'
            // 扩展名 '.html'
            // 模板路径大致以这样的形式结尾 'modules/cart/templates/a.html'
            var templatePath = require.toUrl('./templates/a.html');
        });
    展开全文
  • require doing相当于require to be done,两者可以互换,但是如果用动名词,要用主动的形式表示被动意义 2 扩展 有些动词后接动名词主动式可表被动意义,而不定式则须用其被动式表被动意义。如: I won’t bear ...

    1 区别
    require doing相当于require to be done,两者可以互换,但是如果用动名词,要用主动的形式表示被动意义
    2 扩展
    有些动词后接动名词主动式可表被动意义,而不定式则须用其被动式表被动意义。如:
    I won’t bear thinking of. 我不堪被人想念。
    I won’t bear to be thought about.
    It needs repairing. 它需要修理。
    It needs to be repaired.
    The cloth won’t bear washing. 这布料经不起洗。
    The cloth won’t bear to be washed.
    The child wants scolding. 这孩子就是欠揍。
    The child wants to be scolded.

    展开全文
  • 前言通过上面的两篇文章,分析了require.js加载过程中所做的工作,实际上就是创建一个contextName为’_’对应的context上下文,也只到require函数实际上就是调用localRequire函数,该函数的大概代码如下:// deps...

    前言

    通过上面的两篇文章,分析了require.js加载过程中所做的工作,实际上就是创建一个contextName为’_’对应的context上下文,也只到require函数实际上就是调用localRequire函数,该函数的大概代码如下:

    // deps表示依赖列表, callback表示回调函数,errback表示处理错误的回调函数
    function localRequire(deps, callback, errback) {
     // 相关处理代码
    }

    在函数会对依赖模块对应对象的创建、模块的加载以及其他相关工作,是整个require最核心的逻辑处理。

    localRequire函数处理流程分析

    通过阅读源码,分析localRequire函数的处理流程如下:
    localRequire流程处理

    从上面可知最核心的处理是如下代码:

    context.nextTick(function () {
        intakeDefines();
        requireMod = getModule(makeModuleMap(null, relMap));
        requireMod.skipMap = options.skipMap;
        requireMod.init(deps, callback, errback, {enabled: true});
        checkLoaded();
    });
    • intakeDefines函数的主要功能是将globalDefQueue的内容copy到defQueue中并且根据条件调用callGetMoudle
    • getMoudle:不言而喻,获取模块
    • makeModuleMap:绘制Module依赖map
    • requireMod.init:module对象的init方法
    • checkLoaded:检查是否加载成功

    本次创建了a.js和b.js两个js文件作为模块,在c.js中require中作为依赖,来分析整个流程相关的事情。

    require(['./a.js', './b.js'], function(a, b) {
    });

    当加载c.js就会调用require函数,下面就具体分析下上面几个函数所做的事情。

    在require.js加载过程中两次调用了req函数,所以两次定义了定时器,下面是req({}) context.nextTick中函数执行的过程,如下:
    核心代码处理

    可以看出实际上该函数直接调用了4个函数来处理相关逻辑:
    - makeModuleMap
    - getModule
    - module对象的init函数
    - checkLoaded函数

    从上面可知:
    - req({})创建了模块id为_@r2,url为./_@r2.js
    - 分析可知req(cfg)创建了模块id为_@r3,url为./_@r3.js
    - require([‘a.js’,’b.js’])创建了id为@r4的模块,url为./@r4.js其depMaps是a和b两个模块

    实际上require([‘a.js’,’b.js’])的过程与req({})中上图过程差不多,出现差别的地方是:
    - 调用module对象的init时,depMaps = [‘a’,’b’],对depMaps进行遍历,对其中每一个依赖执行makeModuleMap操作,创建id为a和b的模块并将其存入registry中

    然后就是列表a和b依次执行下面这四个函数:
    - makeModuleMap
    - getModule
    - module对象的init函数
    - checkLoaded函数

    在流程中调用check函数的时候调用了有了较大的差别:
    - 首先在check函数中调用了fetch函数
    - 在fetch函数中调用了load函数
    - 在load函数中调用了req.load函数,而req.load函数是用于创建script节点,并设置srcipt中一些属性的,设置了async = true,这是异步加载的本质

    同理模块b的过程也是如此,自此,默认明白了require是任何处理依赖列表,并且如何异步加载js文件的。

    总结

    通过对于源码的阅读分析,知道核心代码直接调用了下面四个函数:
    - makeModuleMap:构建ModuleMap的
    - getModule:获取module对象
    - module对象的init函数:设置deps,判断模块是否可使用以及依赖列表的中每个依赖的处理
    - checkLoaded函数:处理循环依赖等问题

    require函数会通过上面四个函数创建模块,而require中依赖也是通过上面四个函数创建被加载的,这部分的主要实现是check函数中对于depMaps的遍历处理。

    已经知道了require.js是如何处理依赖列表和加载依赖的,但是对于循环依赖是如何处理的,之后会看看require.js是如何处理循环依赖的。

    展开全文
  • require doing

    千次阅读 2018-03-27 10:20:29
    require +n.+to do sth需要某人做某事情,命令某人做某事情.如The roof requires an expert to repair.屋顶需要专家才能修理require doing sth需要做某事情如The roof requires repairing屋顶需要修理了require doing...
    require +n.+to do sth需要某人做某事情,命令某人做某事情.
    如The roof requires an expert to repair.屋顶需要专家才能修理
    require doing sth需要做某事情

    如The roof requires repairing屋顶需要修理了


    require doing sth 需要被做 = require to be done 
    require sb.to do sth 需要某人做某事 
    另外还有:
    1.require sth 需要某物
    2.require (that) sb.should do sth.从句用虚拟语气,其中should可以省略.
    3.require sth.of sb.命令/要求某人做某事

    展开全文
  • require用法

    万次阅读 2018-03-09 11:35:10
    原理的东西这里不多做解释,我们这节只是介绍一下require的用法:1.首先我们要下载require.js文件;2.html引入<script src="../js/require.js" data-main="main"></script...
  • javascript require

    2019-06-22 15:09:50
    前言 文章主要用来总结工作中的一些结论和经验。 正文 在阅读cocos-creator源码的过程中发现 require('./cocos2d/core/predefine'); // LOAD COCOS2D ENGINE CODE ... require('./cocos2d')...
  • 转载自 webpack: require.ensure与require AMD的区别webpack: require.ensure与require AMD的区别简介require-ensure和require-amd的区别:require-amd 说明: 同AMD规范的require函数,使用时传递一个模块数组和回...
  • let src ="../../assets/imgs/...require(src); require接收了一个变量,会报上面的警告,接收一个写死的字符串值时则没有警告! 下面三种写法没有报警告: require("../../assets/imgs/ziyuan6.png"); ...
  • require.ensure和require-amd

    2017-06-22 16:42:01
    require-ensure和require-amd的区别: require-amd 说明: 同AMD规范的require函数,使用时传递一个模块数组和回调函数,模块都被下载下来且都被执行后才执行回调函数语法: require(dependencies: String[], ...
  • ruby 的 require require_relative

    千次阅读 2016-05-18 00:39:07
    require require 是 kernel的一个方法 require filename 如果filename 是一个相对路径 则从 $LAOD_PATH寻找相应的文件(.rb,.so,.dll) note: $LOAD_PATH 指的是Ruby读取外部文件的一个环境变量,其实和...
  • require的用法

    万次阅读 2017-09-01 11:32:37
    require最常用的方法require(‘http’) 内置模块require(‘./server’) “./”表示当前路径,后面跟的是相对路径require(“../lib/server”) ../表示上一级目录,后面跟的也是相对路径server.jsvar http = require('...
  • lua require机制

    万次阅读 2018-06-07 15:32:47
    相信大家在lua中都用过require。为了达到代码复用和结构化的目的,各种语言都有require机制。lua的require看似简单,其实里面有很多玄机。 一 require从哪里加载模块文件 从虚拟机的path,cpath等全局变量中。...
  • php require

    2017-10-31 18:43:26
    今天研究Yii源码的时候无意间发现了require的一个一直不知道的功能,以前使用require主要是引入文件,以为是把文件内容引入进来,今天突然醒悟如果是引用的php文件会引入执行,即不但原样引入进当前文件还会进行php...
  • LUA Require函数

    千次阅读 2019-04-25 18:02:47
    Lua提供高级的require函数来加载运行库。粗略的说require和dofile完成同样的功能但有两点不同: require会搜索目录加载文件 require会判断是否文件已经加载避免重复加载同一文件。由于上述特征,require在...
  • requirerequire.async区别

    千次阅读 2016-06-02 18:12:45
    seajs github的issue list里有说,要大家把require()这个看做是js的...require无法完成条件加载。如下代码: JavaScript code ? 1 2 3 4 5 6 7 define(function
  • ruby require

    2014-07-29 20:05:47
    # require_relative 'trig' require 'pathname' dir = Pathname.new(__FILE__).parent . to_s + '/'# 当前文件完整路径 require dir + 'trig' # require_relative 'moral' require dir + 'moral' ...
  • composer.json中require-dev和require的区别! 1.composer.json文件中的requirerequire-dev中存放的均是package 2.两者的区别在于require中所引用的包在线上线下的项目中均会使用,require-dev中的包只在本地...
  • 1.composer.json文件中的requirerequire-dev中存放的均是package 2.两者的区别在于require中所引用的包在线上线下的项目中均会使用,require-dev中的包只在本地开发的时候使用。 "require": { "php": ">=5.6.0...
  • Vue require 使用

    2020-01-10 11:04:00
    require.context 使用 一次引入多个文件 require.context('文件路径',true/false,正则表达式) const modulesFiles = require.context('./modules', true, /\.js$/) const modules = modulesFiles.keys().reduce...
  • require.context

    2019-03-05 15:13:37
    初识require.context require.context是webpack中,用来创建自己的(模块)上下文 webpack会在构建的时候解析代码中的require.context() require.context函数接收三个参数: 要搜索的文件夹目录 是否还应该搜索它...
  • requirerequire async的区别

    千次阅读 2015-06-25 14:36:18
    seajs github的issue list里有说,要大家把require()这个看做是js的...require无法完成条件加载。如下代码: JavaScript code ? 1 2 3 4 5 6 7 define(function
  • 带表达式的 require 语句 如果 require参数含有表达式(expressions),会创建一个上下文(context),因为在编译时(compile time)并不清楚具体是哪一个模块被导入 require("./template/" + name + ".ejs"); webpack ...
  • 我是这样引用图片 但是在编译的时候报错了,如图下 解决方法: 在vue项目中的.eslintrc.js文件,加如下代码 PS: 如果没有就在根目录下创建一个 ... "global-require": 0 }, }; 然后重启项目。 ...
  • include、require、include_once、require_once 的区别 了解下include、include_once、requirerequire_once这4个函数: include函数:会将指定的文件读入并且执行里面的程序; require函数:会将目标文件的...
  • require加载机制 https://www.cnblogs.com/softidea/p/5242941.html 卸载已经require的模块 https://blog.csdn.net/qq_28412897/article/details/82883133
  • Ruby require

    2013-12-25 09:45:13
    Ruby1.9中的require问题 ruby没有像java那种严格的包管理机制,因此引用起来就有些让人摸不着头脑,所以有人说ruby不适合用于多人协作的大项目,这是有一定道理的。 ruby加载其它的类,一般是通过require来加载...
  • requirerequire_once的区别 include() 和require() :语句包括并运行指定文件。 include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果你想在遇到丢失文件时停止处理页面就用 require()。...
  • JS报错:require is not defined

    万次阅读 2018-11-17 13:40:40
    浏览器端不能识别require关键字,require是node.js环境下的,在node_modules文件夹里面的模块下面常见require 解决方法: 通过工具browserify或者是webpack把js文件编译一下,转成浏览器端可识别的。 //安装...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 232,678
精华内容 93,071
关键字:

require