¿Cómo agrego un script personalizado a mi archivo package.json que ejecuta un archivo javascript?

176

Quiero poder ejecutar el comando script1en un directorio de proyecto que se ejecutará node script1.js.

script1.jses un archivo en el mismo directorio. El comando debe ser específico para el directorio del proyecto, lo que significa que si envío a alguien más la carpeta del proyecto, podrán ejecutar el mismo comando.

Hasta ahora he intentado agregar:

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

a mi archivo package.json pero cuando intento ejecutar script1me sale el siguiente resultado:

zsh: command not found: script1

¿Alguien sabe los pasos necesarios para agregar el script mencionado anteriormente a la carpeta del proyecto?

* Nota: el comando no se puede agregar al perfil bash (no puede ser un comando específico de la máquina)

Avíseme si necesita alguna aclaración.

Jake.JS
fuente
3
¿Cómo estás tratando de ejecutarlo? ¿estás usando "npm run script1"?
niorad 05 de
3
¿ejecutaste script1 usando npm run script1?
Claudiordgz
@Claudiordgz tiene razón, o como en la respuesta de Sujeet, "npm start" y "npm test" son atajos para los scripts llamados "start" y "test"
mjohnsonengr
1
en mi terminal necesito poder escribir el comando de una palabra llamado script1que debería ejecutarsenode script1.js
Jake.JS

Respuestas:

260

Scripts personalizados

npm run-script <custom_script_name>

o

npm run <custom_script_name>

En su ejemplo, le gustaría ejecutar npm run-script script1o npm run script1.

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

Scripts de ciclo de vida

El nodo también le permite ejecutar scripts personalizados para ciertos eventos del ciclo de vida, como después de que npm installse ejecute. Estos se pueden encontrar aquí .

Por ejemplo:

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

Esto se ejecutaría electron-rebuilddespués de un npm installcomando.

wesleysmyth
fuente
1
npm run-script scriptnamefuncionó para mí, pero npm run scriptnameno lo hizo!
blueprintchris el
¿Cómo es posible ejecutar un script personalizado sin el comando "ejecutar"? Sails.js dosifica eso: tiene un comando sails liftque incluso requiere NPM. ¿Instalarlo a través de NPM agrega un script de terminal en el sistema donde está instalado? Si no, ¿cómo se hace esto?
Gal Grünfeld
@ GalGrünfeld, ¿instaló velas a nivel mundial (npm install -g)?
Yves Dorfsman
Leí, e hice un poco de lectura, y hasta donde puedo recordar del sitio web de Sail, instalándolo globalmente (vía -g), descubrí que Sails instala scripts bash / cmdlet (por ejemplo sails generate api <api_name>(bash / cmdlet según la máquina en la que se instala) y agrega rutas globales a esos scripts en la máquina.
Gal Grünfeld
¿Cómo ejecutar el archivo js del paquete npm descargado a través de mi package.json?
Hardik Rana
26

He creado lo siguiente y está funcionando en mi sistema. Por favor intente esto:

package.json:

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

script1.js:

console.log('testing')

Desde su línea de comando ejecute el siguiente comando:

npm start

Caso de uso adicional

Mi archivo package.json generalmente tiene los siguientes scripts, que me permiten ver mis archivos en busca de mecanografiados, compilaciones sass y ejecutar un servidor también.

 "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" 
  }
Sujeet Jaiswal
fuente
1
el comando para ejecutar el script1.jsarchivo debe ser un comando personalizado de una palabra llamadoscript1
Jake.JS
luego cambie "start"a script1, puede usar el nombre que desee, prefiero usar startpara definir claramente lo que debe ejecutarse
Sujeet Jaiswal
3
@ sujeet-jaiswal simplemente cambiar de inicio a script1 no va a funcionar. La palabra "inicio" está reservada en npm, por lo que funciona. La palabra script1 no es y no será reconocida, incluso cuando está definida en package.json La respuesta wesleysmyth anterior es la correcta, solo agregue ejecutar a la llamada.
Predrag Stojadinović
18

Los pasos están abajo:

  1. En package.json agregue:

    "bin":{
        "script1": "bin/script1.js" 
    }
  2. Cree una bincarpeta en el directorio del proyecto y agregue el archivo runScript1.jscon el código:

    #! /usr/bin/env node
    var shell = require("shelljs");
    shell.exec("node step1script.js");
  3. Correr npm install shelljsen la terminal

  4. Correr npm linken la terminal

  5. Desde la terminal ahora puede ejecutar lo script1que se ejecutaránode script1.js

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

Jake.JS
fuente
Esta debería ser la respuesta aceptada basada en el comentario de @ Jake.JS sobre su pregunta, es decir, cómo ejecutarla con un solo comando.
AdamJB
Esta debería ser la respuesta aceptada basada en la pregunta
Damian
2

Digamos en scripts que desea ejecutar 2 comandos con un solo comando:

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

Ahora ve a tu terminal y corre allí npm run singleCommandToRunTwoCommand.

Soban Arshad
fuente
Si bien es útil, esto no responde directamente a la pregunta del OP.
AdamJB
1
Básicamente, estamos destinados a guiarnos en el camino correcto, más que tú por tu cuenta. Esta es la forma correcta de aprender.
Soban Arshad
@AdamJB Lo hace, porque usó npm run <script_name>
Kubadev
@kubadev, no me refiero a ser pedante, solo estaba señalando que el OP requiere que el script se ejecute con un comando de una palabra según su propio comentario sobre su pregunta:In my terminal I need to be able to type the one word command called script1 which should run node script1.js
AdamJB
1

Ejemplo:

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

Como puede ver, el script "build_c" está compilando la aplicación angular, luego elimina todos los archivos antiguos de un directorio, y finalmente copia los archivos de compilación de resultados.

FindOutIslamNow
fuente
2
Aquí hay información útil sobre &&: stackoverflow.com/questions/39172536/…
Simon_Weaver