Javascript 如何在另一个js文件中包含js文件?

Javascript 如何在另一个js文件中包含js文件?,javascript,Javascript,我如何将一个js文件包含到另一个js文件中,以便遵守规则并避免代码重复。这不可能直接实现。你也可以编写一些预处理器来处理这个问题 如果我理解正确,那么以下是有助于实现这一目标的措施: 使用一个预处理器,它将运行JS文件,例如查找“@import somefile.JS”之类的模式,并用实际文件的内容替换它们。Nicholas Zakas(Yahoo)用Java编写了一个这样的库,您可以使用() 如果您使用的是Ruby on Rails,那么您可以尝试使用Jammit asset打包,它使用as

我如何将一个js文件包含到另一个js文件中,以便遵守规则并避免代码重复。

这不可能直接实现。你也可以编写一些预处理器来处理这个问题

如果我理解正确,那么以下是有助于实现这一目标的措施:

  • 使用一个预处理器,它将运行JS文件,例如查找“@import somefile.JS”之类的模式,并用实际文件的内容替换它们。Nicholas Zakas(Yahoo)用Java编写了一个这样的库,您可以使用()

  • 如果您使用的是Ruby on Rails,那么您可以尝试使用Jammit asset打包,它使用assets.yml配置文件,您可以在其中定义可以包含多个文件的包,然后在实际网页中按包名引用它们

  • 尝试使用模块加载器或脚本加载器,这样可以控制加载顺序并利用并行下载

JavaScript目前不提供将JavaScript文件包含到另一个CSS(@import)中的“本机”方式,但上述所有工具/方式都有助于实现您提到的DRY原则。我可以理解,如果您来自服务器端背景,可能感觉不直观,但事情就是这样。对于前端开发人员来说,这个问题通常是一个“部署和打包问题”


希望有帮助。

您需要编写文档。写入对象:

document.write('<script type="text/javascript" src="file.js" ></script>');
document.write(“”);

并将其放在主javascript文件中

您只能在HTML页面中包含一个脚本文件,而不能在另一个脚本文件中包含。也就是说,您可以编写JavaScript,将“包含的”脚本加载到同一页面:

var imported = document.createElement('script');
imported.src = '/path/to/imported/script';
document.head.appendChild(imported);
但是,您的代码很可能依赖于“包含的”脚本,在这种情况下,它可能会失败,因为浏览器将异步加载“导入的”脚本。您最好的选择是简单地使用第三方库,如jQuery或YUI,这为您解决了这个问题

// jQuery
$.getScript('/path/to/imported/script.js', function()
{
    // script is now loaded and executed.
    // put your dependent JS here.
});

我不同意
文档。编写
技巧(请参阅)。我喜欢
document.getElementsByTagName('head')[0].appendChild(…)
(请参阅),但有一个重要问题:脚本执行顺序

最近,我花了很多时间复制,甚至著名的jQuery插件也使用相同的技术(参见src)加载文件,但其他人也报告了这个问题。假设您有一个JavaScript库,它由许多脚本组成,一个
loader.js
加载所有部分。有些部分相互依赖。假设您在
loader.js
之后包含另一个
main.js
脚本,该脚本使用
loader.js
中的对象。问题是,有时在
loader.js
加载所有脚本之前执行
main.js
$(document.ready)(函数(){/*code here*/})的用法
main.js
脚本中没有帮助。在
loader.js
中使用级联
onload
事件处理程序将使脚本按顺序加载而不是并行加载,并使
main.js
脚本难以使用,它应该只是
loader.js
之后的某个包含

通过在我的环境中重现这个问题,我可以看到**Internet Explorer 8中脚本的执行顺序在包含JavaScript*方面可能有所不同。如果需要包含相互依赖的脚本,这是一个非常困难的问题。中描述了该问题,建议的解决方法是使用
文档。writeln

document.writeln("<script type='text/javascript' src='Script1.js'></script>");
document.writeln("<script type='text/javascript' src='Script2.js'></script>");
document.writeln(“”);
文件。书面形式(“”);
因此,在“脚本并行下载,但按照写入页面的顺序执行”的情况下,在从
document.getElementsByTagName('head')[0].appendChild(…)
技术更改为
document.writeln
之后,我再也没有看到这个问题

因此,我建议您使用
document.writeln


更新:如果有人感兴趣,他们可以尝试在Internet Explorer中加载(并重新加载)(页面使用
文档.getElementsByTagName('head')[0]。appendChild(…)
技术),然后与使用的
文档.writeln进行比较。(页面的代码比较脏,不是我写的,但可以用来重现问题)。

你能举个例子吗?我编辑了我的答案,以便更好地解释我的想法。希望这一次我足够清楚。可能的重复或现在看来是典型的重复选择。呃,请不要提倡使用
文档。write()
@Matt Ball:你是对的,但既然Vahan是新来的,你可能想解释原因。@Konerak:.+1我不同意
文档的批评者。write
。我在回答这个问题时写了更多的信息。@Matt:有趣的是,在这个问题上投票最多的答案提倡使用document。写一些简单的事情,比如加载脚本。我只能重复:如果使用
$。getScript
加载并执行第一个脚本后,将开始加载第二个依赖的脚本。它是顺序加载,而不是并行加载。此外,如果有人包含了per
这样的
loader.js
文件,它加载了一些JavaScript库(比如jQuery UI),那么就不能只加载在下一个
中使用库的
main.js
。所以JavaScript库的使用将不像往常那么容易。为了理解:我想使用这种方法,但我们应该提出更多建议以使其切实可行。如果是您的第一个建议,我们必须使用
imported.onload
来级联脚本。但在这种情况下,我们仍然面临着我所描述的同样的问题