Tslint: Ein Upgrade auf 5.12.0 unterbricht den Angular-Build-Prozess

Erstellt am 25. Dez. 2018  ·  20Kommentare  ·  Quelle: palantir/tslint

Fehlerbericht

  • __TSLint-Version__: 5.12.0
  • __TypeScript-Version__: 3.1.6
  • __Ausführen von TSLint via__: (wählen Sie eine aus) CLI / Node.js API / VSCode / grunt-tslint / Atom / Visual Studio / etc: Angular CLI

Tatsächliches Verhalten

Beim Ausführen von Angular Build nach dem Upgrade auf 5.12.0 erhalten wir die folgenden Fehler und Warnungen

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'

Erwartetes Verhalten

Keine Fehler beim Build

External Question

Hilfreichster Kommentar

Ich hatte das gleiche Problem, ich habe hasOwnProperty von tslint/lib/utils . Es wurde durch Object.prototype.hasOwnProperty und erfolgreich auf 5.13 aktualisiert.

Alle 20 Kommentare

👋 @doronsever - es tut mir leid zu hören, dass dich das beunruhigt. Dies ist nicht schon einmal vorgekommen und Ihre Fehlermeldungen reichen nicht aus, um zu gehen - können Sie hier einen Link zu Ihrem Repository posten, auf den wir zugreifen könnten?

Etwas zu versuchen: Löschen Sie Ihr node_modules Verzeichnis und entweder package-lock.json oder yarn.lock _(je nachdem was vorhanden ist)_, dann installieren Sie es mit npm i / yarn und versuchen Sie es erneut?

Dies sieht so aus, als ob Ihre @types/node Typdefinitionen für Node von TypeScript nicht gefunden werden.

@JoshuaKGoldberg Ich habe auf das neueste Typen-/Knotenmodul (10.12.18) aktualisiert und erhalte immer noch die gleichen Fehler.

Ich kann Ihnen keinen Zugriff auf unser Repo gewähren, aber wenn Sie andere Protokolle benötigen, lassen Sie es mich bitte wissen...
Wenn ich zurück zu 5.11.0 gehe, funktioniert alles wie erwartet

Einige klärende Fragen:

  • Benutzt du NPM oder Garn?
  • Welche von package.json , package-lock.json , yarn.lock und tsconfig.json existieren und sind verfügbar? _(Bitte posten Sie sie hier, falls vorhanden)_
  • Haben Sie versucht, @types/node explizit als devDependency in package.json hinzuzufügen?
  • Ich verwende npm
  • Ich habe @types/node explizit als devDependency hinzugefügt
    Hier ist die 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 Ich kann Ihre Probleme nicht lokal mit einem einfachen ng new --minimal Projekt reproduzieren . npm run build und npm run lint funktionieren einwandfrei.

// 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

Was Sie sehen, sieht nach einem Problem mit npm link ed-Paketen aus. Wenn TypeScript @types/node aus einem Pfad in Ihrem node_modules Verzeichnis nicht auflösen kann, vermute ich, dass das der Grund ist.

Schließe dieses Problem als nicht reproduzierbar, da es so aussieht, als ob es an deiner Seite wäre, aber bitte ping mich auf https://gitter.im/palantir/tslint, wenn dies nicht hilft!

@JoshuaKGoldberg nochmal, wenn ich auf 5.11.0 downgrade, funktioniert alles gut ...

@doronsever ja, es ist

Bearbeiten: Um es für zukünftige Leser klarer zu machen, ist der Issue Tracker normalerweise nur für Probleme (Bugs, Feature Requests, Dokumentationsverbesserungen und dergleichen) in TSLint gedacht. 5.12.0 war strukturell fast identisch mit 5.11.0 und andere Angular-Projekte funktionieren gut damit, daher ist es sehr unwahrscheinlich, dass dies ein Problem in TSLint selbst ist. Gitter und StackOverflow werden für andere Anfragen empfohlen, wie zum Beispiel für diese mysteriöse Art von Bruch. Wenn Sie dies auch sehen _(oder sonst einen Hinweis haben, dass ich hier schrecklich falsch liege)_, posten Sie bitte und dieses Problem kann wieder geöffnet werden!

Ich bin mir nicht sicher, ob dies kein Tslint-Fehler ist. Ich habe das gleiche Problem, Version 5.12.0 gibt identische Fehler und 5.11.0 funktioniert einwandfrei.

Ich habe es mit den Winkelversionen 7.12 und 7.1.4 versucht und beide funktionieren nicht mit 5.12.0

Dieselbe Anfrage

Da ich Fehler in einem neuen Angular-Projekt nicht reproduzieren konnte (ich habe versucht, meine ursprüngliche package.json-Datei, angle.json, tslint.json, zu kopieren), habe ich herausgefunden, dass der Fehler tatsächlich vom Anwendungscode herrührt. Ich habe einige Zeit durch Code gegraben und herausgefunden, dass das Projekt wegen der Funktion arrayify .

Diese Funktion wird von 'tslint/lib/utils' importiert, daher gehe ich davon aus, dass einige andere von hier importierte Funktionen ebenfalls dieses Problem verursachen könnten.

Wenn das Problem für jemanden immer noch nicht behoben wurde, wird dieser Fehler beim Bündeln von Dateien für die App verursacht und kürzlich wurde die Knotenkonfiguration im Webpack geändert von:

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

zu
node: false

und diese Änderung verursachte auch diesen Fehler.

Dieser Typ hat ein Patch-Skript erstellt, das diesen Fehler affenpatcht, aber es ist nur eine schnelle Lösung und wird nicht für den Produktionseinsatz empfohlen. Weitere Informationen zu dieser Änderung erhalten Sie im selben Thread.

@cromat , hast du es geschafft, das zu
Ich habe es gerade auf 5.11.0 gepinnt

Jawohl. Da wir das gleiche Fehlerprotokoll haben, haben Sie wahrscheinlich auch einen Import aus der tslint-Bibliothek. Durchsuchen Sie Ihren Code nach Importen von 'tslint/lib/utils' und entfernen Sie ihn oder refaktorisieren Sie ihn. In meinem Fall war es die Funktion arrayify , die das Problem verursachte und die eigentlich nicht benötigt wird, weil ich einfach Javasript verwenden konnte, um ein Array aus einigen Daten zu erstellen.

@cromat Super, dass du eine Lösung gefunden hast, danke! 🙌

Aber: Wie führt das Importieren von tslint/lib/utils zu diesem Fehler? Hat utils.d.ts eine Typenabhängigkeit von diesen Modulen, ist aber nicht explizit in der veröffentlichten dependencies Liste in tslint/package.json deklariert?

@JoshuaKGoldberg Ich bin mir nicht sicher, was das Problem verursacht. Ich habe versucht, die Build-Einstellungen zu ändern, weil ich dachte, dass Tslint möglicherweise nicht mit anderen Teilen der App erstellt und dann etwas daraus importiert wird, die App unterbricht, aber dies scheint nicht das Problem zu sein. Ich habe die Unterschiede zwischen den Tslint-Versionen 5.11.0 und 5.12.0 noch nicht untersucht, um herauszufinden, was die Breaking Changes sind.

Ich kann bestätigen, dass das Entfernen aller tslint/lib/utlis Importe das Problem behoben hat.
@JoshuaKGoldberg Ich würde dies immer noch als Tslint-Fehler betrachten, da es in 5.11.0 gut funktioniert

Das gleiche Problem hat mich heute gebissen. Es stellte sich heraus, dass es tatsächlich einen Fehler gab

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

in unserem Code. Code korrigiert, unnötigen Import entfernt, et voilà, Build läuft reibungslos.

Dies ist wirklich eine Teilmenge / ein Stück Kontextinformation für #2446. Es ist nicht gut dokumentiert _(Pull-Requests in den Dokumenten akzeptieren!)_, aber das Unterverzeichnis lib/ ist nicht Teil der öffentlichen API. Es ist nur ein Zufall, dass das in vielen Szenarien gut funktioniert.

@doronsever , normalerweise würde ich das Thema an dieser Stelle schließen, aber da es ein bisschen hin und her

Das Entfernen der Importe behebt dieses Problem.

Ich hatte das gleiche Problem, ich habe hasOwnProperty von tslint/lib/utils . Es wurde durch Object.prototype.hasOwnProperty und erfolgreich auf 5.13 aktualisiert.

🤖 Beep boop! 👉 TSLint ist veraltet 👈 und Sie sollten zu typescript-eslint wechseln ! 🤖

🔒 Dieses Problem wird gesperrt, um weitere unnötige Diskussionen zu vermeiden. Dankeschön! 👋

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen