Co dokładnie powinienem włożyć .npmignore
?
Testy? Rzeczy lubią .travis.yml
, .jshintrc
? Coś, co nie jest potrzebne podczas uruchamiania modułu (z wyjątkiem pliku readme)?
Nie mogę znaleźć żadnych wskazówek na ten temat.
Co dokładnie powinienem włożyć .npmignore
?
Testy? Rzeczy lubią .travis.yml
, .jshintrc
? Coś, co nie jest potrzebne podczas uruchamiania modułu (z wyjątkiem pliku readme)?
Nie mogę znaleźć żadnych wskazówek na ten temat.
.npmignore
lub "files"
( docs.npmjs.com/files/package.json#files ).
Odpowiedzi:
Jak zapewne zauważyłeś, NPM tak naprawdę nie określa dokładnie, co powinno tam być, raczej ma listę ignorowanych domyślnie plików . Wiele osób nawet go nie używa, ponieważ wszystko w twoim .gitignore
jest npm
domyślnie ignorowane, jeśli .npmignore
nie istnieje. Ponadto wiele plików jest już domyślnie ignorowanych, niezależnie od ustawień, a niektóre pliki są zawsze wykluczane z ignorowania, jak opisano w powyższym łączu.
Nie ma zbyt wiele oficjalnych informacji na temat tego, co zawsze powinno tam być, ponieważ jest to w zasadzie podzbiór .gitignore
, ale z tego, co wyciągam z używania node przez 5 lat, oto, co wymyśliłem.
Uwaga: Przez produkcję rozumiem każdą chwilę, w której twój moduł jest używany przez kogoś i nie rozwija się na samym module.
.coffee
plików do pakietu, ale śledzić je w repozytorium git.node-gyp
mogą mieć pliki obiektów, które są generowane podczas kompilacji, które nigdy nie powinny trafiać do pakietu..gitignore
grę. Musisz umieścić te rzeczy w tym miejscu, jeśli używasz .npmignore
już pliku, ponieważ zastępuje on .gitignore
z punktu widzenia npm..travis.yml
które nie są wymagane do używania, testowania lub przeglądania kodu.CNAME
plikami lub symbolami zastępczymi, index.html
jeśli używasz modułu, który służy gh-pages
również jako repozytorium.npm install
, powinienem polegać tylko na npm i żadnych innych zewnętrznych źródłach.Zasadniczo powinieneś go używać, jeśli jest coś, co chcesz trzymać z dala od pakietu npm, ale nie z repozytorium npm. Nie jest to długa lista elementów, ale npm wolałby raczej wbudować funkcjonalność niż trzymać ludzi w swoich pakietach z nieistotnymi obiektami.
Zgadzam się z odpowiedzią krótkim i syntetic lante za i dużym odpowiedź Samt za :
Mój wkład w te odpowiedzi:
.npmignore to czarna lista umożliwiająca wybór pliku pakietu. Ale w bardziej praktyczny sposób możesz umieścić na białej liście pliki, które musisz uwzględnić w swoim pakiecie, używając pola plików w pliku package.json:
{
"files": [
"lib/",
"index.js"
]
}
Myślę, że to prostsze, przyszłościowe i ma lepszą semantykę;)
npm test
we wszystkich modułach node_modules może dać ci wskazówkę, jeśli coś działa inaczej w określonym środowisku.
.npmignore
. files: ["lib", "!lib/**/*.test.js"]
. :)
Dla wyjaśnienia, za każdym razem, gdy ktoś to zrobi npm install your-library
, npm pobierze wszystkie pliki źródłowe zawarte w repozytorium, z wyjątkiem plików, które umieścisz w swoim .npmignore
.
Wiedz, że osoby instalujące Twoją bibliotekę będą potrzebowały tylko Twojej biblioteki, nic innego nie będzie konieczne.
Na przykład, gdy ktoś instaluje bibliotekę, prawdopodobnie nie dba o twoje .travis.yml
lub twoje .jshintrc
pliki, a nawet niektóre obrazy, pliki Grunt, dokumentację itp.
.npmignore
może pozwolić, aby Twój pakiet npm miał mniej plików i był szybszy do pobrania
.npmignore
nie wpływa bezpośrednio na to, co jest pobierane , wpływa na to, co trafia do twojego pakietu, gdy publikujesz i przesyłasz npm . To pośrednio tworzy mniejsze pliki do pobrania.
Nie dołączaj swoich testów. Często testy są około 5 razy większe niż rzeczywista baza kodu. Dopóki twoje testy są na Githubie itp., To wystarczy.
Ale to, co absolutnie powinieneś zrobić, to przetestować swój pakiet NPM w opublikowanym formacie . Utwórz kilka testów dymnych, które znajdują się w rzeczywistej bazie kodu, ale nie są częścią zestawu testów.
Możesz przeczytać o testowaniu swojego pakietu po jego utworzeniu w archiwum, tutaj: https://github.com/ORESoftware/r2g
Jak przetestować wynik „npm opublikuj” bez faktycznego publikowania go w NPM?
npm install yourlibrary
, na przykład.travis.yml
i.jshintrc