Tslint: сбой при работе локально

Созданный на 22 нояб. 2016  ·  29Комментарии  ·  Источник: palantir/tslint

Сообщение об ошибке

  • __TSLint version__: 4.0.1 (как глобально, так и локально)
  • __TypeScript version__: 2.0.10
  • __ Запуск TSLint через скрипт__: npm

Фактическое поведение

Мой lint runner - это сценарий npm, который определяется следующим образом:

"scripts": {
  "clean": "rimraf lib",
  "lint": "tslint --force --format verbose \"src/**/*.ts\"",
  "build": "npm run clean && npm run lint && echo Using TypeScript && tsc --version && tsc --pretty",
  "test": "npm run build && mocha --compilers ts:ts-node/register --recursive test/**/*-spec.ts",
  "watch": "npm run build -- --watch",
  "watch:test": "npm run test -- --watch"
},

Если я запускаю tslint --force --format verbose "src/**/*.ts" с терминала, он работает без ошибок:

image

Однако если я запустил сценарий npm lint . Он запустит локальную установку tslint и завершится ошибкой:

module.js:471
    throw err;
    ^

Error: Cannot find module './test/parse'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/Volumes/PEGASUS/repos/mine/logger/serverless-event/node_modules/tslint/lib/test.js:27:13)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)

Это можно воспроизвести, просто запустив на терминале следующее:

./node_modules/.bin/tslint --force --format verbose "src/**/*.ts"

Ожидаемое поведение

Я ожидал, что локальная установка tslint будет вести себя так же, как и глобальная установка.

Заключительное примечание

На случай, если это имеет значение, вот изменения в моем проекте от package.json :

"dependencies": {
  "aws-sdk": "^2.7.5",
  "bluebird": "^3.4.6",
  "stacktrace-js": "^1.3.1"
},
"devDependencies": {
  "@types/bluebird": "^3.0.35",
  "@types/chai": "3.4.30",
  "@types/es6-promise": "^0.0.32",
  "@types/mocha": "2.2.29",
  "@types/node": "6.0.31",
  "@types/stacktrace-js": "^0.0.30",
  "chai": "^3.5.0",
  "mocha": "^3.0.1",
  "rimraf": "^2.5.4",
  "ts-node": "^1.2.2",
  "tslint": "4.0.1",
  "typescript": "2.0.10"
},
Question

Самый полезный комментарий

Я столкнулся с той же проблемой ... использовал YARN. Оказывается, проблема для меня заключалась в том, что в какой-то момент я запустил yarn clean поэтому у меня был файл .yarnclean . Вы, наверное, догадались, куда это идет ... test был одним из каталогов, которые нужно было очистить. Исключил эту запись из .yarnclean , удалил node_modules и перезапустил yarn и теперь все в порядке.

Не уверен, что лучше всего ... либо для yarn удалить test из .yarnclean по умолчанию, либо переименовать папку.

Все 29 Комментарий

Мне не удалось воспроизвести эту проблему на примере командной строки. ./node_modules/tslint/lib/test/parse.js существует в локальном?

Я тоже не нашел его.

На сегодняшний день у меня есть новый ноутбук, я собираюсь попытаться воссоздать его с надеждой, что не смогу (но, к сожалению, с верой, что буду)

вот что я вижу с новой установкой tslint v4.0.1 ... у вас есть хотя бы другие файлы?

screen shot 2016-11-22 at 6 40 17 pm

почему файлы в lib/test загружаются при запуске CLI? в идеале это должно происходить только при использовании параметра --test CLI.

lib/test самом деле соответствует src/test который представляет собой различную логику для запуска и анализа тестов, необходимых для команды --test в TSLint. Настоящие тесты просто живут в test и, вероятно, не включены в пакет npm

Да, я понимаю. мой вопрос все еще в силе

Упс, неправильно это прочитал! Скорее всего, CLI просто импортирует вещи в верхней части
файл для всех его команд, независимо от фактического пути кода. По телефону
хотя, так что не имейте кода под рукой

Во вторник, 22 ноября 2016 г., 19:43 Ади Дахия [email protected] написал:

Да, я понимаю. мой вопрос все еще в силе

-
Вы получили это, потому что прокомментировали.

Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/palantir/tslint/issues/1770#issuecomment -262408748,
или отключить поток
https://github.com/notifications/unsubscribe-auth/ABVdVxbvJDUIHCQwod33SsutPXzHAu_Zks5rA4whgaJpZM4K5a-G
.

это просто часть процесса компиляции. Когда Node видит импорт, он загружает файл и компилирует его.

Ни у локального, ни у глобального нет тестового каталога, как указано @JKillian. Тестовый файл, который не работает, называется lib/test.js и для него требуется модуль "./test/parse", которого явно не существует.

image

Если модуль test действительно используется для линтинга, тогда я не могу понять, почему он все время не дает сбоев. Если он используется только при запуске через npm run и с локальной установкой, как это сработает условно?

Глобальная установка:
image

Локальная установка:
image

что находится в вашем каталоге lib?

У меня есть два случая, когда это происходит, но вот один:

image

это полезно? Кроме того, чего бы это ни стоило, у меня есть «тестовый» каталог, в котором также есть машинописный текст, который также не работает таким же образом.

о, я имею в виду в вашем каталоге tslint / lib?

О, в этом больше смысла. 😊

image

пытаться:

  • работает npm pack tslint
  • распаковать файл
  • убедитесь, что существует файл package/lib/test/parse.js .
  • затем запустите npm i tslint-4.0.2.tgz в пустом каталоге.
  • убедитесь, что каталог содержит node_modules/tslint/lib/test/parse.js

Да, я могу подтвердить, что в нем есть parse.js :

2016-11-24_00-34-16
.

2016-11-24_00-38-13

Теперь я установил 4.0.2 (по сравнению с 4.0.1) глобально, и у него тоже есть parse.js , однако, когда я запускаю tslint src/*.ts из корня моего проекта (следует использовать глобальную версию tslint ) я получил:

/usr/local/lib/node_modules/tslint/lib/tslint-cli.js:234
    throw error;
    ^

Error: Cannot find module './test/parse'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/Volumes/PEGASUS/repos/mine/truecash-services/node_modules/tslint-eslint-rules/node_modules/tslint/lib/test.js:10:13)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)

Напротив, локальная версия (теперь также 4.0.2) выдает такое же сообщение об ошибке, но вместо того, чтобы исходить из tslint-cli она просто заявляет:

module.js:471
    throw err;
    ^

попробуйте npm i tslint-4.0.2.tgz -g

Я установил указанное выше, и теперь у меня есть файл синтаксического анализа:

image

но я все еще получаю ту же ошибку при запуске tslint src/*.ts из корня проекта. Я не знаю, проливает ли это свет на вещи, но когда я пытаюсь установить tslint, не устанавливая одновременно машинописный текст (даже если машинописный текст установлен как локально, так и глобально в 2.0.10 ), я получаю:

2016-11-24_07-35-32

Может быть отвлекающим маневром, но с помощью редактора vs-кода ниже вы можете увидеть ошибку TSLint:

image

Глядя на эту ошибку, вы обнаружите:

[Info  - 11:42:45 AM] vscode-tslint: 'ENOENT: no such file or directory, open '/Volumes/PEGASUS/repos/mine/truecash-services/node_modules/tslint/lib/lint.js'' while validating: /Volumes/PEGASUS/repos/mine/truecash-services/src/db.ts stacktrace: Error: ENOENT: no such file or directory, open '/Volumes/PEGASUS/repos/mine/truecash-services/node_modules/tslint/lib/lint.js'
    at Error (native)
    at Object.fs.openSync (fs.js:640:18)
    at Object.module.(anonymous function) [as openSync] (ELECTRON_ASAR.js:168:20)
    at Object.fs.readFileSync (fs.js:508:33)
    at Object.fs.readFileSync (ELECTRON_ASAR.js:501:29)
    at Object.Module._extensions..js (module.js:564:20)
    at Module.load (module.js:473:32)
    at tryModuleLoad (module.js:432:12)
    at Function.Module._load (module.js:424:3)
    at Module.require (module.js:483:17)

источником этой ошибки является изменение имени с lint.js на linter.js . В vs-коде я исторически использовал .vscode/settings.json для использования локально установленного Typescript, а не встроенного редактора, но это потому, что они не работали в последней версии, и я хотел контролировать это. Я могу избавиться от этой ошибки линтинга в vs-коде, вернувшись к встроенному линтеру. В любом случае, это не оказывает прямого влияния на ошибку, указанную выше, но это тревожное изменение «контракта» между редактором и инструментом.

Хм. На самом деле использование «встроенного» TSLint (в vs-коде) не дает ошибок, но и TSLint не запускается.

image

обратите внимание, что он установлен как глобально, так и локально

Вам необходимо обновить vscode-tslint из-за изменения API

Попробуйте обновить NPM. Поскольку вы видите что-то другое, когда устанавливаете tslint с использованием tgz по сравнению с использованием npm i tslint , что-то принципиально не работает, и это не похоже на TSLint. Также тот факт, что вы видите unmet peer dependency когда он явно встречается, указывает на проблему с NPM.

Ваша глобальная библиотека может быть каким-то образом повреждена. Попробуйте очистить его, убедившись, что все удалено, запустив tslint чтобы убедиться, что это не работает. Затем переустановите все

Я удалил все мои глобально устанавливаемые файлы npm - rm -rf /usr/local/lib/node_modules - и начал с нуля:

image

Затем я тоже удаляю свою локальную среду и переустанавливаю с помощью пряжи :

image

Как видите, я все еще получаю ту же ошибку. 😢

Затем я запускаю vs-code (1.7.2) и получаю в "окне tslint" следующее:

[Информация - 17:41:06] Не удалось загрузить библиотеку TSLint.
Чтобы использовать TSLint в этой рабочей области, установите tslint с помощью npm install tslint или глобально с помощью npm install -g tslint.
После установки tslint вам необходимо повторно открыть рабочее пространство.

Действительно, очень странно. Еще страннее, когда я перехожу к файлу машинописного текста, я вижу это в канаве:

image

Версия 2.1.1? У меня версия 2.0.10 установлена ​​глобально и локально.

Я воссоздал это на своем новом MacBook Pro (у которого для запуска ничего не было установлено).

Примечание: когда я начал с новой установки моих локальных модулей npm, при запуске я получаю следующее сообщение от vs-code:

2016-11-24_18-11-13

Независимо от того, выберу ли я «версию рабочей области» или «версию в комплекте», при перезапуске не удается найти tslint. 😢

возможно, это проблема пряжи против npm

ну, это возможно, но я подумал об этом и протестировал как с npm install и с yarn install

Я тестировал это на новом MacBook Pro, у которого изначально не было npm, и у меня это сработало.

Я столкнулся с той же проблемой ... использовал YARN. Оказывается, проблема для меня заключалась в том, что в какой-то момент я запустил yarn clean поэтому у меня был файл .yarnclean . Вы, наверное, догадались, куда это идет ... test был одним из каталогов, которые нужно было очистить. Исключил эту запись из .yarnclean , удалил node_modules и перезапустил yarn и теперь все в порядке.

Не уверен, что лучше всего ... либо для yarn удалить test из .yarnclean по умолчанию, либо переименовать папку.

@nsgundy, спасибо. Закрываем этот билет, потому что нам здесь больше нечего делать.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги