2017-01-06 3 views
1

Ich habe kürzlich ein privates Modul für NPM veröffentlicht, das einen gemeinsamen Code für einige unserer Dienste verwendet.NPM-Einstiegspunkt ohne index.js ändern

Der Code ist in ES6 geschrieben und so müssen wir ihn mit Babel transpilieren, bevor er in NPM veröffentlicht wird. Ich habe ein prepublish-Skript, das src in lib transpiliert.

In diesem Modul gibt es keine index.js Datei, da es sich nur um einen gemeinsamen Code handelt.

Das Problem, das ich habe, ist, dass, wenn ich das Modul von NPM installiere, require('@ourorg/ourmodule/somecode') nicht funktioniert (Modul kann nicht gefunden werden). Ich muss stattdessen require('@ourorg/ourmodule/lib/somecode') verwenden.

Ich habe versucht, das main Feld in package.json zu vielen Variationen von lib zu ändern, aber es scheint nicht zu funktionieren, wenn ich gehöre index.js Datei, in welchem ​​Fall require('@ourorg/ourmodule') zurückkehrt, was es exportiert wird. Eine Problemumgehung, die ich sehen kann, würde sein, den allgemeinen Code in eine index.js Datei zu exportieren, aber das ist überhaupt nicht wartbar.

Antwort

3

Das main Feld in package.json folgt den gleichen Regeln wie normale Knoten Importe - entweder in einer einzigen Datei insbesondere zeigen sollte, oder es kann in einem Verzeichnis verweisen, das eine index.js in ihm hat.

Soweit ich weiß, gibt es keine Möglichkeit, das Importieren Ihres Pakets einfach ein Alias ​​für ein Verzeichnis zu machen. Wenn es was gäbe, was würde require("@ourorg/ourmodule") zurückgeben?

Wenn es Sie absolut verrückt macht, jedes Mal, wenn Sie etwas importieren, lib einzugeben, könnten Sie vielleicht einen Schritt zu Ihrem Build-Prozess hinzufügen, der automatisch ein index.js generiert, das alles an der Wurzel re-exportiert?

+0

Es scheint, als sollte es einen einfacheren Weg geben, dies zu tun? Wir können sicherlich nicht die ersten sein, die einen gemeinsamen Code als Abhängigkeit haben wollen. Das Modul funktioniert wie erwartet, wenn ich die Anweisung '/ lib /' in meine require-Anweisung einbeziehe, obwohl der Stammordner keine 'index.js' enthält. Es gibt wirklich keine Möglichkeit zu sagen, "anstatt in den Projektstamm zu schauen, schau in diesen Ordner"? –

+0

@RhysCamm: Nach den Antworten ([1] (https://github.com/npm/npm/issues/10506#issuecomment-191979827), [2] (https://github.com/nodejs/node/ issues/3953 # issuecomment-158951174)) zu früheren Anfragen für diese Funktion ist es nicht möglich, dies zu tun, ohne den Modulauflösungsalgorithmus des Knotens zu ändern, der zu diesem Zeitpunkt effektiv in Stein gemeißelt ist. Ich denke, du hast leider kein Glück. –

Verwandte Themen