9

を使用してフォルダー全体の依存関係を設定することは可能require.jsですか?

shim 構成を使用して、ファイルの依存関係を設定できることを知っています。

require.config({
    shim: {
        'plugin/backbone/xyz': {
            deps: ['lib/backbone'],
            exports: 'Backbone'
        }
    }
});

上記の例では、プラグイン backbone/xyz の依存関係を定義していますが、すべてのバックボーン プラグインの依存関係を定義したいと考えています。

require.config({
    shim: {
        'plugin/backbone/': { // I would like to specify a folder here but it doesn't work.
            deps: ['lib/backbone'],
            exports: 'Backbone'
        }
    }
});

かつて GitHub で Gist を見つけたと思いますが、再び見つけることができないようです。


明確にするために:これはフォルダー全体を必要とすることではなく、その依存関係を設定することです-フォルダー内のすべてのファイルが初期化の準備が整う前に必要なもの、それぞれのファイル。すべてのファイルに shim を追加することで実現できますが、フォルダー全体にその shim を 1 回だけ追加するだけで済みます。

shim: {
    'lib/backbone': {
        exports: 'Backbone' // <- No use of .noConflict() so all plugins can be required and export Backbone as well.
    },
    'plugin/backbone/a': {
        deps: ['lib/backbone'], // <- Require backbone
        exports: 'Backbone' // <- Export backbone
    },
    // Same requirement and folder for these files:
    'plugin/backbone/b': {
        deps: ['lib/backbone'],
        exports: 'Backbone'
    },
    'plugin/backbone/c': {
        deps: ['lib/backbone'],
        exports: 'Backbone'
    }
}
4

2 に答える 2

2

いいえ、構成自体からフォルダーの下のすべてのファイルに依存関係を追加するためのワイルドカードを簡単に作成することはできません。ただし、構成の前にループを作成し、必要な依存関係を追加できます。

var config = {
    shim: {
        'plugin/backbone/xyz': {
            deps: ['lib/dependency'],
            exports: 'Backbone'
        }
    }
};
for(var shim in config.shim) {
    if(shim.indexOf('plugin/backbone/') == 0) {
        if(config.shim[shim].deps == null) {
            config.shim[shim].deps = [];
        }
        config.shim[shim].deps.push('lib/backbone');
    }
}
require.config(config);

これは、require の関数の 1 つを自分でオーバーライドせずに考えることができる唯一の方法です。エレガントではありませんが、私は認めますが、それは仕事をします.

于 2013-07-23T03:14:36.253 に答える