Como adiciono um script personalizado ao meu arquivo package.json que executa um arquivo javascript?


176

Quero poder executar o comando script1em um diretório de projeto que será executado node script1.js.

script1.jsé um arquivo no mesmo diretório. O comando precisa ser específico para o diretório do projeto, o que significa que, se eu enviar a outra pessoa a pasta do projeto, eles poderão executar o mesmo comando.

Até agora, tentei adicionar:

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

no meu arquivo package.json, mas quando tento executar script1, obtenho a seguinte saída:

zsh: command not found: script1

Alguém sabe as etapas necessárias para adicionar o script mencionado acima à pasta do projeto?

* Nota: o comando não pode ser adicionado ao perfil do bash (não pode ser um comando específico da máquina)

Entre em contato se precisar de algum esclarecimento.


3
como você está tentando executá-lo? você está usando "npm run script1"?
— Niorad

3
você executou o script1 usando npm run script1?
— Claudiordgz 17/04

@Claudiordgz é certo, ou como na resposta de Sujeet "npm Start" e "teste npm" são atalhos para scripts chamados "Start" e "teste"
— mjohnsonengr

1
na minha necessidade de terminal I para ser capaz de escrever o comando uma palavra chamada script1que deve ser executadonode script1.js
— Jake.JS

Respostas:


260

Scripts personalizados

npm run-script <custom_script_name>

ou

npm run <custom_script_name>

No seu exemplo, você deseja executar npm run-script script1ou npm run script1.

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

Scripts do ciclo de vida

O nó também permite executar scripts customizados para determinados eventos do ciclo de vida, como após a npm installexecução. Estes podem ser encontrados aqui .

Por exemplo:

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

Isso seria executado electron-rebuildapós um npm installcomando.


1
npm run-script scriptnametrabalhou para mim, no entanto npm run scriptnamenão!
— Julio

Como é possível executar um script personalizado sem o comando "run"? O Sails.js determina isso - ele possui um comando sails liftque exige até NPM. A instalação via NPM adiciona um script de terminal no sistema em que está instalado? Se não, como isso é feito?
— Gal Grünfeld

@ GalGrünfeld você instalou velas globalmente (npm install -g)?
— Yves Dorfsman

Eu li e li no site da Sail, instalando-o globalmente (via -g), e descobri que o Sails instala scripts bash / cmdlet (por exemplo, sails generate api <api_name>(bash / cmdlet de acordo com a máquina na qual ele é instalado) e acrescenta caminhos globais para esses scripts na máquina.
— Gal Grünfeld

como executar o arquivo js do pacote npm baixado através do meu package.json?
— Hardik Rana

26

Eu criei o seguinte e ele está funcionando no meu sistema. Por favor tente isto:

package.json:

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

script1.js:

console.log('testing')

Na sua linha de comandos, execute o seguinte comando:

npm start

Caso de uso adicional

Meu arquivo package.json geralmente possui os seguintes scripts, que permitem que eu observe meus arquivos para texto datilografado, compilações sass e executando um servidor também.

 "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
o comando para executar as script1.jsnecessidades de arquivo para ser um comando personalizado palavra um chamadoscript1
— Jake.JS

em seguida, mudar "start"para script1, você pode usar qualquer nome que você quiser, eu prefiro usar startpara definido claramente o que deve ser executado
— Sujeet Jaiswal

3
@ sujeet-jaiswal simplesmente mudar do início para o script1 não vai funcionar. A palavra "start" está reservada em npm, portanto funciona. A palavra script1 não é e não será reconhecida, mesmo quando definida no pacote.json A resposta wesleysmyth acima é a correta, basta adicionar run à chamada.
— Predrag Stojadinović

18

Os passos estão abaixo:

  1. No package.json, adicione:

    "bin":{
        "script1": "bin/script1.js" 
    }
  2. Crie uma binpasta no diretório do projeto e adicione o arquivo runScript1.jscom o código:

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

  4. Executar npm linkno terminal

  5. Do terminal agora você pode executar o script1que será executadonode script1.js

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


Esta deve ser a resposta aceita com base no comentário do @ Jake.JS em sua pergunta, ou seja, como executá-la com um único comando.
— AdamJB 27/01

Esta deve ser a resposta aceita com base na pergunta
— Damian

2

Digamos que nos scripts você deseja executar 2 comandos com um único comando:

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

Agora vá ao seu terminal e corra até lá npm run singleCommandToRunTwoCommand.


Embora útil, isso não responde diretamente à pergunta do OP.
— AdamJB

1
Basicamente, pretendemos nos guiar pelo caminho certo, mais sobre você por conta própria. Esta é a maneira correta de aprender.
— Soban Arshad

@AdamJB Ele usa, porque usou o npm run <
— script_name

@kubadev, eu não quero ser pedante, estava apenas apontando que o OP exige que o script seja executado com um comando de uma palavra, conforme seu próprio comentário sobre sua pergunta:In my terminal I need to be able to type the one word command called script1 which should run node script1.js
— AdamJB

1

Exemplo:

  "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 você pode ver, o script "build_c" está criando o aplicativo angular, exclui todos os arquivos antigos de um diretório e, finalmente, copia os arquivos de construção resultantes.


2
Aqui estão algumas informações úteis sobre &&- stackoverflow.com/questions/39172536/…
— Simon_Weaver
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.