如何在有冲突的库的网站上正确包含lodash / underscore?

时间:2014-12-19 07:08:12

标签: javascript html underscore.js lodash

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

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

然后写得很糟糕的libs会死于可怕的死亡,因为他们希望_成为别的东西。我知道lodash / underscore有一种称为“无冲突”的模式,需要执行js代码:

var lodash = _.noConflict();

但是这个代码需要在某个地方执行,而且我很难确保它在所有编写错误的库之前执行。是否有任何简单的方法将lodash包含在noconflict模式中,所以我不需要搜索安全的地方来手动启用noconflict模式?比如lodash.min.noconflict.js

3 个答案:

答案 0 :(得分:9)

只要在手动方法之前没有相关的异步脚本,它就应该始终有效:

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js"></script>
<script>
_u = _.noConflict(); // lets call ourselves _u
</script>

如果其他脚本在此之前或之后设置/使用_,则没有区别。 (lodash会记住_的最后一个设置,并在_.noConflict()调用中恢复它。)

但是如果之前的脚本是异步的,则总是有可能允许它们在这两个脚本之间执行。你必须要么使用AMD,要么将手动设置与lodash结合在同一个脚本中,以避免使用异步脚本进行比赛。

答案 1 :(得分:2)

&#34;最新&#34; CDN的版本是4.17.5 :)

<script scr="//cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"> </script>
<script>
_u = _.noConflict();
</script>

答案 2 :(得分:0)

如果你已经加载了lodash的cdn脚本标签,你可以直接在另一个js文件中使用“_”。