相关疑难解决方法(0)

使用requirejs可以检查模块是否定义而不尝试加载它?

我希望能够选择性地定义模块,然后在我的代码中使用或不使用它.我正在考虑的特殊情况是在调试/测试环境中加载模拟/存根模块,但不是在我上线时.这是一个例子:

在html文件中,可以选择加载js文件(伪代码):

//index.cshtml
...
<script src="/Scripts/lib/require.js"></script>
<script src="/Scripts/app/service_user.js"></script>
<script src="/Scripts/app/real_service.js"></script>
#if DEBUG
<script src="/Scripts/app/mock_service.js"></script>
#endif
Run Code Online (Sandbox Code Playgroud)

在上面,必须在调试版本中加载real_service和mock_service.

每个模块都将使用requirejs定义,例如:

//mock_service.js
define('mock_service', [], 
    function () {
        ...
    });

//real_service.js
define('real_service', [], 
    function () {
        ...
    });
Run Code Online (Sandbox Code Playgroud)

然后在使用该服务时,我想检查是否已经定义了mock_service:

//service_user.js
define(['require', 'real_service'], 
    function (require, real_service) {
        if (require.isDefined('mock_service')) { // 'isDefined' is what I wish was available
             var mock = require('mock_service');
             mock.init(real_service);
        }

        ...
    });
Run Code Online (Sandbox Code Playgroud)

所以我的名义'isDefined'函数只会检查一个已定义给定名称(或名称?)的模块.然后在我的代码中,如果它被定义,我可以要求它并使用它.如果没有,那也没关系.

对我来说重要的是没有尝试加载可选模块.我可以尝试/捕获require语句,但这会导致尝试从服务器加载它,我不希望这样.

另一个选择是有一个我总是加载的存根定义,所以总是需要一个模拟,然后我可以询问它是否是真实的,但这似乎也是浪费.

require.js是否有任何一个深入到require.js,他们发现他们需要这个功能并制定了实施策略?

罗先生,提前谢谢你

requirejs

34
推荐指数
2
解决办法
2万
查看次数

标签 统计

requirejs ×1