имя переменной для требуемого модуля и jslint - PullRequest
3 голосов
/ 25 августа 2011

Я только начал играть с nodejs и наткнулся на jslint, поэтому я решил протестировать свой код, используя: модуль jslint для nodejs . У меня есть 2 вопроса:

1.- Возьмем, к примеру, этот фрагмент:

var util = require('util');

при запуске jslint вроде:

jslint --indent 4 --white --regexp --goodparts file.js

будет выдано:

/*jslint indent: 4, white: true, regexp: true, goodparts: true, node: true, es5: true, onevar: true, undef: true, nomen: true, plusplus: true, bitwise: true, newcap: true */
  1 1,5: Redefinition of 'util'.
    var util = require('util');
  2 1,10: Read only.
    var util = require('util');

Если я изменю фрагмент на:

var utilButADifferentName = require('util');

Выход полностью чистый.

Код кажется нормально работает в любом случае. Так кто же может просветить меня об этом? :)

2.- Возьмите следующий фрагмент:

function Some() {
}

exports.Some = Some;

Запуск jslint с теми же параметрами дает:

  1 4,1: 'exports' has not been fully defined yet.
    exports.Some = Some;

Это из-за опций, которые я использую с JSLint, или я что-то упустил? Любые полезные советы по лучшим (в общем случае) вариантам использования с JSLint при «привязке» кода nodejs?

Заранее спасибо!

Ответы [ 3 ]

4 голосов
/ 02 сентября 2011

1) Похоже, что node-jslint поставляется с немного устаревшей версией node.js. Проблема была с util , кажется , чтобы быть исправленным .

Возможно, вы захотите взглянуть на JSHint и node-jshint. Я считаю, что они, как известно, гораздо более настраиваемы, чем JSLint.

2) Разве это не просто потому, что вы не инициализировали export до того, как использовали его?

function Some() {
}

var exports = {
    Some: Some
};
3 голосов
/ 01 сентября 2011

jsLint создан только для клиентского JavaScript.По моему опыту, заставить его хорошо работать с серверным кодом не стоит никаких проблем - по крайней мере, по сравнению с относительно низкими издержками на переключение на что-то вроде jshint .

Wrt.ваши ошибки, util является зарезервированным именем переменной в глазах jslint (почему он жалуется на то, что вы его перезаписали), и, поскольку exports является чисто серверной вещью, jslint barfs над этим также (он считает, что ваш 'запись в undefined).

Для сравнения, jshint имеет режим Node.js, где весь глобальный материал Node.js предопределен и проходит без инцидентов (, если ты пишешь в противном случае linting код)

1 голос
/ 25 августа 2011

JSLint, кажется, устарел на собственных объектах узла.Просто удалите параметр node:true и проигнорируйте предупреждения или создайте собственное (обновленное) определение глобалов:

/*global Buffer: false, clearInterval: false, clearTimeout: false, console: false, global: false, module: false, exports: false, process: false, require: false, setInterval: false, setTimeout: false, __filename: false, __dirname: false */

См. Используемые по умолчанию значения: http://www.jslint.com/lint.html

...