javascript - 使用 browserify 要求扩展的正确方法

标签 javascript jquery knockout.js browserify

最好的方法是使用 Browserify 为 jQuery 或 Knockout 等公共(public)库添加扩展。 ?

例如,像 knockout-switch-case 这样的项目, 全局 ko (knockout) 变量不会传递给模块定义调用。

knockout-switch-case 的 AMD 代码是:

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module.
        define(['knockout'], factory);
    } else {
        // Browser globals
        factory(root.ko);
    }
}(this, function(ko) {

它期望 ko( knockout )是 root 上的全局变量,通常是 window 但在使用 Browserify 时它是 对象{}

我已经尝试过使用 browserify-shim 的示例用这样的东西,但它没有按预期工作(尽管它确实适用于 knockout-mapping ,它有更好的模块舞蹈):

  knockout:
    path: VENDOR_PATH + '/knockout.js'
    exports: 'ko'
    depends:
      jquery: '$'

我觉得好像我必须忽略一些非常明显的东西,因为我希望这将是一个相当常见的模块定义模式,用于包含任何 jQuery、Knockout 或依赖于全局的库的任何其他扩展。或者这可能是一个相当特定于 knockout-switch-case 正在做的事情的问题。

无论如何,我们真诚地感谢您的想法和评论。

最佳答案

这个 browserify-shim 配置对我有用:

shim(browserify(), {
    jquery: {
        path: './js/vendor/jquery.js',
        exports: '$'
    },
    'knockout': {
        path: './js/vendor/knockout.js',
        exports: 'ko',
        depends: {
            jquery: '$'
        }
    },
    'knockout-switch-case': {
        path: './js/vendor/knockout-switch-case.js',
        exports: null,
        depends: {
            knockout: 'ko'
        }
    }
})

这样,您就可以像往常一样要求:var ko = require('knockout');

关于javascript - 使用 browserify 要求扩展的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19781086/

相关文章:

javascript - 使用 css 或 js 突出显示半高文本

jquery - 如何使用 Selectize 选择所有选项?

javascript - 远程 javascript-ajax-php 攻击

javascript - String.fromCharCode 和字符集

knockout.js - 带下拉列表的计算 Observable 的性能

javascript - 向上钻取时,将数据动态添加到 highcharts 的顶层

javascript - 防止 HTML 文件输入在使用 Android 的 native 文件选择器时选择 Google Drive 中的文件

javascript - 获取knockout中被点击元素的索引

javascript - knockout : ko observable without a default value

javascript - 创建 Cookie 以不再在民意调查中投票