¿Es posible cargar múltiples archivos JavaScript desde uno solo?

Seguro. Puede hacer que el script del cargador cree dinámicamente más elementos y establezca sus atributos src para obtener lo que desea.

 /** * Takes an array of script URLs and generates  tags to include them. */ function loadComponents(scriptUrls) { var script, components = document.createDocumentFragment(); for (var i = 0, len = scriptUrls.length; i < len; i++) { script = document.createElement('script'); script.src = scriptUrls[i]; components.appendChild(script); } document.body.appendChild(components); } 

Agregué algunas optimizaciones (como el fragmento de documento) pero la idea básica sigue siendo la misma. Si necesita administrar dependencias o controlar el orden en que se cargan las cosas, debe deshacerse de esa función y consultar una biblioteca elegante de carga de scripts como require.js. [1] [2]

¿O necesito unificar manualmente todos estos scripts en un solo archivo?

No tiene que hacerlo, pero reducir la cantidad de solicitudes HTTP hará que su página de destino se cargue más rápido. Dependiendo de su situación, tal vez podría apuntar la etiqueta de script que se le permite tener en un controlador del lado del servidor que combina sus componentes cuando se los llama en lugar de cargarlos con Javascript. Eso también evitaría algunos dolores de cabeza de dependencia.

¿Es posible que yo los proteja de alguna manera para que no entren en conflicto con el código JS en el sitio remoto?

La forma más fácil es envolverlo en una expresión de función que mantenga sus cosas fuera del alcance global.

 // Before var so, manyVariables, lookAtAllTheseVariables, thisWillDefinitely, clobberSomething; function ohWellShipIt() { fail(); } // After (function() { var so, manyVariables, lookAtAllTheseVariables, thisWillDefinitely, clobberSomething; function ohWellShipIt() { lessFail(); } })(); 

Si quieres ponerte elegante, hay otras técnicas (más poderosas) como el patrón de módulo [2] que pueden hacer lo que quieras.

También vea la respuesta de Ethan Winters para algo sutil pero importante que me perdí. El uso de require.js lo evitará, pero aún debe echar un vistazo.

—-
[1] http://requirejs.org
[2] O busca async y defer : http://davidwalsh.name/html5-async
[3] http://www.yuiblog.com/blog/2007…

Esta es una técnica común en realidad. Sitios como Google Analytics [1], Scriptaculous [2] y Adroll [3] utilizan la carga dinámica de scripts:

Google analitico:

  (función () {
     var ga = document.createElement ('script'); 
     ga.type = 'texto / javascript';  ga.async = verdadero;
     ga.src = ('https:' == document.location.protocol? 'https: // ssl': 'http: // www') + '.google-analytics.com / ga.js';
     var s = document.getElementsByTagName ('script') [0];
     s.parentNode.insertBefore (ga, s);
 }) (); 

Scriptaculous:

  tratar{
     // la inserción a través de DOM falla en Safari 2.0, por lo que el enfoque de fuerza bruta
     document.write ('

Adroll:

  (función () {
     var oldonload = window.onload;
     window.onload = function () {
         __adroll_loaded = true;
         var scr = document.createElement ("script");
         var host = (("https:" == document.location.protocol)? "https://s.adroll.com": "http://a.adroll.com");
         scr.setAttribute ('async', 'true');
         scr.type = "texto / javascript";
         scr.src = host + "/j/roundtrip.js";
         document.documentElement.firstChild.appendChild (scr);
         if (oldonload) {oldonload ()}};
 } ()); 

—-
[1] http://www.google.com/analytics/
[2] http://script.aculo.us/
[3] http://www.adroll.com/

Bulat Bochkariov está muerto, pero descuidó un tema importante. Aquí hay un hilo de stackoverflow que entra en más detalles sobre los problemas con este método (es decir, las secuencias de comandos ahora se cargan de forma asíncrona, por lo que no puede suponer una secuencia de comandos X llamada antes de que la secuencia de comandos Y se cargue como lo haría normalmente)

http://stackoverflow.com/questio