4

我正在考虑使用条件来指定 AMD 模块系统中的模块依赖项。例如,在浏览器上加载 libraryA,在服务器上加载 libraryB。

这可能看起来像这样:

define([window?"libraryA":"libraryB"],function(library){
    //do some stuff
});

这将允许我为 2 个模块构建一个抽象层。但这真的是个好主意吗?这样做有什么缺点吗?

4

1 回答 1

4

这种方法可能会导致构建工具出现问题。

更新:

经过进一步研究,我发现优化器默认不会读取主 JS 文件中的配置设置。因此,更简洁的解决方案是为客户端和服务器使用不同的地图配置

原来的:

更安全的方法可能是定义一个使其自身适应环境的模块,从而将所有条件代码保留在模块定义中,并以最可靠的格式保留所有依赖项列表。

// dependent module
define(["libraryAB"], function (library) {
    //do some stuff
});


// libraryAB.js dependency module
define([], function () {

    return window ?
        defineLibraryA() :
        defineLibraryB();

});

您也可以通过定义这种方式来保持libraryAlibraryB代码分开。libraryAB

// libraryAB.js dependency module
define(["libraryA", "libraryB"], function (libraryA, libraryB) {

    return window ? libraryA : libraryB;

});

//define libraryA.js and libraryB.js as usual

如果您想避免libraryA在服务器或libraryB客户端上执行,您可以让这些模块返回函数并在必要时记忆结果。

道德是,将所有非标准代码保存在模块定义中是最安全的,保持依赖列表良好且可预测。

于 2012-11-08T12:29:05.577 回答