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 linkspowoduje 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_modulesprzed i npm installpo 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 linkraz uruchomić na folderze (aby utworzyć globalne łącze symboliczne), a następnie uruchomić npm link package-namew 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 linkdał w wyniku zduplikowaną zależność, która psuje rzeczy, jeśli zależność musi być używana jako singleton.
npm pack + package.jsonOto, co zadziałało dla mnie:
module project, wykonaj npm pack:Spowoduje to utworzenie <package-name>-<version>.tar.gzpliku.
consumer projectIdealnie możesz umieścić wszystkie takie pliki w tmpfolderze w consumer-projectkatalogu głównym:
package.json:"dependencies": {
"my-package": "file:/./tmp/my-package-1.3.3.tar.gz"
}
Installpakiety:npm installlub npm ilubyarn
consumer-project's node_modulesfolderze.Powodzenia...
Żadne z tych podejść ( npm linklub package.jsonzależ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ę mymodulei robi to require('foo'), węzeł rozpoznaje mymoduledowią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 foojest 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 mymodulekiedy 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 foojest zainstalowany. Tak więc w powyższym przypadku byłoby to: NODE_PATH=/dev/myproject/node_modules/ Pozwala mymoduleto znaleźć foo.
Jak odpowiedzieli poprzedni ludzie npm --save ../location-of-your-packages-root-directory. ../location-of-your-packages-root-directoryJednak musi mieć dwie rzeczy w celu użycia go do pracy.
1) package.jsonw tym katalogu wskazanym na
2) mainwłaściwość package.jsonmusi być ustawiona i działa ig, "main": "src/index.js",jeśli plik wejściowy dla ../location-of-your-packages-root-directoryto../location-of-your-packages-root-directory/src/index.js