Как игнорировать node ошибку shebang в Eclipse?
Я пишу некоторые утилиты командной строки node. Все они начинаются с строки:
#!/usr/bin/env node
С Eclipse Juno и плагином Nodeclipse Node.js эта строка кода выдает ошибку, как показано:
![Node shebang eclipse error]()
ОК, поэтому #
не является допустимым символом комментария в javascript, но он является допустимым символом в Linux/UNIX как shebang первой строки в файле. Но как я могу настроить Eclipse, чтобы игнорировать эту ошибку? Это проблема для меня, потому что форматирование кода не работает, если у вас есть ошибки. Я должен удалить строку. Нажмите CTRL-SHIFT-F и добавьте строку назад.
Я пробовал много вещей и исследовал, но я не могу найти ответ.
Существует дублированный вопрос, синтаксическая ошибка eclipse javascript на строке hashbang, но у моего вопроса больше информации.
EDIT:
Похоже, было что-то добавлено в jshint, чтобы позволить shebangs в первой строке. Возможно, мне нужно обновить свой node -eclipse, или, возможно, проект node -eclipse должен обновить jshint?
- Интеграция jclint eclipse - это версия 0.9.6.
- My nodeclipse - 0.4.0.20130519...
Я обновился до
- интеграция jshint eclipse 0.9.9.20131029
- nodeclipse 0.7.0.20131101
Это не помогло.
Вот моя версия JSHint в eclipse:
![enter image description here]()
ИЗМЕНИТЬ 2:
Спасибо за ответ VonC. Но я думаю, что это показывает, что у меня нет спецификации в файле. Любые другие идеи?
$ 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:
Что касается ответа Пола Вереста ниже, я попытался отключить проверку JSDT, но я не могу это сделать. Я снял флажок "Включить семантическую проверку JavaScript" (в Eclipse см. "Окно" > "Настройки" > "JavaScript" > "Валидатор" > "Ошибки/предупреждения" ), но проблема остается.
Теперь я удаляю Eclipse Web Developer Tools 3.4.2. Это не помогло, и теперь мои редакторы CSS и HTML исчезли. Теперь я попытался отключить проверку JSDT, следуя некоторым идеям в этом вопросе SO, Как удалить проверку javascript из моего проекта eclipse?.
Итак, я вошел в мои свойства проекта и перешел на JavaScript > Validation. Я настроил все на "Включенные конкретные настройки проекта" и снял флажки "Ошибки/Предупреждения", "JSDOC" и т.д. Несмотря на это, я думаю, что проверка продолжается, так как проблема сохраняется! Мои свойства "Строители" содержат только список "Контроллер проблем JSHint", который включен. (Я делаю все это в новом тестовом проекте с hello.js).
РЕДАКТИРОВАТЬ 4, ОТВЕТ
Это было нелегко, но я закончил взлом файла .project в Eclipse. У меня было это:
<natures>
<nature>org.nodeclipse.ui.NodeNature</nature>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
Я удалил характер jsdt, и теперь ошибка на линии shebang GONE! Я сделал это в своем тестовом проекте и в моем реальном проекте. Это сработало! Это на самом деле очень полезно, так как я могу отформатировать файл, и теперь я запускаю jshint.
Ответы
Ответ 1
В Eclipse есть 2 варианта проверки JavaScript:
- JSDT
- JSHint (по умолчанию с Nodeclipse 0.7)
Поскольку конфигурация сохраняется в каждом проекте, скопируйте. * установив файлы из проекта, созданного с помощью 0.7 или переконфигурируйте его вручную (просто сравните * файлы с вновь созданным проектом).
Затем поместите файл .jshintrc как
https://github.com/Nodeclipse/nodeclipse-1/blob/master/org.nodeclipse.ui/templates/.jshintrc
Попробуйте проверить параметры JSHint, если это возможно.
Обратите внимание, что при использовании JSHint ~~ этот вопрос становится общим вопросом JSHint (не связанным с Eclipse или Nodeclipse). ~~
UPDATE:
.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 уже отключена с 0.7)
ОБНОВЛЕНИЕ 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 или в файле .js)
![JSDoc support]()
Даже щелчок по определению
![click-through to definition]()
Ответ 2
Обновление:
Проблема, введенная в nodeclipse, указывает на JSHint issue 66.
Как Paul Verest замечает в свой ответ (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();
Оригинальный ответ
Вы уверены, что '#
' не является допустимым символом (еще используется в этом вопросе)?
Дважды проверьте кодировку вашего файла node.js
, потому что если это UTF-8 с спецификацией, то javascript не может" t запускаться должным образом.
См. "Чем отличается от utf-8 и utf-8 без спецификации?, а статья в википедии о shebang (раздел" Магический номер ")
Символы shebang представлены теми же двумя байтами в расширенных кодировках ASCII, включая UTF-8, который обычно используется для скриптов и других текстовых файлов в существующих Unix-подобных системах.
Однако файлы UTF-8 могут начинаться с необязательной отметки порядка байтов (BOM); , если функция "exec
" специально определяет байты 0x23 0x21
, тогда наличие спецификации (0xEF 0xBB 0xBF
) до shebang будет препятствовать выполнению интерпретатора script.
Некоторые власти рекомендуют не использовать знак байтового байта в сценариях POSIX (Unix-like) по этой причине и для более широкой интероперабельности и философских проблем.