我正在编写一个Node JS应用程序,我需要jQuery UI和jQuery Mobile。我正在使用Browserify将模块打包到一个js文件中。
我有以下代码在我的项目中包含jQuery和jQuery UI。
var jQuery = require('jquery');
require('jquery-ui-browserify');
它有效。当我尝试使用require:
添加jQuery mobile时出现问题require('./lib/jquery.mobile-1.4.0.min.js');
或使用脚本标记
<script src="/lib/jquery.mobile-1.4.0.min.js" type="text/javascript"></script>
我得到同样的错误:
“未捕获的TypeError:无法设置未定义的属性'mobile'。”
据我所知,我收到此错误是因为jQuery mobile在Window中查找jQuery对象但找不到它,但是如何修复它? npm上没有jQuery移动模块。
答案 0 :(得分:4)
这是一个使用browserify-shim和jquery + jquery mobile的简单可运行演示: https://gist.github.com/mchelen/a8c5649da6bb50816f7e
最重要的一行是:
package.json
"browserify-shim": {
"jquery": "$",
"jquery-mobile" : { "exports": "$.mobile", "depends": [ "jquery:$" ] }
},
entry.js
var $ = require('jquery');
$.mobile = require('jquery-mobile');
答案 1 :(得分:1)
您必须使用browserify垫片。
您可以使用grunt-browserify在页面加载前运行您的需求。
然后你可以简单地使用一个垫片导出'$'并在JQuery.mobile中需要jQuery,就像在这里使用另一个插件一样:
Shim a jQuery plugin with browserify
如果您不喜欢这种笨拙的方法,也可以使用https://github.com/thlorenz/browserify-shim
答案 2 :(得分:1)
您需要指定jquery-mobile的路径。
在packadge.json中
"devDependencies": {
"gulp": "3.8.7",
"browserify": "9.0.3",
"browserify-shim": "3.8.3",
// [...] many more hidden
"jquery": "1.11.0",
"jquery-mobile": "1.4.1"
},
"browser": {
"jquery-mobile": "./node_modules/jquery-mobile/dist/jquery.mobile.js"
},
"browserify": {
"transform": [ "browserify-shim" ]
},
"browserify-shim": {
"jquery": "$",
"jquery-mobile" : { "exports": "$.mobile", "depends": [ "jquery:$" ] },
"three": "global:THREE"
}
你在js文件中的:
var $ = require('jquery');
$.mobile = require('jquery-mobile');
您可以看到更多此here
我也在使用gulp。在gulpfile.js中:
gulp.task('browserify', ['jshint'], function () {
return browserify('./src/js/app.js')
.bundle()
.pipe(source('myjs.js'))
.pipe(gulp.dest('./js/'));
});
答案 3 :(得分:0)
我遇到了同样的问题。
现在我正在使用除了jquery和jquery-mobile之外的所有browerify,我将jquery和jquery-mobile的脚本标记添加到标题中,并在主体底部添加了bundle的脚本标记(所以,require( “../jquery”)和require(“../ jquery-mobile”)不再是必要的)。糟糕的解决方案,但它的工作原理
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link href="js/vendors/jquery.mobile-1.4.0.min.css" rel="stylesheet">
<script src="js/vendors/jquery-1.10.2.min.js"></script>
<script src="js/vendors/jquery.mobile-1.4.0.min.js"></script>
</head>
<body>
<div class="Application">
</div>
<script src="js/app.built.js"></script>
</body>
</html>