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 .gitignorejest npmdomyślnie ignorowane, jeśli .npmignorenie 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.
Skompilowane krzyżowo źródła w wersji wstępnej
Zalety : Jeśli używasz języka, który kompiluje krzyżowo do JavaScript, możesz prekompilować przed wydaniem i nie dołączać .coffeeplików do pakietu, ale śledzić je w repozytorium git.
Zbuduj resztki plików
Zalety : ludzie używający rzeczy takich jak node-gypmogą mieć pliki obiektów, które są generowane podczas kompilacji, które nigdy nie powinny trafiać do pakietu.
Wady : To i tak powinno zawsze wchodzić w .gitignoregrę. Musisz umieścić te rzeczy w tym miejscu, jeśli używasz .npmignorejuż pliku, ponieważ zastępuje on .gitignorez punktu widzenia npm.
Testy
Zalety : mniej bagażu w kodzie produkcyjnym.
Wady : nie można uruchamiać testów w środowiskach na żywo, jeśli istnieje niewielka szansa na awarię specyficzną dla systemu, na przykład nieaktualną wersję uruchomionego węzła, która powoduje niepowodzenie testu.
Ustawienia ciągłej integracji / pliki meta
Plusy : znowu mniej bagażu. Rzeczy, .travis.ymlktóre nie są wymagane do używania, testowania lub przeglądania kodu.
Dokumenty i przykłady kodu inne niż readme
Plusy : mniej bagażu. Niektórzy ludzie istnieją w szkole myślenia, w której jeśli nie możesz wyrazić przynajmniej minimalnej użytecznej funkcjonalności w swoim pliku Readme, Twój moduł jest za duży.
Wady : ludzie nie widzą wyczerpującej dokumentacji i przykładów kodu we własnym systemie plików. Musieliby odwiedzić repozytorium (co również wymaga połączenia z Internetem).
Obiekty stron Github
Zalety : Z pewnością nie musisz zaśmiecać swoich wydań CNAMEplikami lub symbolami zastępczymi, index.htmljeśli używasz modułu, który służy gh-pagesrównież jako repozytorium.
bower.json i przyjaciele
Zalety : jeśli zdecydujesz się zbudować swoje zależności przed wydaniem, nie potrzebujesz użytkownika końcowego, aby zainstalować bower, a następnie zainstalować więcej rzeczy. Osobiście trzymałbym te rzeczy w paczce. Kiedy robię 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.
Czy nie ma sposobu na usunięcie nieużywalnych skryptów z pliku package.json. Np. Testowanie skryptów? Czuję się trochę niechlujnie, usuwając wszystko, ale zachowaj skrypty w pliku ...
inf3rno
Nie, nie ma. Możesz pominąć je w pliku package.json, ponieważ i tak jest to przeznaczone głównie dla NPM, a jeśli uruchamiasz tylko testy, możesz uzyskać do nich dostęp za pomocą oryginalnego polecenia, aby je uruchomić.
Twój pakiet powinien zawierać tylko produkcyjne pliki wykonawcze.
Dzięki temu paczka będzie prostsza i szybsza do pobrania.
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ę;)
... nie wspominając o tym, że jest łatwiejszy do zapamiętania i mniej podatny na wypadki w użyciu (jeśli jesteś tak zapominalski, jak ja). Dzięki za wskazówkę, to świetnie.
Connor
2
Podoba mi się to podejście.
Brady Holt
2
Myślę, że możesz nawet pominąć „index.js”, zakładając, że jest to „główny” plik w twoim package.json :)
Ben George
Ignorowanie obrazów i niepotrzebnych dokumentów jest w porządku. Ale ignorowanie testów prawdopodobnie nie jest dobrym pomysłem. Pobieranie dodatkowych KB nie zajmuje dużo czasu, a wykonywanie operacji rekurencyjnych npm testwe wszystkich modułach node_modules może dać ci wskazówkę, jeśli coś działa inaczej w określonym środowisku.
adelriosantiago
5
@ NicolásFantone Właściwość files akceptuje również wzorzec glob . Więc możemy zignorować pliki testowe bez tworzenia .npmignore. files: ["lib", "!lib/**/*.test.js"]. :)
Sureshraj
15
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.ymllub twoje .jshintrcpliki, 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
Sentyment tutaj jest dobry, ale dla wyjaśnienia: .npmignorenie 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.
Mark Stosberg
3
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.
npm install yourlibrary
, na przykład.travis.yml
i.jshintrc
.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
jestnpm
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.
Skompilowane krzyżowo źródła w wersji wstępnej
.coffee
plików do pakietu, ale śledzić je w repozytorium git.Zbuduj resztki plików
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.Testy
Ustawienia ciągłej integracji / pliki meta
.travis.yml
które nie są wymagane do używania, testowania lub przeglądania kodu.Dokumenty i przykłady kodu inne niż readme
Obiekty stron Github
CNAME
plikami lub symbolami zastępczymi,index.html
jeśli używasz modułu, który służygh-pages
również jako repozytorium.bower.json i przyjaciele
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.
źródło
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ę;)
źródło
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źródło
.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?
źródło