我正在尝试使用requireJS并且效果很好! 我现在想使用优化器,我在浏览器中运行代码时遇到了一些问题。
我有这些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文件。
当我不使用优化器并仅加载文件时
<script src="/javascripts/lib/require.min.js" data-main="/javascripts/main"></script>
它工作得很好,但是当我运行r.js -o ./public/javascripts/build.js
并且只加载时
<script src="/javascripts/main-built.js"></script>
我在缩小的代码中收到错误Uncaught TypeError: undefined is not a function
。
如何解释?
以下是运行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
答案 0 :(得分:1)
这绝对是错误的:
require(['a.js'], function(A){
var Entity = new A();
});
您不应在向require
或define
提供的依赖项列表中使用扩展程序。模块应该没有扩展名。所以这里'a'
,而不是'a.js'
。使用'a.js'
将导致RequireJS在优化程序运行后无法加载您真正想要的内容。假设您有一个名为a.js
的文件,其中包含:
define(function () {
return function () {};
});
优化器会将其包含在您的main-built.js
文件中,如下所示:
define("a", function () {
return function () {};
});
注意define
的第一个参数现在是"a"
。这已由r.js
添加。这是模块的名称。加载main-built.js
时,会定义名为"a"
的模块。当您将require
与"a.js"
一起使用时,您告诉RequireJS您想要一个名为a.js
的文件中的内容,因此RequireJS将会查找并忽略其中的内容main-built.js
。
此外,jQuery 1.8或更高版本不需要垫片。
答案 1 :(得分:-1)
我刚刚添加了
shim: {
'jQuery': {
exports: '$'
}
}
进入build.js文件,它完美无缺!
谢谢!