requireJS,定义语句的来源

requireJS, origin of the define statement

我正在开发一个使用 Requirejs 进行依赖管理的大型项目,具体来说,每个文件的约定都具有这种模式:

define(['dependency1', 'dependency2'], function (dependency1, dependency2) {
    ... some code ...
});

现在我正在调查某个文件试图 require 不再存在的依赖项的故障。

我从 RequireJS 收到此错误:

GET https://some-location/some-file.js net::ERR_ABORTED

Uncaught Error: Script error for: some-file
http://requirejs.org/docs/errors.html#scripterror
    at C (require.min.js:8)
    at HTMLScriptElement.onScriptError (require.min.js:29)
    at HTMLScriptElement.nrWrapper (...)

我怎么知道哪个文件包含错误的依赖项? 简单地搜索项目文件是不够的,因为它是一个跨越多个代码库的大型项目。

有没有办法让 RequireJS 告诉我是谁要求的?

您使用的 requirejs 是什么版本?我正在使用 2.3.2,错误输出提供了更多信息,请查看:

GET http://localhost:9090/requirejs/js/dependency1.js net::ERR_ABORTED
require.js:168 Uncaught Error: Script error for "home/dependency1",needed by: home/somefile
http://requirejs.org/docs/errors.html#scripterror
    at makeError (require.js:168)
    at HTMLScriptElement.onScriptError (require.js:1735)

请注意,needed by: home/somefile 部分告诉我们文件是 requiring 失败的依赖项。这是我做的本地小测试

需要配置

require.config(
    {
        paths: {
            'home': './js'
        },
        callback: function() {
            require(['home/somefile'], function(a) {
                console.log(a);
            });
        }
    }
);

./js/somefile.js

define(['home/dependency1'], function (dependency1) {
    console.log(dependency1);
});

因此,在得到错误 Uncaught Error: Script error for "home/dependency1",needed by: home/somefile 后,我们可以说文件 requiring 失败的依赖项是 PATH_TO_OUR_PROJECT/js/somefile.js。记住我们需要注意我们在require配置中的paths

您可以播放和测试 Global requirejs.onError function,但它不会为您提供比常规 requirejs 输出更多的信息。

Handling Errors 文档中的更多信息。
希望对你有帮助。

根据 Castro Roy 的回答,我进行了测试以验证这确实是 requireJS 版本的问题。

index.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Require Test</title>
        <script data-main="main" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.2/require.min.js"></script>
    </head>
    <body></body>
</html>

main.js

requirejs(['someFile'], function(someFile) {
    console.log('main executing')
});

someFile.js

define(['someDependency'], function (someDependency) {
    console.log('someFile executing')
});

和someDependency.js明显不见了。


结果:

使用 requireJs 2.1.20(在我的项目中使用)

GET http://localhost:63342/playground-simple/someDependency.js net::ERR_ABORTED
Uncaught Error: Script error for: someDependency
http://requirejs.org/docs/errors.html#scripterror
    at makeError (require.min.js:1)
    at HTMLScriptElement.onScriptError (require.min.js:1)

然后再次使用 requireJs 2.3.2

GET http://localhost:63342/playground-simple/someDependency.js net::ERR_ABORTED
Uncaught Error: Script error for "someDependency", needed by: someFile
http://requirejs.org/docs/errors.html#scripterror
    at makeError (require.js:168)
    at HTMLScriptElement.onScriptError (require.js:1735)

很清楚 是的。 这是版本问题,而不是我的项目的一些独特行为,此信息在更高版本的 require 的错误消息中给出。

遗憾的是我无法找到此更改的任何文档