使用浏览器化要求扩展的正确方法
Correct way to require extensions with browserify
最好的方法是包含像jQuery或Knockout这样的公共库的扩展?
例如,对于像 knockout-switch-case
这样的项目,全局 ko
(挖空(变量不会传递给模块定义调用。
用于挖空开关机箱的 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
,但是当使用浏览器化时,它是Object {}
的。
我已经尝试使用类似 browserify-shim
的示例,但它没有按预期工作(尽管它确实适用于具有更好的模块舞蹈的淘汰映射(:
knockout:
path: VENDOR_PATH + '/knockout.js'
exports: 'ko'
depends:
jquery: '$'
我觉得我一定忽略了一些必须非常明显的东西,因为我希望这将是一个相当常见的模块定义模式,用于包含任何 jQuery、Knockout 或任何其他依赖于全局的库的扩展。或者,也许这是一个相当特定于敲除开关案例正在做的事情的问题。
无论如何,衷心感谢想法和评论。
这个浏览器填充码配置对我有用:
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');
相关文章:
- 如何在扩展jQuery方法时传递参数
- 有没有一种方法可以使用任何浏览器扩展整个dom树'的开发工具
- 当从Chrome扩展动态注入JS时,从onload()内部调用方法
- 用jQuery方法扩展Zepto.js?scrollTop()
- Chrome扩展:是否有一种方法可以运行JavaScript来获取页面上的内部html,并将其保存到扩展中的变量中
- 为什么这个扩展方法不起作用
- 使用多功能框在 chrome 扩展程序中包含内联自动填充功能的任何方法
- 下划线扩展方法和结构.js子类
- 如何用document.createElement(“input”)方法使输入文本字段动态扩展
- 如何使用自定义查询方法扩展水线
- 使用按值删除元素的自定义方法扩展数组
- 无法在主干中使用 BaseView 调用未定义的方法“扩展”
- 将 jQuery 的 .val() 方法扩展到非输入元素
- 在angular 2中使用自定义方法扩展Typescript Type
- 通过重新定义父方法扩展Jquery UI中的小部件
- 用自定义方法扩展DOM元素
- 如何在JavaScript中使用许多方法扩展函数
- 我可以用“静态方法”扩展对象、函数、日期等吗?在节点
- 为显示和隐藏方法扩展了bootstrap-collapse.js
- 如何用一种新方法扩展JavaScript倒计时功能