Pregunta

Esto puede ser muy simple, pero tengo que decir que estoy un poco confundido sobre este tema.

Estoy escribiendo código basado en dos bibliotecas populares:

  • jQuery
  • underscore.js

Me pregunto ¿cuál sería la mejor manera de aislar el código y prevenir conflictos y cómo fusionarlo con sus dependencias?

Mediante la fusión les significa poner dentro del mismo archivo.

¿Fue útil?

Solución

Se podría fácilmente colocar los dos de ellos en el mismo archivo, ya que las únicas cosas que convierten global son window._, window.$ y window.jQuery. Las otras variables y funciones están envueltos en un ámbito local, por lo que habrá ningún conflicto.


Editar : Su propio código se podría poner en el mismo archivo también. Y si lo prefiere para eliminar las variables globales, tanto jQuery y Subrayado tienen un método de no-conflicto, que sustituye las variables globales con sus viejos valores (a menudo undefined). Se podría envolver su código en su propio ámbito local y no habrá más problemas:

// jQuery and Underscore source here

// You code here, wrapped in a self-executing function:

(function($, _){

  // here you can add your code:
  $('#test').text('jQuery works');

  _(3).times(function(){
    alert('Underscore works' );
  });

})(jQuery.noConflict(true), _.noConflict());

// no jQuery nor Underscore here:

alert(typeof jQuery, typeof $, typeof _);

Esto parece bastante complicado, pero vamos a explicar muy rápidamente. Puede ejecutar una función inmediatamente después de definirlo para que de esta manera:

(function(){
  alert('I am being executed');
})();  // <-- basically how you call a function normally: func();

Y puede pasar argumentos en él:

(function(a){
  alert(a);
})('test');

Tanto $.noConflict() y _.noConflict() eliminan las variables globales y devolver una referencia a la variable de jQuery y subrayado. Lo que puede pasar esto en la función autoejecutable como argumentos y feliz de todo el mundo (:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top