2008-11-17 18 views
7

AntecedentesHerramienta que detecta nombres duplicados de funciones de JavaScript en una página web?

Tenemos una aplicación web en la que varios desarrolladores han escrito varios archivos .js que manipulan el DOM y el problema de los nombres de funciones duplicadas se ha colado en nuestra aplicación.

Pregunta

¿Alguien puede recomendar una herramienta que nos avisará cuando accidentalmente escribe una página web con dos funciones javascript con el mismo nombre?

Ejemplo

página HTML

<script language="JavaScript" src="test.js" type="text/javascript"></script> 
<script>function foo() {alert('bar');}</script> 

Test.js

function foo() {alert('foo');} 

Como foo() es declarado dos veces en la página, al parecer, sólo el que tiene prioridad se carga.

Las herramientas que he usado parecen ignorar esto. Firebug solo muestra la función cargada. Netbeans mostrará ambas funciones en el navegador (sin una advertencia), pero solo mira un archivo a la vez (es decir, no puedo apuntarlo al archivo HTML y verlo junto con el archivo .js al mismo tiempo) y la Web. extensiones de desarrollador me permite ver todo a la vez, pero no hay errores o advertencias. La consola de error de Firefox tampoco arroja advertencia ni error. Ni tampoco IE.

Gracias!

Respuesta

3

Bueno, usar un analizador puede no ser siempre ideal, ya que requiere un paso adicional de copiar y pegar el código, y el de los demás, en el analizador e incluso entonces no estoy seguro de que atrape lo que quieres. La solución probada en el tiempo para el desarrollo colaborativo de Javascript es el espacio de nombres de su código.

var myNamespace = function(){ 
    var myPrivateProperty; 
    var myPrivateFunction = function(){}; 
    return{ 

     myPublicProperty: '', 
     myPublicFunction: function(){} 


    } 

}(); 

Esto se basa en Douglas Crockford module pattern.

A continuación, puede llamar a sus funciones públicas de esta manera:

myNamespace.myPublicFunction(); 

Y sus propiedades públicas:

myNamespace.myPublicProperty; 

Cada desarrollador puede desarrollarse en su propio espacio de nombres con el fin de no pisar el código de los demás .

+0

Como está claro que no hay una herramienta ideal que funcione para nuestra situación específica, le llevé esta idea a mi jefe: me hizo diseñar un PoC y parece que vamos a usarlo en el futuro. Incluso podríamos intentar implementarlo en el código existente. ¡Gracias! – steve

1

Mi solución sería un analizador de HTML simple para Java (acabo de piratear uno con expresiones regulares, puede intentar http://java-source.net/open-source/html-parsers/jtidy) y la biblioteca de Apache Rhino (http://www.mozilla.org/rhino/doc.html).

Debería ser posible sobrecargar el analizador en Rhino para lanzar un error si se redefine una función.

Estoy usando una versión ligeramente modificada de env.js (http://jqueryjs.googlecode.com/svn/trunk/jquery/build/runtest/env.js) de John Resig para emular un navegador. Esto me permite probar JavaScript en pruebas JUnit. Sé rellenar formularios, presentarlos, comprobar el diseño de las páginas, etc.

Ver mi blog para más detalles: http://blog.pdark.de/2008/11/18/testing-the-impossible-javascript-in-a-web-page/

+0

los enlaces weblog está muerto –

+0

@AliQanavatian Gracias, fijo. –

5

menudo he utilizado JSLINT

En definitiva se trata de un "compilador" para JavaScript usando JavaScript. Aprendí mucho viendo los videos de entrenamiento de Douglas Crockford.

No solo comprueba si hay funciones duplicadas, sino variables globales, y un montón de otras cosas. Al igual que Douglas dijo en uno de sus videos que le permite utilizar solo los buenos bits de JavaScript

+0

+1 para jslint. Especialmente bueno para detectar problemas inusuales del navegador – Ken

+0

¡Gracias por la respuesta! Intenté jsLint, y encontré que es útil, pero debido a que estoy tratando con múltiples archivos JS, así como con scripts en las páginas HTML, fue difícil trabajar con ellos. La herramienta ideal que estoy buscando tomaría un archivo URL o HTML como entrada y devolvería todos los problemas. – steve

+0

Steve ¿usas Visual Studio? Encontré una herramienta realmente original, que hace JSLINT como parte de tu proceso de compilación. –

1

ScriptManager.RegisterClientScriptInclude (Me, Page.GetType, "jstest", "") Test.js

Cuestiones relacionadas