我正在编写一些节点命令行实用程序。他们都从这条线开始:
#!/usr/bin/env node
使用Eclipse Juno和Nodeclipse Node.js插件,这行代码会产生错误,如下所示:
好的,所以#
不是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?
我已升级到
这没有帮助。
这是我在eclipse中的JSHint版本:
感谢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
关于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的新测试项目中做了所有这些。)
这并不容易,但我最终在Eclipse中破解了.project文件。我有这个:
<natures>
<nature>org.nodeclipse.ui.NodeNature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
我删除了jsdt的性质,现在shebang线上的错误是GONE!我在我的测试项目和我的真实项目中做到了这一点。有效!这实际上非常有用,因为我可以格式化文件,而我现在实际上正在运行jshint。
答案 0 :(得分:5)
Eclipse中有两种JavaScript验证选项:
由于每个项目存储了配置,因此从使用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>
甚至点击进行定义
答案 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,出于这个原因以及更广泛的互操作性和哲学问题。