gpt4 book ai didi

javascript - 将 requireJS 模块暴露给全局命名空间的正确方法是什么?

转载 作者:数据小太阳 更新时间:2023-10-29 04:21:39 27 4
gpt4 key购买 nike

我想将 Javascript API 作为独立库公开,而不污染其全局命名空间。我已经创建了包装器,所以我不会根据 http://requirejs.org/docs/faq-advanced.html 污染他们自己的 requireJS .我已经简化了目前为止的内容,但我不确定这是否是正确的方法,或者我是否应该以其他方式进行。

var MyApi = MyApi || {};
var MyApiRequireJS = (function() {
// require.js pasted here
return {requirejs: requirejs, require: require, define: define};
})();

(function(require, define, requirejs) {
require.config({
baseUrl: 'js/scripts',
waitSeconds: 30,
});

define( 'myapi', ['jquery', 'underscore'],
function($, _) {
$.noConflict(true);
_.noConflict();
function api(method, args, callback) {
// do stuff here
}
return {api: api};
}
);

require( ['myapi'], function( myapi ) {
MyApi = myapi;
});
}(MyApiRequireJS.require, MyApiRequireJS.define, MyApiRequireJS.requirejs));

使用这个库的网站将包含一个引用上述代码的脚本标签,然后使用

MyApi.api('some_remote_method', {foo: 'bar'}, function(result) {
// handle the result
});

最佳答案

我认为您是在试图通过让别人的问题成为您的问题来预测别人的问题,但我认为您确实无法合理地做到这一点。您链接到的页面旨在让已经拥有名为“require”或“define”的 Javascript globals 的人将 RequireJS globals 重命名为不同的东西。它无意创建两个单独的 RequireJS 实例来独立解决依赖关系。

也就是说,如果您真的想尽量减少 namespace 污染,那么您应该只公开一个名称——MyApi。编写一个包含您的 RequireJS 私有(private)副本以及您的 API 代码的怪物闭包,并让它仅返回您想要在 API 上公开的方法。

以两个版本交付您的 API 可能更友好/更简单,一个定义了 requireJS 模块,另一个没有 requireJS 依赖。

关于javascript - 将 requireJS 模块暴露给全局命名空间的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9777920/

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