如何在Eclipse中忽略节点shebang错误?

我正在写一些节点命令行工具。 他们都是从行开始的:

#!/usr/bin/env node 

使用Eclipse Juno和Nodeclipse Node.js插件,这行代码会产生如下所示的错误:

节点shebang eclipse错误

好的,所以#在JavaScript中不是一个有效的注释字符,但它在Linux / UNIX中是一个有效的字符,作为文件中第一行的符号 。 但是我怎样才能设置Eclipse来忽略这个错误? 这对我来说是个问题,因为如果你有错误,代码格式化不起作用。 我必须删除该行。 点击CTRL-SHIFT-F并添加行。

我已经尝试了很多东西并进行了研究,但是我找不到答案。

这里有一个重复的问题, 在hashbang行eclipse javascript语法错误 ,但我的问题有更多的信息。

编辑:

看起来有什么东西添加到jshint允许shebangs在第一行 。 也许我需要更新我的node-eclipse,或者node-eclipse项目需要更新jshint?

  • 我的jshint eclipse集成版本是0.9.6。
  • 我的nodeclipse是0.4.0.20130519 …

我升级到

  • jshint eclipse集成0.9.9.20131029
  • nodeclipse 0.7.0.20131101

这没有帮助。

这是我在eclipse中的JSHint版本:

在这里输入图像描述

编辑2:

感谢VonC的回答。 但我认为这表明我没有在文件中的BOM。 任何其他的想法?

 $ 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 

编辑3:

关于Paul Verest的回答,我试图closuresJSDTvalidation,但我似乎无法做到这一点。 我未选中“启用JavaScript语义validation”(在Eclipse中,请参阅窗口>首选项> JavaScript>validation器>错误/警告),但问题依然存在。 我现在正在卸载Eclipse Web Developer Tools 3.4.2 。 扯淡! 这似乎没有帮助,现在我的CSS和HTML编辑器都没有了。 现在我试图禁用JSDTvalidation通过在这个问题的一些想法, 如何从我的eclipse项目中删除JavaScriptvalidation? 。 所以我进入我的项目属性,并进入JavaScript>validation。 我已经设置了一切“启用项目的具体设置”,并取消选中“错误/警告”,“JSDOC”等,即使如此,我认为validation仍然运行,因为问题依然存在! 我的“build设者”属性只列出了“JSHint问题检查器”已启用。 (顺便说一句,我正在做一个新的testing项目与hello.js所有这一切)。 在这一点上我感觉很好。

编辑4,答案!!!!!

我做的! 唷! 这并不容易,但是我最终在Eclipse中攻击了.project文件。 我有这个:

 <natures> <nature>org.nodeclipse.ui.NodeNature</nature> <nature>org.eclipse.wst.jsdt.core.jsNature</nature> </natures> 

我删除了jsdt本质,现在shebang行上的错误是GONE! 我在我的testing项目和我的真实项目中做了这个。 有效! 这实际上是非常有帮助的,因为我可以格式化文件,现在我实际上正在运行jshint。 再次感谢。

Eclipse中有2个用于JavaScriptvalidation的选项:

  • JSDT
  • JSHint(默认自Nodeclipse 0.7)

由于每个项目都存储了configuration文件,所以从0.7创build的项目中复制。*设置文件,或者手动重新configuration(只需要将。*文件与新创build的项目进行比较)。 然后把.jshintrc文件像https://github.com/Nodeclipse/nodeclipse-1/blob/master/org.nodeclipse.ui/templates/.jshintrc

尝试检查JSHint选项 ,如果可能的话。

请注意,使用JSHint,~~这个问题变成了一般的JSHint问题(不是Eclipse或者与Nodeclipse相关的)~~

更新:

.project自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> 

正如@Jess发现这是JSDT所显示的错误,而不是JSHInt,所以删除<nature>org.eclipse.wst.jsdt.core.jsNature</nature>会阻止JSDT显示它(即使JavaScript语义validation已经closures, 0.7)

更新3:

删除<nature>org.eclipse.wst.jsdt.core.jsNature</nature>缺点是代码辅助和点击即可定义不起作用(实际上,在JSDoc被定义的情况下, /www.nodeclipse.org/nodejs/javascript/sources/books/2013/10/22/JSDT-require-JSDoc.html或1 .js文件中)

JSDoc支持

即使点击进入定义 点击进入定义

更新:

在nodeclipse中input的问题指向JSHint 问题66 。
正如Paul Verest在他的回答 (upvoted)中所说的,这可以像确保JSHint检查代码一样简单。
由于提交63da9 , JSHint知道如何忽略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(); 

原始答案

你确定' # '不是一个有效的字符(但在这个问题中使用 )?

仔细检查你的node.js文件的编码,因为如果它是带有 BOM的 UTF-8,那么javascript将无法正常启动。

请参阅“ utf-8和utf-8之间不使用BOM有什么不同? ”和关于shebang的wikipedia文章(“Magic number”一节)

shebang字符在扩展ASCII编码中由相同的两个字节表示,包括UTF-8,通常用于当前类Unix系统上的脚本和其他文本文件。
但是,UTF-8文件可能以可选的字节顺序标记(BOM)开头; 如果“ exec ”函数专门检测字节0x23 0x21 ,则在shebang之前存在BOM( 0xEF 0xBB 0xBF )将阻止脚本解释器被执行
有些权威人士build议不要在POSIX(Unix-like)脚本中使用字节顺序标记 ,因为这个原因以及更广泛的互操作性和哲学问题。