【问题标题】:Correct way to require extensions with browserify使用 browserify 要求扩展的正确方法
【发布时间】:2013-11-05 02:45:01
【问题描述】:

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

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

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(淘汰赛)成为root 上的全局变量,通常是window,但在使用Browserify 时它是Object {}

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

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

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

无论如何,由衷地感谢想法和cmets。

【问题讨论】:

  • 你需要填充 knockout-switch-case 而不是 ko 本身所以尝试这样的事情:shim(browserify(), { 'knockout-switch-case': { path: './js/vendor/knockout-switch-case.js' , exports: null , depends: { knockout: 'ko' } } })

标签: javascript jquery knockout.js browserify


【解决方案1】:

这个 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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2012-05-28
    • 1970-01-01
    • 2017-09-14
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多