我想使用Browserify ,但继续从Google 的 CDN加载 jQuery 和 jQuery UI,而不是将代码连接到我的文件或供应商包中。我似乎无法弄清楚如何让它工作。
加载时出现此错误foo.js
:
找不到模块'jquery-ui'
这些是相关文件:
包.json
{
// ...
"devDependencies": {
"browserify-shim": "^3.8.11",
"deamdify": "^0.1.1",
"grunt": "^0.4.5",
"grunt-browserify": "^4.0.1"
},
"dependencies": {
"jquery": "^2.1.4",
"jquery-ui": "^1.10.5"
},
"browserify-shim": {
"jquery": "global:$",
"jquery-ui": {
"depends": "jquery",
"exports": null
}
}
}
Gruntfile.js
'use strict';
module.exports = function (grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
browserify: {
options: {
external: [
'jquery',
'jquery-ui'
],
transform: [
'browserify-shim',
'deamdify'
]
},
app: {
files: [{
expand: true,
cwd: 'public/js',
src: '*.js',
dest: 'assets/js'
}]
}
}
});
grunt.loadNpmTasks('grunt-browserify');
};
foo.js
'use strict';
var $ = require('jquery');
require('jquery-ui');
$(document).ready(function () {
console.log('Hello world');
$('button').button();
});
我也尝试过exclude
,external
它产生了相同的结果。有什么办法可以做到这一点?
我意识到还有debowerify变换,但如果可能的话,我想避免使用 Bower。
更新:我注意到注释掉require
调用'jquery-ui'
会起作用,因为 jQuery 默认公开全局$
,jQuery
但我认为用 CommonJS 甚至 AMD 格式编写代码的全部意义在于避免依赖全局变量?