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.

Jake.JS
fonte
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.

wesleysmyth
fonte
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" 
  }
Sujeet Jaiswal
fonte
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

Jake.JS
fonte
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.

Soban Arshad
fonte
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.

FindOutIslamNow
fonte
2
Aqui estão algumas informações úteis sobre &&- stackoverflow.com/questions/39172536/…
Simon_Weaver