0
我的JavaScript库需要能够动态加载可选脚本。我知道有几种方法可以做到这一点,但我的库应该在浏览器和Node.js中都能正常工作,而且我不想生成多个版本。我也不想重新发明轮子。在浏览器和节点中动态加载JavaScript文件
是否有推荐的技术来针对两个平台使用相同的代码?
我的JavaScript库需要能够动态加载可选脚本。我知道有几种方法可以做到这一点,但我的库应该在浏览器和Node.js中都能正常工作,而且我不想生成多个版本。我也不想重新发明轮子。在浏览器和节点中动态加载JavaScript文件
是否有推荐的技术来针对两个平台使用相同的代码?
浏览器和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
}
}
这将是用于与单件的代码同时定位平台一个推荐的方法。
除非你尝试了一些东西,否则这对StackOverflow来说不是一个好问题。尝试http://programmers.stackexchange.com/但是这里有一个库,可以让你在客户端使用'require'也是http://browserify.org/ – 2015-04-03 17:07:08
@JuanMendes - 这可能会被封闭为过于宽泛。 – GlenH7 2015-04-03 17:09:24
@JuanMendes我有时会对此感到困惑。我认为StackOverflow的意义在于创建一个全面的问答数据库。这对其他人来说似乎是一个有用的问题,所以我在这里问了它。我目前正在寻找解决方案,并会在我找到问题时回答我自己的问题。 – mhelvens 2015-04-03 17:09:26