In der neuesten Fable (0.4.4) habe ich ein Problem beim Erstellen eines Projekts, das auf ein anderes Projekt verweist. Wenn das referenzierte Projekt einen Punkt im Namen hat, generiert Fable falsche Pfade in den erforderlichen Aufrufen. Vor dem Upgrade von Fable hatte ich das Problem nicht.
Stellen Sie sich vor, Sie haben eine Lösung mit drei F#-Projekten: Library
, Library.Another
und Main
. Main
verweist sowohl auf Library
als auch auf Library.Another
. Nehmen wir nun an, die beiden Bibliotheksprojekte wurden bereits von Fable zu out/library
und out/library-another
kompiliert.
Wenn Sie nun das Main
Projekt mit dieser fableconfig.json kompilieren...
{
"module": "commonjs",
"outDir": "out/main",
"projFile": "Test/Main/Main.fsproj",
"refs": {
"Library": "../library",
"Library.Another": "../library-another"
}
}
...in der generierten Ausgabe erhalten Sie immer dann falsche require-Aufrufe, wenn ein Modul aus dem Library.Another
Projekt referenziert wird (Module, die von Library
referenziert werden, funktionieren einwandfrei). Zum Beispiel:
var _SomeModule = require("../library/SomeModule");
var _AnotherModule = require("../library-another/Library.Another/AnotherModule");
Der erste erforderliche Aufruf funktioniert wie erwartet. Der zweite require-Aufruf hat jedoch aus irgendeinem Grund Library.Another/
in seinem Pfad, was beim Versuch, den Verweis aufzulösen, einen Laufzeitfehler verursacht.
Ein ähnliches Problem tritt bei Verwendung des AMD-Modulsystems auf.
Hinweis: In meinem Fall sind die Verweise von Main
auf die Bibliotheken Projektreferenzen, die innerhalb derselben Projektmappe erstellt wurden (im Gegensatz zu einer externen DLL) – ich bin mir nicht sicher, ob dies einen Unterschied macht oder nicht.
Hmm, ich bin mir nicht sicher, ob der Punkt das Problem ist, da wir in dem Projekt mit den Tests
/Main/Main.fsproj
/Library/Library.fsproj
SomeModule.fs
/Library.Another.fsproj
/Library.Another/AnotherModule.fs
Danke für den Bericht!
Mein Projekt ist nicht öffentlich, aber ich habe ein schnelles Repo mit ähnlicher Struktur erstellt, um das Problem zu zeigen, das ich habe:
https://github.com/funlambda/fable-project-ref-example
Wenn Sie es klonen und build-and-run.sh
ausführen, sollten Sie den Laufzeitfehler des Modulrefs sehen. Der problematische Pfad ist in out/main/Program.js
:
var _AnotherModule = require("../library-another/Library.Another/AnotherModule");
Vielen Dank, dass Sie sich die Zeit genommen haben, die Struktur vorzubereiten, um das Problem zu reproduzieren! Es war tatsächlich der Punkt :) Ich habe [email protected]
mit dem Fix veröffentlicht. Könntest du es versuchen?
Funktioniert jetzt perfekt - danke für die Reparatur und die wahnsinnig schnelle Abwicklung!