Es ist seit längerem bekannt dass Microsoft & die Community parallel an 2 Projekte arbeiten, die sehr relevant für SharePoint-Entwickler sind: die SharePoint Framework (SPFx) und Die Patterns and Practices (PnP)-Bibliotheken.
Neulich habe ich es probiert mit Yeoman-Generator ein SPFx-Projekt für SharePoint 2016 & SharePoint Online zu erstellen (quasi rückwärtskompatibel mit On-prem-Versionen). Sobald man die Abhängigkeiten installiert hat z.B. mithilfe von npm install @pnp/sp, so kommen vom TypeScript-Compiler folgende Meldungen:

Nach ausgiebiger Recherche (übrigens bei SPFx oder PnP-Themen sind die Issues-Listen auf GitHub eher die erste Anlaufstelle da die Entwickler dort aktiv sind) ergab sich einen Hinweis unter issue 741 (GitHub-Link) im alten Repository: da waren 2 verschiedenen TypeScript-Versionen im Einsatz: die von SPFx geforderte Version 2.2.2 und die aktuellere 2.4.2. Das Buildsystem nahm also immer die „kompatibelste“ Version, und das war 2.2.2, was aber PnP nicht unterstützte.
Meine Angaben also:
– Yeoman generator (npm list -g @microsoft/generator-sharepoint): 1.5.1
– TypeScript 2.2.2 im SPFx-Projekt (2.4.2 jedoch laut PnP-Entwicker Andrew Koltyakow möglich)
Die Lösung ist eher ein Workaround, zum Zeitpunkt dieses Posts (August 2018) gibt es kein Fix dazu.
1) Die Datei package-lock.json im Projekt bearbeiten. Die befindet sich auf der root-Ebene, da wo das package.json oder gulpfile.js auch sind
2) Wie im Issue-Thread (s. Link oben) die TypeScript-Version manuell auf 2.4.2 ändern. Den Hashwert für 2.4.2 dabei beachten – beginnt mit sha1-+Dlf…
3) Datei speichern, im Terminal rm -rf node_modules/ ausführen, danach npm install um die ganzen Abhängigkeiten wiederherzustellen
4) Lt. Andrew wären wir da fertig, jedoch kann es passieren dass plötzlich Typescript im Projekt nicht mehr installiert ist. Der Fehler sieht dann so aus:


Was also dagegen tun? Beim genaueren Hinschauen unter package-lock.json (wurde nach npm install aktualisiert) sehen wir dass die typescript-Abhängigkeit auf 2.2.2 zurückgesetzt wurde. Hier also noch einmal manuell anpassen, danach nur npm install wieder ausführen (ohne die node_modules zu entfernen). Das Ergebnis von npm list typescript soll also am Ende wie unten aussehen. Das wars, nun soll das Projekt wieder baufähig sein. Viel Spaß! Kennt ihr einen besseren Weg? Einfach einen Kommentar unten hinterlassen, ich freue mich schon drauf.

