Tslint: Обновление до 5.12.0 прерывает процесс сборки Angular

Созданный на 25 дек. 2018  ·  20Комментарии  ·  Источник: palantir/tslint

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

  • __TSLint версия__: 5.12.0
  • __TypeScript version__: 3.1.6
  • __ Запуск TSLint через __: (выберите один) CLI / Node.js API / VSCode / grunt-tslint / Atom / Visual Studio / и т. Д .: Angular CLI

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

При запуске сборки Angular после обновления до 5.12.0 мы получаем следующие ошибки и предупреждения

WARNING in ./node_modules/typescript/lib/typescript.js
Module not found: Error: Can't resolve 'crypto' in '/Users/dorons/dev/management/mgmt-console/node_modules/typescript/lib'

WARNING in ./node_modules/source-map-support/source-map-support.js
Module not found: Error: Can't resolve 'fs' in '/Users/dorons/dev/management/mgmt-console/node_modules/source-map-support'

WARNING in ./node_modules/source-map-support/source-map-support.js
Module not found: Error: Can't resolve 'module' in '/Users/dorons/dev/management/mgmt-console/node_modules/source-map-support'

ERROR in ./node_modules/tslint/lib/utils.js
Module not found: Error: Can't resolve 'fs' in '/Users/dorons/dev/management/mgmt-console/node_modules/tslint/lib'
ERROR in ./node_modules/tslint/node_modules/resolve/lib/async.js
Module not found: Error: Can't resolve 'fs' in '/Users/dorons/dev/management/mgmt-console/node_modules/tslint/node_modules/resolve/lib'
ERROR in ./node_modules/tslint/node_modules/resolve/lib/sync.js
Module not found: Error: Can't resolve 'fs' in '/Users/dorons/dev/management/mgmt-console/node_modules/tslint/node_modules/resolve/lib'
ERROR in ./node_modules/source-map-support/source-map-support.js
Module not found: Error: Can't resolve 'path' in '/Users/dorons/dev/management/mgmt-console/node_modules/source-map-support'
ERROR in ./node_modules/tslint/node_modules/resolve/lib/async.js
Module not found: Error: Can't resolve 'path' in '/Users/dorons/dev/management/mgmt-console/node_modules/tslint/node_modules/resolve/lib'
ERROR in ./node_modules/tslint/node_modules/resolve/lib/node-modules-paths.js
Module not found: Error: Can't resolve 'path' in '/Users/dorons/dev/management/mgmt-console/node_modules/tslint/node_modules/resolve/lib'
ERROR in ./node_modules/tslint/node_modules/resolve/lib/sync.js
Module not found: Error: Can't resolve 'path' in '/Users/dorons/dev/management/mgmt-console/node_modules/tslint/node_modules/resolve/lib'

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

Во время сборки нет ошибок

External Question

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

У меня была такая же проблема, я использовал hasOwnProperty от tslint/lib/utils . Заменил его на Object.prototype.hasOwnProperty и успешно обновился до 5.13.

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

👋 @doronsever - извините, что это вас беспокоит. Это не то, что всплывало раньше, и в ваших сообщениях об ошибках недостаточно информации, чтобы уйти от них - вы можете разместить здесь ссылку на свой репозиторий, чтобы мы могли получить к ней доступ?

Что можно попробовать: удалите каталог node_modules и либо package-lock.json или yarn.lock _ (в зависимости от того, что существует) _, затем переустановите с помощью npm i / yarn и попробовать еще раз?

Похоже, что ваши определения типа @types/node для Node не найдены TypeScript.

@JoshuaKGoldberg Я

Я не могу предоставить вам доступ к нашему репо, но если вам нужны другие журналы, дайте мне знать ...
Когда я перехожу на 5.11.0, все работает как положено

Некоторые уточняющие вопросы:

  • Вы используете npm или пряжу?
  • Из package.json , package-lock.json , yarn.lock и tsconfig.json , которые существуют и доступны? _ (пожалуйста, разместите их здесь, если таковые имеются) _
  • Вы пробовали явно добавить @types/node как devDependency в package.json ?
  • Я использую npm
  • Я явно добавил @types/node как devDependency
    Вот package.json:
{
  "name": "mgmt-console",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {
    "ng": "ng",
    "gulp": "gulp",
    "start": "node --max-old-space-size=5196 node_modules/@angular/cli/bin/ng serve  --host=0.0.0.0 --proxy-config proxy.conf.json",
    "start-prod": "ng serve --prod --proxy-config proxy.conf.json",
    "start-private-proxy": "node --max-old-space-size=5196 node_modules/@angular/cli/bin/ng serve  --host=0.0.0.0 --proxy-config private-proxy.conf.json",
    "start-private-proxy-noreload": "node --max-old-space-size=5196 node_modules/@angular/cli/bin/ng serve  --host=0.0.0.0 --proxy-config private-proxy.conf.json --live-reload false",
    "start-noreload": "node --max-old-space-size=5196 node_modules/@angular/cli/bin/ng serve   --proxy-config proxy.conf.json --live-reload false",
    "build": "node --max-old-space-size=5196 node_modules/@angular/cli/bin/ng build --prod --aot && gulp swExcludePathFix",
    "build-sourcemap": "node --max-old-space-size=5196 node_modules/@angular/cli/bin/ng build --prod --aot --source-map && gulp swExcludePathFix",
    "build-local": "ng build --prod --base-href /dist/ --deploy-url /dist/    ",
    "test": "jest --coverage || true",
    "test:c": "jest --runInBand --coverage",
    "test:watch": "jest --watch",
    "format:fix": "pretty-quick --staged",
    "lint": "ng lint",
    "e2e": "./node_modules/.bin/testcafe-live chrome e2e/tests/",
    "e2e:ci": "./node_modules/.bin/testcafe chrome:headless e2e/tests/ -S -s screenshots -u -r xunit:res.xml  || true",
    "lint:shared-lib": "ng lint shared-lib",
    "compodoc": "./node_modules/.bin/compodoc -p ./tsconfig.json --customFavicon ./src/favicon.ico --hideGenerator --name Sentinel-One",
    "serve:admin-portal": "ng serve admin-portal --open",
    "serve:admin-portal:proxy": "ng serve admin-portal --proxy-config proxy.conf.json --open",
    "build:admin-portal": "ng build admin-portal --prod --aot",
    "lint:admin-portal": "ng lint admin-portal",
    "test:admin-portal": "ng test admin-portal --source-map=false",
    "build:shared-lib": "ng build shared-lib --prod",
    "test:shared-lib": "ng test shared-lib --source-map=false"
  },
  "private": true,
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged",
      "post-commit": "git update-index -g"
    }
  },
  "lint-staged": {
    "*.ts": [
      "./node_modules/.bin/prettier  --config ./.prettierrc --write",
      "tslint --fix"
    ]
  },
  "dependencies": {
    "@angular/animations": "7.1.4",
    "@angular/cdk": "^7.2.0",
    "@angular/common": "7.1.4",
    "@angular/compiler": "7.1.4",
    "@angular/core": "7.1.4",
    "@angular/forms": "7.1.4",
    "@angular/http": "7.1.4",
    "@angular/material": "^7.2.0",
    "@angular/platform-browser": "7.1.4",
    "@angular/platform-browser-dynamic": "7.1.4",
    "@angular/platform-server": "7.1.4",
    "@angular/pwa": "^0.11.4",
    "@angular/router": "7.1.4",
    "@angular/service-worker": "7.1.4",
    "@ngrx/effects": "6.1.2",
    "@ngrx/router-store": "6.1.2",
    "@ngrx/store": "6.1.2",
    "@ngrx/store-devtools": "6.1.2",
    "@nguniversal/express-engine": "6.0.0",
    "@sentinel-one/font-mgmt": "1.2.8",
    "@types/angular": "^1.6.52",
    "@types/d3": "^5.5.0",
    "@types/lodash": "^4.14.119",
    "@types/mark.js": "^8.11.2",
    "ag-grid-angular": "^19.1.2",
    "ag-grid-community": "^19.1.3",
    "ag-grid-enterprise": "^19.1.3",
    "angular-sortablejs": "^2.6.0",
    "angular-svg-round-progressbar": "^2.0.0",
    "angular2-virtual-scroll": "^0.1.8",
    "angulartics2": "^2.5.0",
    "chevrotain": "^3.7.4",
    "classlist.js": "^1.1.20150312",
    "clipboard-polyfill": "^2.7.0",
    "copy-webpack-plugin": "^4.6.0",
    "core-js": "^2.6.1",
    "css-loader": "^1.0.1",
    "d3": "^5.7.0",
    "file-saver": "^1.3.8",
    "guid-typescript": "1.0.7",
    "hammerjs": "^2.0.8",
    "install": "^0.11.0",
    "interactjs": "^1.3.4",
    "lodash": "^4.17.11",
    "mark.js": "^8.11.1",
    "moment": "^2.23.0",
    "mydatepicker": "^2.6.6",
    "mydaterangepicker": "^4.2.1",
    "ng2-ace-editor": "^0.3.8",
    "ng2-nouislider": "^1.7.13",
    "ngx-auto-unsubscribe": "^2.3.0",
    "ngx-cookie": "^3.0.1",
    "ngx-cookie-service": "^1.0.10",
    "ngx-device-detector": "^1.3.5",
    "ngx-moment": "^3.3.0",
    "ngx-pipes": "^2.3.6",
    "ngx-take-until-destroy": "^2.2.1",
    "ngx-uploader": "^4.2.4",
    "ngx-validators": "^3.0.0",
    "node-sass": "^4.11.0",
    "nouislider": "^10.1.0",
    "raven-js": "^3.27.0",
    "rxjs": "^6.3.3",
    "rxjs-compat": "^6.3.3",
    "sortablejs": "^1.7.0",
    "web-animations-js": "^2.3.1",
    "webpack-dev-middleware": "^3.4.0",
    "webpack-dev-server": "^3.1.14",
    "zone.js": "^0.8.26"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^0.10.6",
    "@angular-devkit/build-ng-packagr": "^0.7.5",
    "@angular-devkit/core": "^0.6.8",
    "@angular/cli": "^7.1.4",
    "@angular/compiler-cli": "7.1.4",
    "@angular/language-service": "7.1.4",
    "@compodoc/compodoc": "^1.1.7",
    "@ngrx/schematics": "^6.1.2",
    "@sentinel-one/management-node-sdk": "^1.0.18",
    "@sentinel-one/mgmt-schematics": "^1.4.0",
    "@types/jasmine": "^2.8.14",
    "@types/jest": "^23.3.10",
    "@types/node": "^10.12.18",
    "add": "^2.0.6",
    "angular2-template-loader": "^0.6.2",
    "chalk": "^2.4.1",
    "codelyzer": "^4.5.0",
    "exports-loader": "^0.7.0",
    "fs": "0.0.1-security",
    "gulp": "^4.0.0",
    "gulp-replace": "^0.6.1",
    "husky": "^1.2.1",
    "istanbul-reports": "^1.5.1",
    "jest": "^23.6.0",
    "jest-preset-angular": "^6.0.2",
    "jest-sonar-reporter": "^2.0.0",
    "lint-staged": "^7.3.0",
    "ng-packagr": "^4.4.5",
    "ngx-wallaby-jest": "0.0.1",
    "npm-run-all": "^4.1.5",
    "prettier": "^1.15.3",
    "pretty-quick": "^1.7.0",
    "protractor": "^5.4.1",
    "rxjs-tslint": "^0.1.6",
    "testcafe": "^0.23.3",
    "testcafe-angular-selectors": "^0.3.1",
    "testcafe-live": "^0.1.4",
    "ts-node": "^7.0.1",
    "tsickle": "^0.33.1",
    "tslib": "^1.9.0",
    "tslint": "^5.12.0",
    "tslint-config-prettier": "^1.17.0",
    "tslint-jasmine-rules": "^1.5.1",
    "typescript": "3.1.6",
    "wallaby-webpack": "^3.9.12"
  }
}

@doronsever Я не могу ng new --minimal . npm run build и npm run lint работают нормально.

// gulpfile.js
const gulp = require("gulp");

gulp.task("default", (done) => {
    console.log("Hello!");
    done();
});

gulp.task("swExcludePathFix", (done) => {
    console.log("Hello!");
    done();
});
C:\Code\ngtest  ([email protected])
λ npm run build

> [email protected] build C:\Code\ngtest
> node --max-old-space-size=5196 node_modules/@angular/cli/bin/ng build --prod --aot && gulp swExcludePathFix


Date: 2018-12-30T11:10:36.759Z
Hash: da33b21c0147538991c0
Time: 16482ms
chunk {0} runtime.ec2944dd8b20ec099bf3.js (runtime) 1.41 kB [entry] [rendered]
chunk {1} main.fbc31409f55f230216fa.js (main) 174 kB [initial] [rendered]
chunk {2} polyfills.de3db41568411a33a7d2.js (polyfills) 37.5 kB [initial] [rendered]
chunk {3} styles.3bb2a9d4949b7dc120a9.css (styles) 0 bytes [initial] [rendered]
[06:10:37] Using gulpfile C:\Code\ngtest\gulpfile.js
[06:10:37] Starting 'swExcludePathFix'...
Hello!
[06:10:37] Finished 'swExcludePathFix' after 4.34 ms
C:\Code\ngtest  ([email protected])
λ npm run lint

> [email protected] lint C:\Code\ngtest
> ng lint


ERROR: C:/Code/ngtest/src/index.ts:1:13 - " should be '
ERROR: C:/Code/ngtest/src/index.ts:1:30 - file should end with a newline

Lint errors found in the listed files.


All files pass linting.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] lint: `ng lint`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] lint script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\Dioge\AppData\Roaming\npm-cache\_logs\2018-12-30T11_11_20_778Z-debug.log

То, что вы видите, похоже на проблему с пакетами npm link ed. Если TypeScript не может разрешить @types/node по некоторому пути в вашем каталоге node_modules , я предполагаю, почему.

Закрытие этой проблемы как невоспроизводимой, поскольку похоже, что она на вашей стороне, но, пожалуйста, напишите мне на https://gitter.im/palantir/tslint, если это не поможет!

@JoshuaKGoldberg снова, когда я перехожу на 5.11.0, все работает нормально ...

@doronsever да, это

Изменить: для большей ясности для будущих людей, читающих это, средство отслеживания проблем обычно предназначено только для проблем (ошибки, запросы функций, улучшения документации и т. Д.) В TSLint. 5.12.0 структурно почти идентичен 5.11.0, и другие проекты Angular отлично работают с ним, поэтому маловероятно, что это проблема самого TSLint. Gitter и StackOverflow рекомендуются для других запросов, таких как этот загадочный вид поломки. Если вы тоже это видите _ (или у вас есть указание на то, что я здесь ужасно неправ) _, напишите сообщение, и эту проблему можно будет открыть повторно!

Я не уверен, что это не ошибка tslint. У меня такая же проблема, версия 5.12.0 выдает идентичные ошибки, а 5.11.0 работает нормально.

Я пробовал с угловыми версиями 7.12 и 7.1.4, и оба не работают с 5.12.0

Тот же запрос @cromat - вы можете опубликовать способ воспроизвести это локально?

Поскольку мне не удалось воспроизвести ошибку в новом проекте angular (я попытался скопировать исходный файл package.json, angular.json, tslint.json), я обнаружил, что ошибка на самом деле возникает из кода приложения. Некоторое время я копался в коде и обнаружил, что проект не будет построен из-за функции arrayify .

Эта функция импортируется из 'tslint/lib/utils' поэтому я предполагаю, что некоторые другие функции, импортированные отсюда, также могут вызвать эту проблему.

Если это все еще не устранило проблему для кого-то, эта ошибка возникает при объединении файлов для приложения, и в последнее время конфигурация узла была изменена внутри веб-пакета из:

node: {
      global: 'window',
      crypto: 'empty',
      module: false,
      clearImmediate: false,
      setImmediate: false
 }

к
node: false

и это изменение также вызывало эту ошибку.

Этот парень сделал патч-скрипт, который обезьяны исправляет эту ошибку, но это просто быстрое исправление и не рекомендуется для использования в производственной среде. Вы также можете получить дополнительную информацию об этом изменении в той же теме.

@cromat, так тебе удалось это исправить?
Просто приколол к 5.11.0

да. Поскольку у нас такой же журнал ошибок, вероятно, у вас также есть импорт из библиотеки tslint. Найдите в вашем коде любой импорт из 'tslint/lib/utils' и удалите его или выполните рефакторинг. В моем случае это была функция arrayify которая вызвала проблему, и это на самом деле не нужно, потому что я мог просто использовать простой javasript для создания массива некоторых данных.

@cromat Замечательно, что вы нашли исправление, спасибо! 🙌

Но: как импорт из tslint/lib/utils приводит к этой ошибке? Дело в том, что utils.d.ts имеет зависимость типов от этих модулей, но явно не объявлен в опубликованном списке dependencies в tslint/package.json ?

@JoshuaKGoldberg Я не уверен, в чем проблема. Я попытался изменить настройки сборки, потому что подумал, что, возможно, tslint не работает с другими частями приложения, а затем импорт чего-то из него нарушает работу приложения, но, похоже, это не проблема. Я еще не исследовал различия между версиями tslint 5.11.0 и 5.12.0, чтобы выяснить, в чем заключаются критические изменения.

Я могу подтвердить, что удаление всего импорта tslint/lib/utlis устранило проблему.
@JoshuaKGoldberg Я бы все равно считал это ошибкой tslint, так как она отлично работает в 5.11.0

Та же проблема укусила меня сегодня. Оказалось, что действительно был ошибочный

import { hasOwnProperty } from 'tslint/lib/utils';

в нашем коде. Исправлен код, удален ненужный импорт, и вуаля, сборка работает без сбоев.

Это действительно подмножество / часть контекстной информации для # 2446. Это плохо документировано _ (прием запросов на включение в документацию!) _, Но подкаталог lib/ не является частью общедоступного API. Это просто совпадение, что это хорошо работает во многих сценариях.

@doronsever , я обычно закрываю проблему на этом этапе, но, поскольку это было немного назад и вперед - какие-либо мысли?

Удаление импорта устраняет эту проблему.

У меня была такая же проблема, я использовал hasOwnProperty от tslint/lib/utils . Заменил его на Object.prototype.hasOwnProperty и успешно обновился до 5.13.

🤖 Бип-буп! 👉 TSLint устарел 👈 и вам следует перейти на typescript-eslint ! 🤖

🔒 Этот вопрос заблокирован, чтобы предотвратить дальнейшее ненужное обсуждение. Спасибо! 👋

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