javascript - 从 CDN 浏览器化 jQuery UI

标签 javascript jquery-ui browserify browserify-shim grunt-browserify

我想使用Browserify但继续从 Google's CDN 加载 jQuery 和 jQuery UI而不是将代码连接到我的文件或 vendor 包中。我似乎不知道如何让它发挥作用。

加载 foo.js 时出现此错误:

Cannot find module 'jquery-ui'

这些是相关文件:

package.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 格式编写代码的全部目的是避免依赖全局变量?

最佳答案

此处不需要 external block 。这是为了排除您的 bundle 中的各种库...这就是为什么当将 require('jquery-ui')external block 一起使用时,您会收到该错误。

您想要的是将全局 jquery-ui 公开给您的 browserify 版本,如 here in the docs .

browserify-shim 配置为:

"browserify-shim": {
    "jquery": "global:$", // this is only if you're also loading jQuery via CDN/<script> tag
    "jquery-ui": {
      "depends": "jquery" 
    }
  }

关于javascript - 从 CDN 浏览器化 jQuery UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33749147/

相关文章:

javascript - 通过点击隐藏一个 DIV 并通过 JavaScript 使另一个 DIV 可见?

javascript - 匹配行分隔大小字符串的正则表达式

Javascript 点击元素

javascript - 如何使用默认日期填充日期选择器的输入元素

javascript - 在删除一个组件时,它会在可删除组件上多次添加它

node.js - 为客户端部署压缩 node_modules

javascript - 使用 Jasmine 进行异步回调测试

javascript - 就良好实践而言,带有闭包的 javascript 原型(prototype)是一件好事吗

jQuery UI Accordion : open multiple panels at once

javascript - 将 Browserify 与 gulp 一起使用时,Navigo 未定义