Comment ajouter un script personnalisé à mon fichier package.json qui exécute un fichier javascript?


177

Je veux pouvoir exécuter la commande script1dans un répertoire de projet qui s'exécutera node script1.js.

script1.jsest un fichier dans le même répertoire. La commande doit être spécifique au répertoire du projet, ce qui signifie que si j'envoie à quelqu'un d'autre le dossier du projet, il pourra exécuter la même commande.

Jusqu'à présent, j'ai essayé d'ajouter:

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

dans mon fichier package.json, mais lorsque j'essaie d'exécuter, script1j'obtiens la sortie suivante:

zsh: command not found: script1

Quelqu'un connaît-il les étapes nécessaires pour ajouter le script mentionné ci-dessus au dossier du projet?

* Remarque: la commande ne peut pas être ajoutée au profil bash (ne peut pas être une commande spécifique à la machine)

Veuillez me faire savoir si vous avez besoin de précisions.


3
comment essayez-vous de l'exécuter? utilisez-vous "npm run script1"?
niorad

3
avez-vous exécuté script1 en utilisant npm run script1?
Claudiordgz

@Claudiordgz a raison, ou comme dans la réponse de Sujeet, "npm start" et "npm test" sont des raccourcis pour les scripts appelés "start" et "test"
mjohnsonengr

1
dans mon terminal, je dois être en mesure de taper la commande en un mot appelée script1qui devrait fonctionnernode script1.js
Jake.JS

Réponses:


261

Scripts personnalisés

npm run-script <custom_script_name>

ou

npm run <custom_script_name>

Dans votre exemple, vous voudriez exécuter npm run-script script1ou npm run script1.

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

Scripts du cycle de vie

Node vous permet également d'exécuter des scripts personnalisés pour certains événements du cycle de vie, comme après npm installson exécution. Ceux-ci peuvent être trouvés ici .

Par exemple:

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

Cela fonctionnerait electron-rebuildaprès une npm installcommande.


1
npm run-script scriptnamea fonctionné pour moi, mais npm run scriptnamepas!
blueprintchris

Comment est-il possible d'exécuter un script personnalisé sans la commande "run"? Sails.js dose cela - il a une commande sails liftqui nécessite même NPM. L'installer via NPM ajoute-t-il un script de terminal sur le système sur lequel il est installé? Sinon, comment cela se fait-il?
Gal Grünfeld

@ GalGrünfeld avez-vous installé des voiles dans le monde (npm install -g)?
Yves Dorfsman

J'ai, et j'ai fait quelques lectures, et pour autant que je me souvienne du site Web de Sail, en l'installant globalement (via -g), j'ai découvert que Sails installe des scripts bash / cmdlet (par exemple sails generate api <api_name>(bash / cmdlet en fonction de la machine sur laquelle il est installé) et ajoute des chemins globaux à ces scripts sur la machine.
Gal Grünfeld

comment exécuter le fichier js du package npm téléchargé via mon package.json?
Hardik Rana

26

J'ai créé ce qui suit et cela fonctionne sur mon système. Veuillez essayer ceci:

package.json:

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

script1.js:

console.log('testing')

Depuis votre ligne de commande, exécutez la commande suivante:

npm start

Cas d'utilisation supplémentaire

Mon fichier package.json contient généralement les scripts suivants, qui me permettent de surveiller mes fichiers pour la dactylographie, les compilations sass et l'exécution d'un serveur.

 "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
la commande pour exécuter le script1.jsfichier doit être une commande personnalisée d'un mot appeléescript1
Jake.JS

puis changez "start"en script1, vous pouvez utiliser n'importe quel nom que vous voulez, je préfère utiliser startpour définir clairement ce qui devrait fonctionner
Sujeet Jaiswal

3
@ sujeet-jaiswal simplement changer de début à script1 ne fonctionnera pas. Le mot "start" est réservé dans npm, donc ça marche. Le mot script1 n'est pas et il ne sera pas reconnu, même s'il est défini dans package.json La réponse wesleysmyth ci-dessus est la bonne, il suffit d'ajouter run à l'appel.
Predrag Stojadinović

18

Les étapes sont ci-dessous:

  1. Dans package.json, ajoutez:

    "bin":{
        "script1": "bin/script1.js" 
    }
  2. Créez un bindossier dans le répertoire du projet et ajoutez un fichier runScript1.jsavec le code:

    #! /usr/bin/env node
    var shell = require("shelljs");
    shell.exec("node step1script.js");
  3. Exécuter npm install shelljsdans le terminal

  4. Exécuter npm linkdans le terminal

  5. À partir du terminal, vous pouvez maintenant exécuter script1ce qui fonctionneranode script1.js

Référence: http://blog.npmjs.org/post/118810260230/building-a-simple-command-line-tool-with-npm


Cela devrait être la réponse acceptée basée sur le commentaire de @ Jake.JS sur sa question, c'est-à-dire comment l'exécuter avec une seule commande.
AdamJB le

Cela devrait être la réponse acceptée basée sur la question
Damian

2

Disons que dans les scripts, vous souhaitez exécuter 2 commandes avec une seule commande:

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

Accédez maintenant à votre terminal et exécutez-y npm run singleCommandToRunTwoCommand.


Bien qu'utile, cela ne répond pas directement à la question du PO.
AdamJB

1
Fondamentalement, nous sommes destinés à vous guider sur le bon chemin, plus vous le faites par vous-même. C'est la bonne manière d'apprendre.
Soban Arshad le

@AdamJB Il le fait, car il a utilisé npm run <script_name>
Kubadev

@kubadev, je ne veux pas être pédant, faisait juste remarquer que l'OP exige que le script soit exécuté avec une commande d'un mot selon son propre commentaire sur sa question:In my terminal I need to be able to type the one word command called script1 which should run node script1.js
AdamJB

1

Exemple:

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

Comme vous pouvez le voir, le script "build_c" construit l'application angulaire, puis supprime tous les anciens fichiers d'un répertoire, puis copie enfin les fichiers de construction de résultat.


2
Voici quelques informations utiles sur &&- stackoverflow.com/questions/39172536/…
Simon_Weaver
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.