2015-04-03 63 views
0

我的JavaScript库需要能够动态加载可选脚本。我知道有几种方法可以做到这一点,但我的库应该在浏览器和Node.js中都能正常工作,而且我不想生成多个版本。我也不想重新发明轮子。在浏览器和节点中动态加载JavaScript文件

是否有推荐的技术来针对两个平台使用相同的代码?

+0

除非你尝试了一些东西,否则这对StackOverflow来说不是一个好问题。尝试http://programmers.stackexchange.com/但是这里有一个库,可以让你在客户端使用'require'也是http://browserify.org/ – 2015-04-03 17:07:08

+2

@JuanMendes - 这可能会被封闭为过于宽泛。 – GlenH7 2015-04-03 17:09:24

+0

@JuanMendes我有时会对此感到困惑。我认为StackOverflow的意义在于创建一个全面的问答数据库。这对其他人来说似乎是一个有用的问题,所以我在这里问了它。我目前正在寻找解决方案,并会在我找到问题时回答我自己的问题。 – mhelvens 2015-04-03 17:09:26

回答

0

浏览器和node.js以根本不同的方式加载脚本文件。浏览器要求您添加脚本标记或使用ajax获取代码,然后使用eval()或Function对象对其进行评估。 node.js有require()或者可以使用其他node.js I/O机制获取代码,然后对其进行类似评估。

在浏览器和node.js中都没有加载代码的单一方式。

因此,要编写一个可以在任一环境中加载代码的单个函数,您必须检测您的环境,然后针对该环境使用适当的方法。这不需要您的代码的两个版本,只有一个功能根据检测到的环境进行分支,然后为该环境执行适当的代码。

该分支可以背后单一功能(pseduo代码)被隐藏:

function loadLibrary(name, doneFn) { 
    if (node.js detected) { 
     // fetch the code using node.js I/O 
     // and then evaluate the code 
     // notify caller when the script has finished loading 
    } else { 
     // fetch the code by inserting script tags into the DOM 
     // notify caller when the script has finished loading 
    } 
} 

这将是用于与单件的代码同时定位平台一个推荐的方法。