Jak dodać niestandardowy skrypt do mojego pliku package.json, który uruchamia plik javascript?


176

Chcę mieć możliwość wykonania polecenia script1w katalogu projektu, który będzie działać node script1.js.

script1.jsto plik w tym samym katalogu. Polecenie musi być specyficzne dla katalogu projektu, co oznacza, że ​​jeśli wyślę komuś folder projektu, będzie mógł uruchomić to samo polecenie.

Do tej pory próbowałem dodać:

"scripts": {
    "script1": "node script1.js"
}

do mojego pliku package.json, ale kiedy próbuję uruchomić script1, otrzymuję następujące dane wyjściowe:

zsh: command not found: script1

Czy ktoś zna kroki niezbędne do dodania wspomnianego powyżej skryptu do folderu projektu?

* Uwaga: polecenie nie może być dodane do profilu bash (nie może być poleceniem specyficznym dla komputera)

Daj mi znać, jeśli potrzebujesz wyjaśnień.


3
jak próbujesz to uruchomić? czy używasz „npm run script1”?
niorad

3
czy uruchomiłeś skrypt1 używając npm run script1?
Claudiordgz,

@Claudiordgz ma rację, lub jak w odpowiedzi Sujeeta, „npm start” i „npm test” to skróty do skryptów o nazwach „start” i „test”
mjohnsonengr

1
w moim terminalu muszę być w stanie wpisać jedno słowo polecenie, script1które powinno zostać uruchomionenode script1.js
Jake.JS Kwietnia

Odpowiedzi:


260

Skrypty niestandardowe

npm run-script <custom_script_name>

lub

npm run <custom_script_name>

W twoim przykładzie chciałbyś uruchomić npm run-script script1lub npm run script1.

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

Skrypty cyklu życia

Węzeł umożliwia również uruchamianie niestandardowych skryptów dla określonych zdarzeń cyklu życia, takich jak po npm installuruchomieniu. Można je znaleźć tutaj .

Na przykład:

"scripts": {
    "postinstall": "electron-rebuild",
},

To działałoby electron-rebuildpo npm installpoleceniu.


1
npm run-script scriptnamepracował dla mnie, ale npm run scriptnamenie!
blueprintchris

Jak można uruchomić niestandardowy skrypt bez polecenia „uruchom”? Sails.js to dozuje - ma polecenie, sails liftktóre nawet wymaga NPM. Czy zainstalowanie go przez NPM dodaje skrypt terminala do systemu, w którym jest zainstalowany? Jeśli nie, jak to się robi?
Gal Grünfeld

@ GalGrünfeld czy zainstalowałeś żagle globalnie (npm install -g)?
Yves Dorfsman

Czytałem i czytałem, o ile pamiętam ze strony Saila, instalując go globalnie (przez -g), dowiedziałem się, że Sails instaluje skrypty bash / cmdlet (np. sails generate api <api_name>(Bash / cmdlet zgodnie z maszyną, na której jest instalowany) i dodaje globalne ścieżki do tych skryptów na maszynie
Gal Grünfeld

jak uruchomić plik js pobranego pakietu npm za pośrednictwem mojego pliku package.json?
Hardik Rana

26

Utworzyłem następujący plik i działa on w moim systemie. Spróbuj tego:

package.json:

{
  "name": "test app",
  "version": "1.0.0",
  "scripts": {
    "start": "node script1.js"   
  }
}

script1.js:

console.log('testing')

Z wiersza poleceń uruchom następujące polecenie:

npm start

Dodatkowy przypadek użycia

Mój plik package.json zawiera zazwyczaj następujące skrypty, które umożliwiają mi przeglądanie moich plików pod kątem maszynopisu, kompilacji Sass oraz uruchamiania serwera.

 "scripts": {
    "start": "concurrently \"sass --watch ./style/sass:./style/css\" \"npm run tsc:w\" \"npm run lite\" ",    
    "tsc": "tsc",
    "tsc:w": "tsc -w", 
    "lite": "lite-server",
    "typings": "typings",
    "postinstall": "typings install" 
  }

1
Polecenie do uruchomienia script1.jspliku musi być niestandardowym poleceniem script1
jednowyrazowym o

następnie zmień "start"na script1, możesz użyć dowolnej nazwy, wolę użyć startjasno zdefiniowanego, co powinno być uruchamiane
Sujeet Jaiswal

3
@ sujeet-jaiswal po prostu zmiana ze startu na skrypt1 nie zadziała. Słowo „start” jest zarezerwowane w npm, więc działa. Słowo script1 nie jest i nie zostanie rozpoznane, nawet jeśli jest zdefiniowane w package.json. Powyższa odpowiedź wesleysmyth jest poprawna, wystarczy dodać run do wywołania.
Predrag Stojadinović

17

Kroki są poniżej:

  1. W pliku package.json dodaj:

    "bin":{
        "script1": "bin/script1.js" 
    }
  2. Utwórz binfolder w katalogu projektu i dodaj plik runScript1.jsz kodem:

    #! /usr/bin/env node
    var shell = require("shelljs");
    shell.exec("node step1script.js");
  3. Uruchom npm install shelljsw terminalu

  4. Uruchom npm linkw terminalu

  5. Z terminala możesz teraz uruchomić, script1który będzie działaćnode script1.js

Źródła: http://blog.npmjs.org/post/118810260230/building-a-simple-command-line-tool-with-npm


To powinna być akceptowana odpowiedź na podstawie komentarza @ Jake.JS do jego pytania, czyli jak uruchomić to jednym poleceniem.
AdamJB

To powinna być akceptowana odpowiedź na podstawie pytania
Damian

2

Powiedzmy w skryptach, które chcesz uruchomić 2 polecenia za pomocą jednego polecenia:

"scripts":{
  "start":"any command",
  "singleCommandToRunTwoCommand":"some command here && npm start"
}

Teraz idź do swojego terminala i biegnij tam npm run singleCommandToRunTwoCommand.


Chociaż jest to pomocne, nie stanowi to bezpośredniej odpowiedzi na pytanie PO.
AdamJB

1
Zasadniczo naszym celem jest poprowadzenie prawdziwej ścieżki, a więcej niż ty sam. To jest właściwy sposób uczenia się.
Soban Arshad

@AdamJB Robi, bo użył npm run <script_name>
Kubadev

@kubadev, nie chcę być pedantyczny, po prostu wskazał, że OP wymaga uruchomienia skryptu za pomocą polecenia jednego słowa, zgodnie z jego własnym komentarzem do jego pytania:In my terminal I need to be able to type the one word command called script1 which should run node script1.js
AdamJB

1

Przykład:

  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build --prod",
    "build_c": "ng build --prod && del \"../../server/front-end/*.*\" /s /q & xcopy /s dist \"../../server/front-end\"",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },

Jak widać, skrypt „build_c” buduje aplikację kątową, następnie usuwa wszystkie stare pliki z katalogu, a na koniec kopiuje wynikowe pliki kompilacji.


2
Oto kilka przydatnych informacji na temat &&- stackoverflow.com/questions/39172536/…
Simon_Weaver
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.