Requirejs 如何使用r.js获取单个javascript页面

Requirejs 如何使用r.js获取单个javascript页面,requirejs,Requirejs,我第一次尝试使用requireJS,效果非常好! 我现在想使用优化器,在浏览器中运行代码时遇到一些问题 我有这些JS文件: /public/javascripts/build.js /public/javascripts/main.js /public/javascripts/lib/jquery.min.js /public/javascripts/lib/require.min.js /public/javascripts/a.js /public/javascripts/b.js /pu

我第一次尝试使用requireJS,效果非常好! 我现在想使用优化器,在浏览器中运行代码时遇到一些问题

我有这些JS文件:

  • /public/javascripts/build.js
  • /public/javascripts/main.js
  • /public/javascripts/lib/jquery.min.js
  • /public/javascripts/lib/require.min.js
  • /public/javascripts/a.js
  • /public/javascripts/b.js
  • /public/javascripts/c.js
a、 js、b.js和c.js是我使用requireJS为我的应用程序定义的模块

main.js:

require.config({
    paths: {
        'jQuery': 'lib/jquery.min.js'
    },
    shim: {
        'jQuery': {
            exports: '$'
        }
    }
});
require(['a.js'], function(A){
    var Entity = new A();
});
build.js

({
    baseUrl: ".",
    paths: {
        requireLib: "lib/require.min",
        jquery: "lib/jquery.min"
    },
    name: "main",
    out: "main-built.js",
    include: ["requireLib"]
})
另外,我想知道为什么我们必须将库的路径指定到build.js而不是其他javascript文件中

当我不使用优化器而只加载文件时
它工作得很好,但是当我运行
r.js-o./public/javascripts/build.js
并且只加载
我得到一个错误
未捕获类型错误:未定义不是缩小代码中的函数

怎么解释呢

下面是我在运行r.js时得到的日志

Tracing dependencies for: main
Uglifying file: /public/javascripts/main-built.js

/public/javascripts/main-built.js
----------------
/public/javascripts/lib/require.min.js
/public/javascripts/a.js
/public/javascripts/b.js
/public/javascripts/lib/jquery.min.js
/public/javascripts/c.js
/public/javascripts/main.js

这绝对是错误的:

require(['a.js'], function(A){
    var Entity = new A();
});
您不应该在提供给
require
define
的依赖项列表中使用扩展名。模块的命名应不带扩展名。所以这里是
'a'
,而不是
'a.js'
。使用
'a.js'
将导致RequireJS在优化器运行后无法加载您真正想要的内容。假设您有一个名为
a.js
的文件,该文件具有:

define(function () {
    return function () {};
});
优化器会将其包含到您的
main build.js
文件中,如下所示:

define("a", function () {
    return function () {};
});
注意
定义的第一个参数现在是
“a”
。这是由
r.js
添加的。这是模块的名称。加载
main build.js
时,将定义名为
“a”
的模块。当您将
require
“a.js”
一起使用时,您是在告诉RequireJS您希望在名为
a.js
的文件中找到某个内容,因此RequireJS将查找该内容,并忽略
main builded.js
中的内容

另外,jQuery1.8或更高版本不需要垫片。

我刚刚添加了

shim: {
    'jQuery': {
        exports: '$'
    }
}
在build.js文件中,它可以完美地工作


谢谢

这些路径在你的问题中没有加起来。只需提到一点:
r.js
跟踪显示了
/public/javascripts/main build.js
中的内置文件。但是你说你用
加载它。你能编辑这个问题,使你的路径一致吗?还要确保没有打字错误
mains.js
看起来像一个打字错误,因为它在其他任何地方都是
main
@Louis谢谢你的帮助,我刚刚把它搞错了!关于
main build.js
文件,这只是堆栈上的一个错误。您的路径仍然不正确。我已将我使用的文件中的所有路径添加到我的项目目录中,您仍然没有哪些路径?我认为这里存在语言问题。短语“您的路径不累加”意味着“您的路径不一致”。问题开头的路径列表显示
main.js
的路径是
/public/javascripts/main.js
,但是
r.js
的输出显示了该路径。这是一条不同的路径,与第一条路径不一致。