javascript - 在 AMD 模块中使用条件依赖是个好主意吗?

标签 javascript module js-amd

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

这可能是这样的:

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

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

最佳答案

That approach could cause problems for the build tool.

更新:

经过进一步研究,我发现 config settings in your main JS file are not read by default by the optimizer.因此,更清洁的解决方案是使用不同的 map config用于客户端和服务器。

原文:

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

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


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

    return window ?
        defineLibraryA() :
        defineLibraryB();

});

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

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

    return window ? libraryA : libraryB;

});

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

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

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

关于javascript - 在 AMD 模块中使用条件依赖是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13287819/

相关文章:

javascript - RequireJS 加载叶模块

javascript - Require.js 和简单地在 DOM 中创建 <script> 元素有什么区别?

javascript - 使用 AMD (require.js) 时如何在 Backbone.js 中加载自举模型

javascript - 如何在 javascript 中添加换行符?

javascript - 防止后期数据伪造

node.js - 如何在 Node.js require() 中使用另一个模块中的一个模块功能

php - 我在 Prestashop 中看不到我的测试模块页面

javascript - 在模态弹出窗口中播放嵌入式 YouTube 视频?

javascript - 如何为通过 URL 传递变量创建额外的保护? [JavaScript]

python - 属性错误 : module 'numpy' has no attribute 'matlib'