node - ¿Cómo ignorar el error shebang nodo en Eclipse?
node js in eclipse (2)
Estoy escribiendo algunas utilidades de línea de comandos de nodo. Todos comienzan con la línea:
#!/usr/bin/env node
Con Eclipse Juno y el complemento Nodeclipse Node.js, esta línea de código produce un error como se muestra:
De acuerdo, entonces #
no es un carácter de comentario válido en javascript, pero es un carácter válido en Linux / UNIX como el shebang de la primera línea en un archivo. Pero, ¿cómo puedo configurar Eclipse para ignorar este error? Este es un problema para mí porque el formato del código no funciona si tiene errores. Tengo que borrar la línea. Presione CTRL-SHIFT-F y agregue la línea de nuevo.
He intentado muchas cosas e investigado, pero no puedo encontrar una respuesta.
Hay una pregunta duplicada ahí fuera, error de sintaxis de javascript de eclipse en la línea de hashbang , pero mi pregunta tiene más información.
EDITAR:
Parece que hubo algo agregado a jshint para permitir shebangs en la primera línea . Tal vez necesito actualizar mi nodo-eclipse, o tal vez el proyecto nodo-eclipse necesite actualizar jshint?
- Mi jshint eclipse de integración es la versión 0.9.6.
- Mi nodeclipse es 0.4.0.20130519 ...
Me actualicé a
- jshint eclipse integracion 0.9.9.20131029
- nodeclipse 0.7.0.20131101
Eso no ayudó.
Aquí está mi versión de JSHint en eclipse:
EDIT 2:
Gracias por la respuesta VonC. Pero creo que esto demuestra que no tengo una lista de materiales en el archivo. ¿Alguna otra idea?
$ od -N 20 -t x1 hello.js
0000000 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 6e
0000020 6f 64 65 0a
0000024
EDITAR 3:
Con respecto a la respuesta de Paul Verest a continuación, traté de desactivar la validación JSDT, pero parece que no puedo hacerlo. Desmarque "Habilitar validación semántica de JavaScript" (en Eclipse, vea Ventana> Preferencias> JavaScript> Validador> Errores / Advertencias), pero el problema continúa.
Ahora estoy desinstalando Eclipse Web Developer Tools 3.4.2 . Eso no pareció ayudar y ahora mis editores de CSS y HTML se han ido. Ahora he intentado deshabilitar la validación JSDT siguiendo algunas de las ideas en esta pregunta SO: ¿Cómo elimino la validación javascript de mi proyecto de eclipse? .
Así que entré en las propiedades de mi proyecto y fui a JavaScript> Validación. He configurado todo en "Configuraciones específicas del proyecto habilitado" y no he seleccionado "Errores / Advertencias", "JSDOC", etc. Aun así, creo que la validación aún se está ejecutando ya que el problema persiste. Mis propiedades de "Constructores" solo enumeran el "Comprobador de problemas JSHint" que está habilitado. (Estoy haciendo todo esto en un nuevo proyecto de prueba con un hello.js).
EDITAR 4, LA RESPUESTA
No fue fácil, pero terminé hackeando el archivo .project en Eclipse. Tuve esto:
<natures>
<nature>org.nodeclipse.ui.NodeNature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
Eliminé la naturaleza jsdt y ahora el error en la línea de shebang ha desaparecido. Hice esto en mi proyecto de prueba y mi proyecto real. ¡Funcionó! Esto es bastante útil ya que puedo formatear el archivo y ahora estoy ejecutando jshint.
Actualizar:
El problema introducido en nodeclipse apunta al número 66 de JSHint .
Como señala en su respuesta (upvoted), esto podría ser tan simple como asegurarse de que JSHint verifique el código.
Desde el commit 63da9 , JSHint sabe cómo ignorar esa directiva shebang.
// If the first line is a shebang (#!), remove it and move on.
// Shebangs are used by Node scripts.
if (lines[0] && lines[0].substr(0, 2) == ''#!'')
lines.shift();
Respuesta original
¿Está seguro de que '' #
'' no es un carácter válido (aún utilizado en esta pregunta )?
Vuelva a verificar la codificación de su archivo node.js
, porque si es UTF-8 con BOM , el javascript no se pudo iniciar correctamente.
Consulte " ¿Qué es diferente entre utf-8 y utf-8 sin BOM? ", Y el artículo de wikipedia sobre shebang (sección "Número mágico")
Los caracteres de shebang están representados por los mismos dos bytes en las codificaciones ASCII extendidas, incluyendo UTF-8, que se usa comúnmente para scripts y otros archivos de texto en los sistemas actuales similares a Unix.
Sin embargo, los archivos UTF-8 pueden comenzar con la marca de orden de bytes (BOM) opcional; si la función "exec
" detecta específicamente los bytes0x23 0x21
, entonces la presencia de la lista de materiales (0xEF 0xBB 0xBF
) antes del shebang evitará que se ejecute el intérprete de script .
Algunas autoridades recomiendan no usar la marca de orden de bytes en los scripts POSIX (similares a Unix) , por este motivo y para una mayor interoperabilidad y preocupaciones filosóficas.
Hay 2 opciones para la validación de JavaScript en Eclipse:
- JSDT
- JSHint (por defecto desde Nodeclipse 0.7)
A medida que se almacena la confirmación por proyecto, copie los archivos de configuración. * Del proyecto creado con 0.7 o reconfigúrelo manualmente (solo compare los archivos. * Con el proyecto recién creado). Luego ponga el archivo .jshintrc como https://github.com/Nodeclipse/nodeclipse-1/blob/master/org.nodeclipse.ui/templates/.jshintrc
Intente verificar las opciones de JSHint , si es posible.
Tenga en cuenta que con el uso de JSHint, ~~ esta pregunta se convierte en una pregunta general de JSHint (no relacionada con Eclipse o Nodeclipse).
ACTUALIZAR:
.project
contenido desde 0.7:
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>ProjectName</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>com.eclipsesource.jshint.ui.builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.nodeclipse.ui.NodeNature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
</projectDescription>
Como @Jess descubrió que esto era un error mostrado por JSDT, no JSHInt, por lo tanto, al eliminar <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
evitará que JSDT lo muestre (incluso con la validación semántica de JavaScript ya desactivada 0.7)
ACTUALIZACIÓN 3:
La desventaja de <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
eliminada será que la ayuda del código y la definición de clics no funcionarán (en realidad funciona en casos raros cuando se definen JSDocs, por ejemplo, http://www.nodeclipse.org/nodejs/javascript/sources/books/2013/10/22/JSDT-require-JSDoc.html o dentro de 1 archivo .js)
Incluso hacer clic a través de la definición