Mam pobrane repozytorium modułu, chcę zainstalować go lokalnie, a nie globalnie w innym katalogu?
Jak to łatwo zrobić?
Mam pobrane repozytorium modułu, chcę zainstalować go lokalnie, a nie globalnie w innym katalogu?
Jak to łatwo zrobić?
Odpowiedzi:
Z dokumentacji npm-link :
W lokalnym katalogu modułów:
$ cd ./package-dir
$ npm link
W katalogu projektu, aby użyć modułu:
$ cd ./project-dir
$ npm link package-name
Lub za jednym razem, używając ścieżek względnych:
$ cd ./project-dir
$ npm link ../package-dir
Jest to równoważne z użyciem dwóch poleceń powyżej pod maską.
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>
argument npm install
, argument powinien wskazywać na folder lokalny zamiast nazwy pakietu:
npm install /path
rm -rf node_modules
przed i npm install
po uruchomieniu skryptu odpowiedzi.
Ponieważ zapytany i udzielony przez tę samą osobę, dodam link npm jako alternatywę.
z dokumentów:
Jest to przydatne do instalowania własnych rzeczy, dzięki czemu można nad nimi pracować i testować iteracyjnie bez konieczności ciągłej przebudowy.
cd ~/projects/node-bloggy # go into the dir of your main project
npm link ../node-redis # link the dir of your dependency
[Edytuj] Począwszy od NPM 2.0, możesz zadeklarować lokalne zależności w pliku package.json
"dependencies": {
"bar": "file:../foo/bar"
}
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 test npm 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:
module project
, wykonaj npm pack
:Spowoduje to utworzenie <package-name>-<version>.tar.gz
pliku.
consumer project
Idealnie możesz umieścić wszystkie takie pliki w tmp
folderze w consumer-project
katalogu głównym:
package.json
:"dependencies": {
"my-package": "file:/./tmp/my-package-1.3.3.tar.gz"
}
Install
pakiety:npm install
lub npm i
lubyarn
consumer-project's node_modules
folderze.Powodzenia...
Żadne z tych podejść ( npm link
lub package.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:
/local/mymodule/package.json:
"name": "mymodule",
"peerDependencies":
{
"foo": "^2.5"
}
/dev/myproject/package.json:
"dependencies":
{
"mymodule": "file:/local/mymodule",
"foo": "^2.5"
}
W tym scenariuszu KMP ustanawia myproject
„s node_modules/
tak:
/dev/myproject/node_modules/
foo/
mymodule -> /local/mymodule
Kiedy węzeł ładuje się mymodule
i robi to require('foo')
, węzeł rozpoznaje mymodule
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 gdzie foo
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ę na mymodule
kiedy składnia zależność plik jest używany w package.json
. Niestety nie znalazłem sposobu na zrobienie tego :(
NODE_PATH
, aby wskazywał node_modules/
, gdzie foo
jest zainstalowany. Tak więc w powyższym przypadku byłoby to: NODE_PATH=/dev/myproject/node_modules/
Pozwala mymodule
to znaleźć foo
.
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 na
2) 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