NEWS
[gelöst] ts, src unter build durch adapter-config.d.ts
-
Hallo ts-Experten,
ein aus meiner Sicht nerviges Detail ist die Erzeugung des src-Verzeichnisses unterhalb von build (./build/src) wenn
a) es eine Datei adapter-config.d.ts unterhalb von src (Standard unterhalb von src/lib) gibt
und
b) sich die io-package.json im root des Projektes befindet.Verschiebe ich die io-package.json ins ./src, dann bekomme ich auch die gewünschte build-Verzeichnisstruktur ohne "src".
Die adapter-config.d.ts kann man ja schwerlich weglassen.Aber warum ändert das Vorhandensein der adapter-config.d.ts die build-Verzeichnisstruktur?
Mit dem Verschieben der io-package.json könnte ich ganz gut leben, aber leider der js-controller nicht, der sucht leider nicht, sondern geht davon aus, dass sie im root-Verzeichnis des Adapters liegt und damit schlägt die Installation fehl.
Meine Lösung sieht jetzt wie folgt aus;
a) die echte io-package.json im root-Verzeichnis des Adapters wie gehabt
b) in ./src eine dummy - io-package.json{ "native": {} }
c) die adapter-config.d.ts in ./src/lib verweist auf die dummy - io-package.json in ./src
// This file extends the AdapterConfig type from "@types/iobroker" // using the actual properties present in io-package.json // in order to provide typings for adapter.config properties import { native } from '../io-package.json'; type _AdapterConfig = Partial<typeof native>; // Augment the globally declared type ioBroker.AdapterConfig declare global { namespace ioBroker { // tslint-disable-next-line:no-empty-interface interface AdapterConfig extends _AdapterConfig { // Do not enter anything here! } } }
Damit entfällt das lästige Umbauen des Build-Verzeichnisses. Aber vielleicht findet ja auch noch jemand die Ursache, warum die adapter-config.d.ts die build-Verzeichnisstruktur ändert.
-
@greyhound Hast du das Projekt mit der aktuellsten Version des Adapter Creators erstellt? Wenn nicht, würde ich das mal machen, denn grundsätzlich funktioniert das bei mir in mehreren Adaptern problemlos.
-
@greyhound sagte in ts, src unter build durch adapter-config.d.ts, workarround:
Aber vielleicht findet ja auch noch jemand die Ursache
Ja, das liegt daran, dass die io-package.json von außerhalb
src
referenziert wird. Aber wo hast du das in einem TS-Adapter her? Ich habe das bewusst nur in JS so "magisch" gelöst, weil da eben nicht kompiliert wird.
Unter TS musst du leider die adapter-config.d.ts von Hand mit den Config-Optionen versehen:
https://github.com/ioBroker/ioBroker.template/blob/master/TypeScript/src/lib/adapter-config.d.ts -
@UncleSam
Hi, nein, Basis war ein Klon von fb-presence-Adapter. Und bei einem auch einige Monate (oder fast ein Jahr) alten Adapter hatte ich das selbe Problem. Muss schauen wie ich Zeit finde, meinen mit der neuen Creator-Version zu vergleichen.
Hatte mich glaube dann auch beim tradfri-Adapter gewundert, wie da mit regex gezaubert wird.
Schien also so, als ob ich nicht allein bin. -
@greyhound sagte in ts, src unter build durch adapter-config.d.ts, workarround:
Muss schauen wie ich Zeit finde, meinen mit der neuen Creator-Version zu vergleichen.
Im Creator hat sich viel getan, da lohnt es sich, den Adapter mal "leer" neu zu erstellen und dann von Hand deinen Code rein zu nehmen (oder halt als Diff, aber das ist auch sehr aufwändig und dazu noch fehleranfällig).
-
@greyhound sagte in ts, src unter build durch adapter-config.d.ts, workarround:
Hatte mich glaube dann auch beim tradfri-Adapter gewundert, wie da mit regex gezaubert wird.
Das waren meine traurigen Versuche, diese Limitation auszuhebeln. Danach hab ich mich entschieden, dass die zusätzliche Komplexität den minimalen Benefit nicht wert ist.
-
Habe meinen ts Adapter aktualisiert, so viel war es dann doch nicht, werde ihn die Tage veröffentlichen, nichts besonderes nur ein weiterer TR-064-Adapter für die Fritz!Box