我在javascript中有相当基本的知识。我打算在我的动态脚本加载应用程序中实现RequireJS。依赖管理。 浏览example
在示例中有4个js文件purchase.js,products.js,credits.js。 main.js.
main.js初始化流程。我知道main.js需要require
方法。
require(["purchase"],function(purchase){
purchase.purchaseProduct();
});
但是每个js文件都以define()
开头,例如来自purchase.js的代码片段
define(["credits","products"], function(credits,products) {
console.log("Function : purchaseProduct");
return {
purchaseProduct: function() {
现在根据这个例子说我的项目中是否有n
个js文件&我以这种方式编写代码。将来说我需要从我的应用程序中删除RequireJS。我必须编辑n
个js文件。
这不是js代码与requirejs库的紧密耦合吗?与在html文件中使用script
标记包含js文件的标准方式不同。
我是否在html文件中包含脚本标记的脚本。我没有必要编辑所有js文件以进行任何更改。
有没有其他方法可以在集中的位置为项目的每个js文件声明依赖项?
答案 0 :(得分:2)
当使用任何类型的模块加载系统时,通常无法避免紧耦合。
在requirejs的情况下,幸运的是,但每个文件需要更多的初始工作:
function myModule(dependency1, dependency2) {
//usual code
}
if (typeof define !== "undefined") {
define(["dependency1", "dependency2"], myModule);
} else {
myModule(dependency1, dependency2)
}
答案 1 :(得分:1)
这不是js代码与requirejs库的紧密耦合吗?
您在问题中显示的内容并不表示与 RequireJS 紧密耦合。您正在使用AMD规范声明模块并加载它们。唯一需要的是你需要一个与AMD兼容的模块加载器。这可能是RequireJS,也可能是Almond,也可能是带有node-amd-loader包的Node.js。我相信还有更多选择。
有没有其他方法可以在集中的位置为项目的每个js文件声明依赖项?
如果您不希望define
次调用显示在每个文件中,并且仍然保留代码的模块性,并且所有依赖项都位于“集中位置” “,RequireJS没有内置支持。您可以为此目的劫持shim
配置选项,但我不认为这是一件简单的事情。 shim
设置几乎是一个允许使用带有RequireJS的非模块化代码并且它依赖于全局空间上可用的符号的拐杖,这违背了保持模块性的目标。否则,您可以设计一个可以读取文件的构建过程,并根据此文件将每个源文件构建到一个正确的AMD模块中,方法是将代码包装到define
调用中。