gpt4 book ai didi

javascript - Requirejs:依赖项乱序加载

转载 作者:行者123 更新时间:2023-11-30 12:14:38 24 4
gpt4 key购买 nike

所以我有几个 javascript 文件,我想按特定顺序运行,而不是在 html 页面中执行脚本标记,我想使用 requirejs 以便我可以模块化代码。在我开始使用定义 block 进行模块化并开始重构代码之前,我只想设置依赖顺序。所以我有这样的文件

index.html

<script src="scripts/depends/require.js"></script>
<script>
(function(){
require(['scripts/main.js', function(){}]);
}());
</script>

主要.js

require(['scripts/services/fileLoader.js', 'scripts/services/Options.js'], function(){
// do stuff
});

文件加载器.js

require([
'scripts/services/alert.js',
'scripts/services/game.js',
'scripts/services/parser.js',
'scripts/services/options.js'
], function() {
// do stuff
});

现在很明显我想要什么。我希望 main 调用 fileLoader.js,然后我希望 fileLoader.js 在调用其回调之前调用它的每个依赖项。然后当 fileLoader.js 完成它的回调时,我希望 main 在最后调用它的回调之前以类似的方式完成它的依赖项,这就是我认为 requirejs 所做的。

然而,这就是发生的事情。主调用需要,我可以看到加载了 fileLoader.js 和 options.js。但是在 fileLoader 需要的任何依赖项被调用之前(也不是它自己的回调需要为 main 正确运行而运行),调用 main.js 回调。这是怎么回事?

tl;dr - 在依赖回调之前调用主回调,为什么?

最佳答案

问题是您在应该使用 define 的地方使用 require 并且您没有通过配置选项 enforceDefine: true 对 RequireJS。您应该始终使用 enforceDefine: true 运行 RequireJS,除非您可以举出最重要的理由不这样做。没有它,如果 RequireJS 加载一个没有 define 的模块,它只会耸耸肩继续前进。你得到了你得到的行为。

问题是只有 define defines 模块,require 不行。所以如果模块文件中没有define 调用,RequireJS 不知道模块实际依赖什么。它安排加载 require 调用的依赖项中列出的模块,但它们不会被视为将在文件中定义的模块的依赖项。

所以在 main.js 中用 define 替换顶层 require。在 fileLoader.js 中,以及您要创建的所有其他模块中。

此外,不要将 .js 放在模块名称的末尾。 RequireJS 为你做。如果你真的这样做了,你会得到意想不到的结果。这不是您的问题的原因,但在其他情况下可能是一个因素。

关于javascript - Requirejs:依赖项乱序加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32766015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com