グローバルな名前空間を汚染することなく、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'をグローバル名前空間に入れたくないと言っていますが、 'MyApi'と' MyApiRequireJS'がグローバル名前空間にあるのはうれしいですか?理由を聞いてもいいですか? –
グローバル名空間で 'MyApi'よりも' require'と 'define'をすでに使用している可能性が高いです(' MyApi'は私が使うつもりのvarではなく、単純にそれを使用しています)。同様にfacebook connect apiは、グローバル名前空間を 'FB'で汚染するだけです。 –
彼らは 'require'または' define'を使用していますか?あなたは知ることができますか?そうでない場合、問題はありません。グローバルな名前空間が何を使用しているのかわからない場合は、定義したグローバルがまだ使用されていないことを確認することはできません。 –