gpt4 book ai didi

requirejs - Require.JS shim 配置全局范围?

转载 作者:行者123 更新时间:2023-12-02 23:52:59 24 4
gpt4 key购买 nike

我对 requireJS 有以下设置。

requirejs.config({
paths: {
'resources' : '/Scripts/resources'
},
shim: {
'resources': {
exports: 'LocalizedStrings'
}
}
});

我的 resources.JS 如下所示:

LocalizedStrings = {
title: "Demo",
save: "Save"
}

现在,当我将资源作为 main.JS 文件中的依赖项加载时,我可以访问 LocalizedStrings 并且它可以工作。

//main.js
define(function(require){
var LocalizedStrings = require('resources');
console.log(LocalizedStrings); //works as expected
});

但是,在其他模块上,我实际上不需要加载资源作为访问“LocalizedStrings”的依赖项。

//othermodule.js
define(function(require){
console.log(LocalizedStrings); //works as expected even though resources dependency is not loaded
});

我在这里不明白的是,如果我使用 shim 加载 JS 文件并加载一次,它是否会变得全局可用,并且我不必在其他模块中再次加载相同的依赖项。

最佳答案

Backbone 和 Underscore 都修改全局作用域,因此如果浏览器运行了它们的代码,那么全局变量就会存在。

如果在 RequireJS 中作为填充程序加载,或者直接在其 src 中包含脚本标记,就会发生这种情况。

一旦全局变量存在,它们就存在(除非明确删除我猜)。

This jsfiddle is a simple example of using shims ,并看到值(对于某些库)被设置为全局值。

该示例的目的是表明全局变量的值仅在 require() 调用内得到保证。(如果使用 AMD 加载程序,而不是只需在 script 标记中导入库即可)。并且全局变量的值将在未来某个不确定的时间存在。

源代码

require.config({
shim: {
underscore: {
exports: '_'
},
backbone: {
deps: ["underscore", "jquery"],
exports: "Backbone"
}
},
paths: {
jquery: "http://code.jquery.com/jquery-1.9.1",
backbone: "http://backbonejs.org/backbone",
underscore: "http://underscorejs.org/underscore"
}
});

function appendVersions(msg, $, _, Backbone) {
var pre = document.getElementById("content");
var s = "<h2>" + msg + "</h2>";
s += "jquery=";
try { s += $.fn.jquery; } catch (e) { s += e.msg; }
s += "<br>";
s += "_=";
try { s += _.VERSION; } catch (e) { s += e.msg; }
s += "<br>";
s += "Backbone=";
try { s += Backbone.VERSION; } catch (e) { s += e.msg; }
pre.innerHTML += s;
}

appendVersions("Before require (will be undefined)", window["$"], window["_"], window["Backbone"]);

require(["jquery", "underscore", "backbone"], function ($, _, Backbone) {
appendVersions("Inside Require (should *always* be ok, unless the scripts aren't there)", $, _, Backbone);
});

appendVersions("After require (Probably be undefined, as the require probably won't have loaded the scripts yet)", window["$"], window["_"], window["Backbone"]);

setTimeout(function () {
appendVersions("After Timeout (should be ok, but depends on how quickly the scripts load. Try changing the timeout duration)", window["$"], window["_"], window["Backbone"]);
}, 2000);

示例输出

enter image description here

关于requirejs - Require.JS shim 配置全局范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15765336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com