9

是否可以使用为整个文件夹设置依赖项require.js

我知道您可以使用 shim 配置来设置文件的依赖项:

require.config({
    shim: {
        'plugin/backbone/xyz': {
            deps: ['lib/backbone'],
            exports: '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 上找到了关于它的要点,但我似乎再也找不到了。


澄清一下:这不是需要整个文件夹,而是为它设置依赖关系 - 文件夹中的所有文件在准备好初始化之前需要什么,每个文件都需要。这将通过为所有文件添加垫片来完成,但我只想为整个文件夹添加一次垫片:

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 的函数之一。不优雅,我承认,但它会完成这项工作。

于 2013-07-23T03:14:36.253 回答
1

@J_A_X 回答的启发

您可以创建一个应该共享相同依赖项的文件数组并动态创建 shim:

var config = { shim: { /*...*/ } }

var plugins = ['a', 'b', 'c', 'd'],
    plugin_shim = {
        deps: ['lib/backbone'],
        exports: 'Backbone'
    };  

plugins.forEach(function(file) {
    config.shim['plugin/backbone/' + file] = plugin_shim;
});

require.config(config);

但是,如果有人会使用 minuglify,这将不会很好用r.js

于 2013-07-23T08:26:47.080 回答