Nodejs EJS parciales con scripts en la cabeza

Estoy trabajando con EJS para renderizar y servir páginas HTML desde un servidor Nodejs. Algunos de los parciales que incluyo tienen guiones y hojas de estilo a los que se hace referencia en el encabezado, pero esto hace que el cliente realice varias solicitudes para el mismo archivo (por ejemplo, si la vista principal también incluye ese archivo)

Por ejemplo:

          

Y en el parcial:

        This is an EJS partial!   

En este caso, el cliente carga “mystylesheet.css” dos veces (innecesariamente), y también lo hace “myscript.js”

¿Existe una forma fácil (preferiblemente utilizando EJS) para asegurarse de que se incluya una hoja de estilo o un script cuando un parcial lo requiere, pero no si la vista principal ya ha incluido el recurso?

Encontré una solución bastante buena para este problema, que básicamente se reduce a usar una variable EJS para realizar un seguimiento de los recursos incluidos a medida que se representa el documento EJS. A continuación se muestra un ejemplo resumido, que solo funciona con tags de secuencia de comandos (pero se puede extender fácilmente a hojas de estilo o cualquier otra cosa)

Un parcial que ayuda con la inclusión de recursos:

 //file: "include.ejs" <% for (var i in scripts) { %> //scripts an arr of js files to (maybe) include <% if (!resources[scripts[i]]) { %>  <% resources[scripts[i]] = true %> <% } %> <% } %>  

Y un archivo que usa este parcial para incluir scripts.

 //file: "somepartial.ejs"   <%- partial("include.ejs", { scripts: ["lib/jquery.js", "lib/bootstrap-tabs.js"] }) %>      

Y al renderizar el parcial:

 response.render('somepartial.ejs', { resources: {}, /* some other variables */ }); 

De esta manera, puede estar seguro de que un script está incluido por un parcial, pero no a menos que ya esté incluido en algún lugar de la página HTML representada.

Una limitacion

Hay una limitación que encontré: si carga parte de su página con una solicitud de AJAX como

 $("#someDiv").load("/another/part/of/the/page.html"); 

Entonces los recursos incluidos con la parte de la página cargada con AJAX no serán conscientes de los scripts ya cargados (a menos que pases esa información en un argumento REST, como lo estoy haciendo):

 $("#someDiv").load("/another/part/of/the/page.html?resources={...}"); 

Por supuesto, con esta pequeña solución, cualquiera de las dos partes de la página que se cargan con una llamada AJAX puede solicitar el mismo recurso, y no hay forma de que sepan que solo conocen lo que el documento principal ha cargado Espero que tenga sentido)