【发布时间】:2017-09-30 02:50:26
【问题描述】:
我有一个庞大且不断增长的 JavaScript 程序,为了便于维护,我想将其拆分为单独的文件,但我不知道这是否可行。我使用here 描述的揭示模式将其分解为模块。这很有帮助,这可能是我在逻辑上能做的所有事情。
这是一个非 Rails Ruby/Sinatra/Rack 中间件/ES6 JavaScript 应用程序。我实施了 Sprockets 来维护资产管道。它使用 jQuery Mobile 单页架构,这是维护活动物联网 WebSocket 连接所必需的。因此,HTML 页面和 JavaScript 函数一旦加载,就必须始终进行维护。
JavaScript 的模型是:
$(function ($, window, document) {
let globalTriggered;
const constOne = [1, 2, 3];
const consDot = '.';
$("body").pagecontainer({
defaults: false
});
$(document).on("pagecreate", null, function () {
if (globalTriggered === false) {
globalTriggered = true;
let Module1 = (function () {
let privateMethod1 = function () {
Module2.anotherMethod2()
};
let someMethod1 = function () {
privateMethod1()
};
let anotherMethod1 = function () {
};
return {
someMethod1: someMethod1,
anotherMethod1: anotherMethod1
};
})();
let Module2 = (function () {
let privateMethod2 = function () {
};
let someMethod2 = function () {
Module1.someMethod1();
privateMethod2()
};
let anotherMethod2 = function () {
Module1.anotherMethod1()
};
return {
someMethod2: someMethod2,
anotherMethod2: anotherMethod2
};
})();
} // stabilzer end
}); // pagecreate end
}(window.jQuery, window, document)); // function end
我想做的是将模块(如本例中的 Module1 和 Module2)分离到它们自己的源文件中,同样是为了可维护性。
我考虑过 ES6 的导出/导入选项,但导入/导出必须始终在顶层完成。 Sprocket 有一个类似的限制,即一旦遇到代码,它就会停止搜索指令。我曾考虑尝试通过使用 require_self 来破解 Sprocket,但这可能行不通,如果这样做会很丑陋。
有什么选择吗?谢谢。
【问题讨论】:
-
那些模块好像没有任何基于闭包的依赖,所以你可以把它们放在任何地方
标签: javascript jquery jquery-mobile sprockets es6-modules