javascript节点模块和普通脚本引用如何在浏览器中共存?

时间:2015-12-29 22:43:19

标签: javascript node.js knockout.js npm browserify

当采用模块化javascript方法进行开发时,使用Node.JS + npm和browserify捆绑到浏览器,如何处理可能需要使用未在npm中分发的javascript库的情况?最终这些库甚至不兼容模块化(amd / commonJs),因为它们不会以模块化方式暴露任何东西。其中一些存在于凉亭中,我知道对于那些情况,有一些资源,例如browserify变换debowerify,但如果目标库本身不像模块那样,它将不会有任何帮助。

所以,我也想弄清楚的是:一旦你通过node.js + npm模块走了模块化javascript的道路,它是否会影响到任何库的使用& #39;不是模块兼容的吗?

让我举一个具体的例子:

我有app和main.js入口点(安装了npm包knockout),代码如下:

var ko = require(' knockout');

我知道当这个ko变量通过browserify访问浏览器时,它不依赖于全局范围,而是有自己的范围,基本上捕获由npm加载的淘汰文件/模块中定义的所有内容。

然后我有一个不是节点模块的第三方库,通过使用knockout来提供dom操作。我必须提供第三方库的先决条件作为在我的html文件上引用敲除的附加显式<script>标记,这样将它挂钩到全局(窗口)范围。然后我会在两个地方进行淘汰赛,但彼此隔离。例如,我的main.js中的ko.applyBindings对于依赖于全局范围的淘汰的其他库来说是未知的。

如何(如果可能的话)我的模块化JavaScript实现如何处理这两方面的dom操作的共存?或者对于这种情况,是否必须采用互斥的编程模式(所有模块或所有非模块)?

1 个答案:

答案 0 :(得分:1)

嗯,两个字:

浏览器垫片

希望有人回答过。无论如何,我自己很值得一探究竟。我已经做到了,它有效。好读。

Make CommonJS-Incompatible Files Browserifyable