RequireJS - 把参数传递模块,用于初始化[重复](RequireJS - pass pa

2019-07-29 03:33发布

可能重复:
如何在使用AMD(require.js)加载自举模式在Backbone.js的

我目前正在创建一个RESTful API,用于我们的项目之一,也是想提供一个JavaScript库来访问它。

因为我喜欢AMD的工作原理,使用require.js,我将提供一个AMD模块为好。 问题是:该模块的初始化需要像初始化的API密钥的一些信息。

我如何通过这样的参数为在initalization模块?

Answer 1:

如果你有这样的:

define(['dep1', 'dep2', 'dep3'], function (dep1, dep2, dep3) {

    var module = {
        ...
    };

    return module;

});

将其更改为:

define(['dep1', 'dep2', 'dep3'], function (dep1, dep2, dep3) {
    var module = {
        ...
    };

    var init = function (options) {
        // Initialize here
        return module;

    };

    return init;
});

然后要求你的模块某处后,你可以调用它来初始化。 您可能还需要寻找到工厂模式,如果你需要更复杂的东西,并返回工厂。

require.js不限制你在你回来的。 它可以是一个简单的对象,一个字符串,一个功能...



Answer 2:

我觉得你想找的是设置获得由模块拿起配置变量的能力。 下面是使用require.js一个例子

如何在使用AMD(require.js)加载自举模式在Backbone.js的



Answer 3:

那,我便想起一个另一种可能性是使用服务器端脚本来操作,当你要求它的模块的源。

例如,当你必须通过一个API密钥到模块,请执行以下操作:

你做你的第一个定义()调用之前,把下面的代码:

require.config({
    paths: {
        api: 'https://api.example.com/api.amd.js?api_key=f615ac61&'
    }
});

这使您可以简单地这样从任何地方需要你的API:

require(['api'], function(api){

});

因此,服务器临危请求 - 把它映射thorugh mod_rewrite的一些脚本,把把GET参数,并把它放在在模块源代码中的正确位置,然后返回自定义源。

这就是我现在解决了这个方式,它就像一个魅力,而不需要改变开发商的任何行为和它使用的功能这就是已经建成requirejs。



Answer 4:

我不认为你可以做到这一点require.js,但你可以Frame.js或一些其他的模块库。 在框,你会是这样做的:

//moduleName.js

(function(exports){
    exports.moduleName = function(args){
        // do stuff
    }
})(window.exports);


// in main js file

var exports = {}; // global variable

Frame('moduleName.js');
Frame(function(next){
    var myArgs = { ... settings ... };
    exports.moduleName(myArgs);
    next();
});
Frame.init();


Answer 5:

是否有可能使用一个命名空间的变量,然后引用合适的对象,当你初始化特定的库? 也许我不完全明白你想要require.js做什么,但它看起来就像你在任何情况下你main.js称呼它,所以我敢肯定它会工作...我不认为你可以不喜欢它<script = "require.js?apiKey=jsdfhjkfklsjkfdjks">

var libData = {
   apiKey: "jsdfhjkfklsjkfdjks",
   otherpram: "userIDorsomething"
}

require(libData.apiKey); 

但如果你需要发送apikey在页面的URL参数,你可以使用这样一个脚本来获取参数:

<script>
      function getQueryParams(qs) {
            qs = qs.split("+").join(" ");
            var params = {},
                tokens,
                re = /[?&]?([^=]+)=([^&]*)/g;

            while (tokens = re.exec(qs)) {
                params[decodeURIComponent(tokens[1])]
                    = decodeURIComponent(tokens[2]);
            }

            return params;
        }

// assuming the page is loaded like page.html?apikey=jsdfhjkfklsjkfdjks

     apiKey = getQueryParams(document.location.search).apiKey;

然而//你要调用要求,通过API密钥?

</script>


文章来源: RequireJS - pass parameters into module for initialization [duplicate]