我有一个使用 RequireJS 和 jquery-mobile 的项目。我试图运行 r.js 来编译完整的项目,但似乎 jquery-mobile 从编译过程中被省略了。
我意识到 CDN 是大多数项目的一个选项,这个是内部的,可能没有网络连接,所以这里不是一个真正的选项。
这是我的主要配置文件:
require.config({
baseUrl: "js",
paths: {
"backbone": "vendor/backbone-amd/backbone",
"jquery": "vendor/jquery/jquery",
"jquery-mobile": "vendor/jquery-mobile-compiled/jquery-mobile",
"waypoints": "vendor/jquery-waypoints/waypoints",
"modernizr": "vendor/modernizr/modernizr",
"requirejs": "vendor/requirejs/require",
"underscore": "vendor/underscore-amd/underscore",
"text": "vendor/requirejs-text/text",
"handlebars": "vendor/handlebars.js/handlebars"
},
shim: {
"handlebars": {
exports: "Handlebars"
},
"modernizr": {
exports: "Modernizr"
}
}
});
// Includes File Dependencies
require([ "jquery", "backbone", "router/mobileRouter", "modernizr" ], function ($, Backbone, MobileRouter, Modernizr) {
$(document).on("mobileinit",
// Set up the "mobileinit" handler before requiring jQuery Mobile's module
function () {
// Prevents all anchor click handling including the addition of active button state and alternate link bluring.
$.mobile.linkBindingEnabled = false;
// Disabling this will prevent jQuery Mobile from handling hash changes
$.mobile.hashListeningEnabled = false;
}
);
if(Modernizr.touch) {
$(document).on("click", function(event) {
event.preventDefault();
});
}
require([ "jquery-mobile" ], function () {
// Instantiates a new Backbone.js Mobile Router
this.router = new MobileRouter();
});
});
这基本上是 jquery-mobile 附带的示例的精确副本。但正如您所看到的,我在路径中有“jquery-mobile”,它位于底部附近的嵌套需求中。
我的 app.build.js 看起来像这样:
({
"appDir": "../",
"baseUrl":"js",
"dir":"../../dist",
"mainConfigFile": "../js/main.js",
"modules": [
{
"name": "main"
}
],
"skipDirOptimize": true,
"optimizeCss": "standard"
})
在我运行以下命令后:
r.js -o app/build/app.build.js
我看到除了 jquery-mobile.js 之外,所有东西都被混入了 main.js。当我点击已编译的站点时,我发现唯一被拉取的 JS 文件是:requirejs.js、main.js 和 jquery-mobile.js。
为什么 jquery-mobile 不像其他脚本那样被缩小?