Come faccio ad aggiungere uno script personalizzato al mio file package.json che esegue un file javascript?


176

Voglio essere in grado di eseguire il comando script1in una directory di progetto che verrà eseguita node script1.js.

script1.jsè un file nella stessa directory. Il comando deve essere specifico per la directory del progetto, il che significa che se invio a qualcun altro la cartella del progetto, saranno in grado di eseguire lo stesso comando.

Finora ho provato ad aggiungere:

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

nel mio file package.json ma quando provo a eseguire script1ottengo il seguente output:

zsh: command not found: script1

Qualcuno conosce i passaggi necessari per aggiungere lo script sopra menzionato nella cartella del progetto?

* Nota: il comando non può essere aggiunto al profilo bash (non può essere un comando specifico della macchina)

Per favore fatemi sapere se avete bisogno di chiarimenti.


3
come stai cercando di eseguirlo? stai usando "npm run script1"?
niorad,

3
hai eseguito script1 usando npm run script1?
Claudiordgz,

@Claudiordgz ha ragione, o come nella risposta di Sujeet, "npm start" e "npm test" sono scorciatoie per script chiamati "start" e "test"
mjohnsonengr

1
nel mio terminale devo essere in grado di digitare il comando one word chiamato script1che dovrebbe essere eseguitonode script1.js
Jake.JS

Risposte:


260

Script personalizzati

npm run-script <custom_script_name>

o

npm run <custom_script_name>

Nel tuo esempio, vorresti eseguire npm run-script script1o npm run script1.

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

Script del ciclo di vita

Il nodo consente inoltre di eseguire script personalizzati per determinati eventi del ciclo di vita, come dopo l' npm installesecuzione. Questi possono essere trovati qui .

Per esempio:

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

Questo verrebbe eseguito electron-rebuilddopo un npm installcomando.


1
npm run-script scriptnameha funzionato per me, tuttavia npm run scriptnameno!
blueprintchris,

Come è possibile eseguire uno script personalizzato senza il comando "run"? Sails.js lo dosa - ha un comando sails liftche richiede persino NPM. L'installazione tramite NPM aggiunge uno script terminale sul sistema in cui è installato? In caso contrario, come viene realizzato?
Gal Grünfeld

@ GalGrünfeld hai installato le vele a livello globale (npm install -g)?
Yves Dorfsman,

Ho letto e fatto qualche lettura, e per quanto mi ricordo dal sito Web di Sail, installandolo a livello globale (via -g), ho scoperto che Sails installa script bash / cmdlet (es. sails generate api <api_name>(Bash / cmdlet in base alla macchina su cui è installato) e aggiunge percorsi globali a quegli script sulla macchina.
Gal Grünfeld

come eseguire il file js del pacchetto npm scaricato tramite il mio package.json?
Hardik Rana

26

Ho creato quanto segue e funziona sul mio sistema. Per favore prova questo:

package.json:

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

script1.js:

console.log('testing')

Dalla riga di comando, eseguire il comando seguente:

npm start

Caso d'uso aggiuntivo

Il mio file package.json ha generalmente i seguenti script, che mi consentono di guardare i miei file per dattiloscrivere, compilare in modo sassoso ed eseguire anche un server.

 "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
il comando per eseguire il script1.jsfile deve essere un comando personalizzato di una sola parola chiamatoscript1
Jake.JS

poi cambia "start"in script1, puoi usare qualsiasi nome che ti piace, preferisco usare startper definire chiaramente cosa dovrebbe essere eseguito
Sujeet Jaiswal

3
@ sujeet-jaiswal semplicemente cambiando dall'inizio allo script1 non funzionerà. La parola "start" è riservata in npm, quindi funziona. La parola script1 non è e non verrà riconosciuta, anche quando è definita in package.json La risposta wesleysmyth sopra è quella corretta, basta aggiungere run alla chiamata.
Predrag Stojadinović,

18

I passaggi sono di seguito:

  1. In package.json aggiungi:

    "bin":{
        "script1": "bin/script1.js" 
    }
  2. Crea una bincartella nella directory del progetto e aggiungi il file runScript1.jscon il codice:

    #! /usr/bin/env node
    var shell = require("shelljs");
    shell.exec("node step1script.js");
  3. Esegui npm install shelljsnel terminale

  4. Esegui npm linknel terminale

  5. Dal terminale è ora possibile eseguire script1quale verrà eseguitonode script1.js

Riferimento: http://blog.npmjs.org/post/118810260230/building-a-simple-command-line-tool-with-npm


Questa dovrebbe essere la risposta accettata basata sul commento di @ Jake.JS alla sua domanda, ovvero come eseguirla con un singolo comando.
AdamJB,

Questa dovrebbe essere la risposta accettata basata sulla domanda
Damian,

2

Diciamo negli script che vuoi eseguire 2 comandi con un singolo comando:

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

Ora vai al tuo terminale e corri lì npm run singleCommandToRunTwoCommand.


Sebbene utile, ciò non risponde direttamente alla domanda del PO.
AdamJB

1
Fondamentalmente siamo destinati a guidare sul percorso rigoroso, più su di te che fai da solo. Questo è il modo corretto di apprendere.
Soban Arshad,

@AdamJB Lo fa, perché ha usato npm run <script_name>
Kubadev il

@kubadev, non intendo essere pedante, stava solo sottolineando che l'OP richiede che lo script venga eseguito con un comando di una sola parola come da suo commento alla sua domanda:In my terminal I need to be able to type the one word command called script1 which should run node script1.js
AdamJB

1

Esempio:

  "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"
  },

Come puoi vedere, lo script "build_c" sta creando l'applicazione angolare, quindi elimina tutti i vecchi file da una directory, quindi infine copia i file di build dei risultati.


2
Ecco alcune informazioni utili su &&- stackoverflow.com/questions/39172536/...
Simon_Weaver
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.