【发布时间】: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