2.0.10
Мой 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"
с терминала, он работает без ошибок:
Однако если я запустил сценарий 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"
},
Мне не удалось воспроизвести эту проблему на примере командной строки. ./node_modules/tslint/lib/test/parse.js
существует в локальном?
Я тоже не нашел его.
На сегодняшний день у меня есть новый ноутбук, я собираюсь попытаться воссоздать его с надеждой, что не смогу (но, к сожалению, с верой, что буду)
вот что я вижу с новой установкой tslint v4.0.1 ... у вас есть хотя бы другие файлы?
почему файлы в 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", которого явно не существует.
Если модуль test
действительно используется для линтинга, тогда я не могу понять, почему он все время не дает сбоев. Если он используется только при запуске через npm run и с локальной установкой, как это сработает условно?
Глобальная установка:
Локальная установка:
что находится в вашем каталоге lib?
У меня есть два случая, когда это происходит, но вот один:
это полезно? Кроме того, чего бы это ни стоило, у меня есть «тестовый» каталог, в котором также есть машинописный текст, который также не работает таким же образом.
о, я имею в виду в вашем каталоге tslint / lib?
О, в этом больше смысла. 😊
пытаться:
npm pack tslint
package/lib/test/parse.js
.npm i tslint-4.0.2.tgz
в пустом каталоге.node_modules/tslint/lib/test/parse.js
Да, я могу подтвердить, что в нем есть parse.js
:
.
Теперь я установил 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
Я установил указанное выше, и теперь у меня есть файл синтаксического анализа:
но я все еще получаю ту же ошибку при запуске tslint src/*.ts
из корня проекта. Я не знаю, проливает ли это свет на вещи, но когда я пытаюсь установить tslint, не устанавливая одновременно машинописный текст (даже если машинописный текст установлен как локально, так и глобально в 2.0.10
), я получаю:
Может быть отвлекающим маневром, но с помощью редактора vs-кода ниже вы можете увидеть ошибку TSLint:
Глядя на эту ошибку, вы обнаружите:
[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 не запускается.
обратите внимание, что он установлен как глобально, так и локально
Вам необходимо обновить vscode-tslint из-за изменения API
Попробуйте обновить NPM. Поскольку вы видите что-то другое, когда устанавливаете tslint с использованием tgz по сравнению с использованием npm i tslint
, что-то принципиально не работает, и это не похоже на TSLint. Также тот факт, что вы видите unmet peer dependency
когда он явно встречается, указывает на проблему с NPM.
Ваша глобальная библиотека может быть каким-то образом повреждена. Попробуйте очистить его, убедившись, что все удалено, запустив tslint
чтобы убедиться, что это не работает. Затем переустановите все
Я удалил все мои глобально устанавливаемые файлы npm - rm -rf /usr/local/lib/node_modules
- и начал с нуля:
Затем я тоже удаляю свою локальную среду и переустанавливаю с помощью пряжи :
Как видите, я все еще получаю ту же ошибку. 😢
Затем я запускаю vs-code (1.7.2) и получаю в "окне tslint" следующее:
[Информация - 17:41:06] Не удалось загрузить библиотеку TSLint.
Чтобы использовать TSLint в этой рабочей области, установите tslint с помощью npm install tslint или глобально с помощью npm install -g tslint.
После установки tslint вам необходимо повторно открыть рабочее пространство.
Действительно, очень странно. Еще страннее, когда я перехожу к файлу машинописного текста, я вижу это в канаве:
Версия 2.1.1? У меня версия 2.0.10 установлена глобально и локально.
Я воссоздал это на своем новом MacBook Pro (у которого для запуска ничего не было установлено).
Примечание: когда я начал с новой установки моих локальных модулей npm, при запуске я получаю следующее сообщение от vs-code:
Независимо от того, выберу ли я «версию рабочей области» или «версию в комплекте», при перезапуске не удается найти tslint. 😢
возможно, это проблема пряжи против npm
ну, это возможно, но я подумал об этом и протестировал как с npm install
и с yarn install
Я тестировал это на новом MacBook Pro, у которого изначально не было npm, и у меня это сработало.
Я столкнулся с той же проблемой ... использовал YARN. Оказывается, проблема для меня заключалась в том, что в какой-то момент я запустил yarn clean
поэтому у меня был файл .yarnclean
. Вы, наверное, догадались, куда это идет ... test
был одним из каталогов, которые нужно было очистить. Исключил эту запись из .yarnclean
, удалил node_modules
и перезапустил yarn
и теперь все в порядке.
Не уверен, что лучше всего ... либо для yarn удалить test
из .yarnclean
по умолчанию, либо переименовать папку.
@nsgundy, спасибо. Закрываем этот билет, потому что нам здесь больше нечего делать.
Самый полезный комментарий
Я столкнулся с той же проблемой ... использовал YARN. Оказывается, проблема для меня заключалась в том, что в какой-то момент я запустил
yarn clean
поэтому у меня был файл.yarnclean
. Вы, наверное, догадались, куда это идет ...test
был одним из каталогов, которые нужно было очистить. Исключил эту запись из.yarnclean
, удалилnode_modules
и перезапустилyarn
и теперь все в порядке.Не уверен, что лучше всего ... либо для yarn удалить
test
из.yarnclean
по умолчанию, либо переименовать папку.