Porównaj ceny domen i usług IT, sprzedawców z całego świata

npm: uruchamiaj skrypty z pliku package.json z dowolnego miejsca w folderze projektu


Używam sekcji
scripts
w pliku package.json do przechowywania niektórych poleceń, które muszę regularnie uruchamiać.
"scripts": {
"test": "./test/phantomjs ./test/js/run_jasmine_test.coffee ./test/index.html",
"rjs": "r.js -o ./js/app.build.js",
"less": "lessc -x ./css/app.less > ./css/app.css"
}

w każdym poleceniu mam
./
na początku ścieżki - dlatego mogę wywołać
npm run-script rjs
z katalogu głównego projektu.
czy istnieje sposób na odwołanie się do katalogu głównego projektu w pliku package.json, tak żebym mógł uruchomić np.
npm test
z dowolnego miejsca w moim projekcie?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Myślę, że to zależy od tego, jak zorganizujesz swój projekt.
Stworzyłem przykładowy projekt tylko do demonstracji. To jest moje przykładowe drzewo katalogów projektu:
.
├── dir1
│   └── dir2
├── package.json
├── src
│   └── index.js
└── test
└── test.js


NOTE:
./dir1/dir2
to tylko dwa puste katalogi do demonstracji.
Mój plik
package.json
wygląda następująco:
{
"name": "sample",
"version": "1.0.0",
"description": "sample",
"main": "index.js",
"scripts": {
"test": "node test/test.js",
"start": "node src/index.js"
},
"author": "yaniv",
"license": "ISC"
}

Skoncentruj się na sekcji skryptów, są to dwie proste linie, z wyłączeniem mojej lokalizacji.
Jeśli zmienię katalog na
/ dir1/dir2
i wykonam
npm test
, a skrypt, który napisałem na właściwości
test
działa poprawnie bez użycia
./
(który definiuje bieżący katalog ...)

Wynik

-Przypuszczam, że jeśli zmienisz projekt i usuniesz
./
, to w twoim przypadku tak będzie.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:


INIT_CWD
>
Możemy odwołać się do katalogu głównego projektu poprzez zmienną środowiskową
INIT_CWD
, którą npm dla nas skonfigurował!
Od

lekarze
https://docs.npmjs.com/cli/run-script
:

Skrypty są uruchamiane z katalogu głównego modułu, niezależnie od bieżącego katalogu roboczego, gdy wywołujesz polecenie npm run. Jeśli chcesz, aby Twój skrypt zachowywał się inaczej w zależności od podkatalogu, w którym się znajdujesz, możesz użyć

zmienna

środowisko INIT_CWD, które zawiera pełną ścieżkę, w której byłeś, gdy uruchomiłeś polecenie npm run.

Przykład:
"tas:adminApp:build": "cd src/KidoService/AdminApp && npm run build && cd $INIT_CWD && gulp build_copyAdminApp",

I tylko dlatego, że lubię za dużo myśleć!

A co by było, gdybyśmy nie mieli dla siebie tego zestawu zmiennych!

Możemy wykonać komendę env zmienna set na każdym początku!
export ROOT_DIR = $ PDW
!
A potem, kiedy tego potrzebujemy! Możemy to wykorzystać!
Powyższy przykład stałby się
"tas:adminApp:build": "export ROOT_DIR=$PDW && cd src/KidoService/AdminApp && npm run build && cd $ROOT_DIR && gulp build_copyAdminApp",

Widać, że to dobra technika! Możemy użyć tego, aby połączyć się z niektórymi katalogami, do których chcemy wrócić!
W przypadku Windows używamy
set VAR = VALUE
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

myślisz o stworzeniu pliku powłoki, który działa?
na przykład utwórz plik .sh, uczyń go wykonywalnym (chmod 777 plik.sh)
a następnie przejdź do katalogu głównego projektu nodejs, uruchom npm, a następnie przejdź z powrotem do katalogu, który właśnie opuściłeś?
dodanie skryptu do środowiska sprawi, że będzie on wykonywany z dowolnego miejsca ...
czy alternatywnie zakodowanie pełnej ścieżki byłoby w porządku? (więc zamiast używać ./-put/home/user/username/yourproject/phantomjs)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Uważam, że najlepszą opcją jest utworzenie skryptu JS zamiast skryptu powłoki. Z mojego doświadczenia wynika, że ​​z npm łatwiej sobie radzić. następnie możesz sprawdzić, w jakim jesteś środowisku przed uruchomieniem poleceń. Mamy ludzi z Windows, Mac i Ubuntu, a sprawdzanie środowiska lub korzystanie z pakietu fs ułatwia życie.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się