如何在存在冲突库的网站上正确引入lodash/underscore?

11

我有一个网站,其中包含了许多第三方的JavaScript模块通过script标签引入。我需要为我的代码添加lodashunderscore,但是如果我只是像这样从CDN添加它:

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js"></script>

糟糕的写法会导致库因为期望_代表其他意思而死亡。我知道lodash/underscore有一种叫做“no conflict”(无冲突)模式,需要执行js代码:

then badly written libs die terrible death because they expect _ to be something else. I know that lodash/underscore have something called "no conflict" mode, that requires js code to be executed:

var lodash = _.noConflict();

但是这段代码需要在某个地方执行,我很难确保它在所有写得糟糕的库之前执行。有没有一种简单的方法可以将lodash已经包含在noconflict模式中,这样我就不需要手动搜索安全的位置来启用noconflict模式了吗?比如lodash.min.noconflict.js


1
没有想法。如果你找到了,请将其发布为答案。 - Ved
3个回答

12
只要在手动方法之前没有相关的异步脚本,它就应该始终起作用:
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
<script>
_u = _.noConflict(); // lets call ourselves _u
</script>

如果其他脚本在此之前或之后设置/使用下划线,都没有影响。 (lodash会记住_的最后一次设置,并在_.noConflict()调用时恢复它。)

但是,如果在此之前的脚本是异步的,那么它们总是有可能在这两个脚本之间执行。为避免与异步脚本的竞争,您必须使用AMD或将手动设置合并到与lodash相同的脚本中。


截至目前,最新的CDN链接为:https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.jsOP可以选择更新答案 :) - kmonsoor

2
最新的CDN版本是4.17.15 :)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"> </script>
<script>
_u = _.noConflict();
</script>

1
如果您已经加载了Lodash的CDN脚本标记,那么您可以在另一个js文件中直接使用"_"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接