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

时间:2013-09-23 13:14:32

标签: eclipse node.js jshint jsdt nodeclipse

我正在编写一些节点命令行实用程序。他们都从这条线开始:

#!/usr/bin/env node

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

Node shebang eclipse error

好的,所以#不是javascript中的有效注释字符,但它是Linux / UNIX中的有效字符,是文件中第一行的 shebang 。但是如何设置Eclipse以忽略此错误?这对我来说是一个问题,因为如果您有错误,代码格式化将不起作用。我必须删除该行。按 CTRL-SHIFT-F 并添加回来。

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

有一个重复的问题,eclipse javascript syntax error on hashbang line,但我的问题有更多信息。

编辑:

看起来jshint to allow shebangs in the first line添加了一些内容。也许我需要更新我的node-eclipse,或者node-eclipse项目需要更新jshint?

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

我已升级到

  • jshint eclipse integration 0.9.9.20131029
  • nodeclipse 0.7.0.20131101

这没有帮助。

这是我在eclipse中的JSHint版本:

enter image description here

编辑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在下面的回答,我试图关闭JSDT验证,但我似乎无法做到这一点。我取消选中“启用JavaScript语义验证”(在Eclipse中,请参阅Window> Preferences> JavaScript> Validator>错误/警告),但问题仍然存在。

我现在正在卸载 Eclipse Web Developer Tools 3.4.2 。这似乎没有帮助,现在我的CSS和HTML编辑器已经消失了。现在我已经尝试通过遵循此SO问题How do I remove javascript validation from my eclipse project?中的一些想法来禁用JSDT验证。

所以我进入了我的项目属性并转到了JavaScript>验证。我已将所有内容设置为“启用项目特定设置”并取消选中“错误/警告”,“JSDOC”等。即便如此,我认为验证仍在运行,因为问题仍然存在!我的“Builders”属性仅列出已启用的“JSHint Problem Checker”。 (我在一个带有hello.js的新测试项目中做了所有这些。)

编辑4,答案

这并不容易,但我最终在Eclipse中破解了.project文件。我有这个:

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

我删除了jsdt的性质,现在shebang线上的错误是GONE!我在我的测试项目和我的真实项目中做到了这一点。有效!这实际上非常有用,因为我可以格式化文件,而我现在实际上正在运行jshint。

2 个答案:

答案 0 :(得分:5)

Eclipse中有两种JavaScript验证选项:

  • JS​​DT
  • JSHint(自Nodeclipse 0.7起默认)

由于每个项目存储了配置,因此从使用0.7创建的项目中复制。*设置文件或手动重新配置(仅将。*文件与新创建的项目进行比较)。 然后把.jshintrc文件放进去 https://github.com/Nodeclipse/nodeclipse-1/blob/master/org.nodeclipse.ui/templates/.jshintrc

如果可能,请尝试检查JSHint options

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

更新:

自0.7以来

.project内容:

<?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显示它(即使自0.7开始关闭JavaScript语义验证)

更新3:

删除<nature>org.eclipse.wst.jsdt.core.jsNature</nature>的缺点是代码辅助和单击 - 但定义不起作用(实际上,在定义JSDocs时,例如http://www.nodeclipse.org/nodejs/javascript/sources/books/2013/10/22/JSDT-require-JSDoc.html或1 .js文件中,它实际上有效)< / p>

JSDoc support

甚至点击进行定义 click-through to definition

答案 1 :(得分:4)

更新:

在nodeclipse中输入的问题指出JSHint issue 66 正如Paul Verest中的his answer评论(upvoted),这可能就像确保JSHint检查代码一样简单。
commit 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();

原始答案

您确定“#”不是有效字符(但used in this question)吗?

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

请参阅“What's different between utf-8 and utf-8 without BOM?”和wikipedia article on shebang (section "Magic number")

  

shebang字符由扩展ASCII编码中的相同两个字节表示,包括UTF-8,它通常用于当前类Unix系统上的脚本和其他文本文件。
  但是,UTF-8文件可以以可选的字节顺序标记(BOM)开头; 如果“exec”函数专门检测到字节0x23 0x21,那么在shebang之前存在BOM(0xEF 0xBB 0xBF)将阻止脚本解释器被执行
  一些权威机构recommend against using the byte order mark in POSIX (Unix-like) scripts,出于这个原因以及更广泛的互操作性和哲学问题。