一些javascript库作为完全连接的文件分发,包括所有依赖库。如果使用多个版本的库,像JQuery这样的库提供了一种处理冲突的方法。但是如果编译/连接的javascript文件包含一个没有内置处理冲突方式的库,并且我使用的是同一个库(但是版本不同),是否有一种通用方法来包装我正在使用的版本和为它添加自定义命名空间?或者这取决于所使用的库?
答案 0 :(得分:2)
这取决于图书馆。如果它在一个名称空间下提供所有功能,则可以先包含您的版本,在不同的变量/名称下存储对它的引用,(如果可能发生冲突,则取消设置原始版本),然后再包含其他库。
看起来像这样:
<script src="MyLibraryV1.js"></script>
<script>
// Assuming all functions are available under `$`
var MyLibraryV1 = $;
// Now the next script can overwrite `$`.
// Optionally we can also delete/undefine this symbol:
delete window.$;
</script>
<script src="OtherLibraryWithDependencies.js"></script>
<script>
// For easy access, you can use an immediate function to still let `$`
// refer to your library version. It should not affect the other code
// (but if it does you obviously have to use the other name)
(function($) {
// put all code that needs `MyLibraryV1` here
}(MyLibraryV1));
</script>
当然,更好的是OtherLibraryWithDependencies
能够正确封装所有依赖项,以便它们不会泄漏到全局范围内。