Mam pobrane repozytorium modułu, chcę zainstalować go lokalnie, a nie globalnie w innym katalogu?
Jak to łatwo zrobić?
javascript
node.js
npm
packages
npm-install
fantazyjny
źródło
źródło
npm link
spowoduje to drugie wystąpienie zależności zewnętrznych. Jeśli więc masz pakiet A, potrzebujesz B i C, B potrzebuje C. Łączenie B spowoduje, że aplikacja A będzie miała dwie instancje C.podasz tylko jeden
<folder>
argumentnpm install
, argument powinien wskazywać na folder lokalny zamiast nazwy pakietu:źródło
rm -rf node_modules
przed inpm install
po uruchomieniu skryptu odpowiedzi.Ponieważ zapytany i udzielony przez tę samą osobę, dodam link npm jako alternatywę.
z dokumentów:
[Edytuj] Począwszy od NPM 2.0, możesz zadeklarować lokalne zależności w pliku package.json
źródło
npm link
raz uruchomić na folderze (aby utworzyć globalne łącze symboliczne), a następnie uruchomićnpm link package-name
w folderze projektu (aby użyć globalnego łącza symbolicznego w projekcie). Odpowiedź poniżej jest właściwą odpowiedzią.file:
podejście) pozwoliła mojej aplikacji i modułowi lokalnemu na współdzielenie zależności. Mój testnpm link
dał w wyniku zduplikowaną zależność, która psuje rzeczy, jeśli zależność musi być używana jako singleton.npm pack
+package.json
Oto, co zadziałało dla mnie:
KROK 1: W
module project
, wykonajnpm pack
:Spowoduje to utworzenie
<package-name>-<version>.tar.gz
pliku.KROK 2: Przenieś plik do
consumer project
Idealnie możesz umieścić wszystkie takie pliki w
tmp
folderze wconsumer-project
katalogu głównym:KROK 3: Poleć to w swoim
package.json
:KROK 4:
Install
pakiety:npm install
lubnpm i
lubyarn
Twoja paczka powinna być dostępna w twoim
consumer-project's node_modules
folderze.Powodzenia...
źródło
Żadne z tych podejść (
npm link
lubpackage.json
zależności plików) nie działa, jeśli moduł lokalny ma zależności równorzędne, które chcesz zainstalować tylko w zakresie projektu.Na przykład:
W tym scenariuszu KMP ustanawia
myproject
„snode_modules/
tak:Kiedy węzeł ładuje się
mymodule
i robi torequire('foo')
, węzeł rozpoznajemymodule
dowiązanie symboliczne, a następnie szuka tylko/local/mymodule/node_modules/
(i jego przodków)foo
, których nie znalazł. Zamiast tego chcemy zajrzeć do węzła/local/myproject/node_modules/
, ponieważ tam właśnie uruchamiany był nasz projekt i gdziefoo
jest zainstalowany.Tak, my też potrzebujemy sposobu, aby powiedzieć węzeł nie rozwiązać ten symboliczny szuka
foo
, albo musimy znaleźć sposób, aby powiedzieć KMP zainstalować kopię namymodule
kiedy składnia zależność plik jest używany wpackage.json
. Niestety nie znalazłem sposobu na zrobienie tego :(źródło
NODE_PATH
, aby wskazywałnode_modules/
, gdziefoo
jest zainstalowany. Tak więc w powyższym przypadku byłoby to:NODE_PATH=/dev/myproject/node_modules/
Pozwalamymodule
to znaleźćfoo
.Brakuje głównej nieruchomości?
Jak odpowiedzieli poprzedni ludzie
npm --save ../location-of-your-packages-root-directory
.../location-of-your-packages-root-directory
Jednak musi mieć dwie rzeczy w celu użycia go do pracy.1)
package.json
w tym katalogu wskazanym na2)
main
właściwośćpackage.json
musi być ustawiona i działa ig,"main": "src/index.js",
jeśli plik wejściowy dla../location-of-your-packages-root-directory
to../location-of-your-packages-root-directory/src/index.js
źródło