O `npm build` não executa o script chamado“ build ”no package.json

138

Para um novo módulo, estou tentando usar npm buildsem gulp / Grunt / outras ferramentas especializadas de compilação.

"scripts": {
  "build": "node build.js"
},

Meu build.js é simplesmente

console.log('Hello')

No entanto, executando

npm build

Simplesmente sai sem imprimir nada, com o status 0.

Corrida:

npm install

Também faz todas as coisas normais, mas também não executa o build.js.

Como posso fazer o npm executar meu script de construção?

Editar: mesmo comandos simples do bash parecem não funcionar, por exemplo

"scripts": {
    "build": "touch TESTFILE"
},

Não cria um arquivo com esse nome.

mikemaccana
fonte
Solução alternativa: use em installvez disso.
Zaz
Isso é basicamente um aborrecimento enorme e não intuitivo do NPM e é uma das razões pelas quais continuo usando o Yarn. Com o yarn, eu posso executar qualquer script personalizado apenas como parâmetro, ou seja, o livro de histórias do yarn executará o script do livro de histórias. No NPM, eu tenho que executar o npm, executar o storybook e, além disso, se eu quiser passar algum parâmetro pelo npm, ele exige - antes dele, portanto, ao comparar o yarn storybook --ci com o npm, execute o storybook - --ci, é um acéfalo para mim.
Emobe

Respostas:

243

Infelizmente, npm buildjá existe um comando interno , conforme descrito nos documentos :

Este é o comando de encanamento chamado pelo npm link e pelo npm install. Geralmente, não deve ser chamado diretamente.

Como esse comando já existe, sempre sombreia o seu "build": "node build.js".

A maneira totalmente qualificada de executar seu próprio script é com run-scriptou seu aliasrun :

$ npm run build

npm starte outros são abreviados, mas é apenas uma opção quando um comando npm existente não o oculta, como o npm buildfaz.


A posteridade (como outros já mencionaram) npm buildé usada pelo npm para criar addons nativos do C / C ++ Node usando o node-gyp . Não está bem documentado, porque geralmente acontece automaticamente, mas se você estiver interessado, o código fonte está aqui .

jayphelps
fonte
15
Então o que npm build faz? Tanto quanto eu posso ver isso deixa todos os arquivos completamente inalterada ...
qntm
2
Alguns pacotes requerem um processo de compilação. Quando você está executando npm installe o npm encontra um pacote que possui ligações C / C ++ ou geralmente sth que precisa do node-gyp para ser executado, ele é iniciado npm build. Você pode reconstruir esses pacotes simplesmente executando npm buildsozinho.
Jakub Miziołek
4
comando interno deve ser renomeado para _builde npm builddeve ser um atalho como npm startenpm test
Pawel
1
Entendo que npm buildnão chamará meu script e que é usado para criar componentes compilados de um pacote. Ainda não tenho certeza de como isso acontece: quais arquivos ele procura, etc?
aaaidan 24/02
1
Se eu fosse escrever um pacote de mim mesmo, ainda assim seria bom saber, o que fazer para preencher npm buildcom o que significa ...
Frank Nocke
20

O script nomeado como "build" em package.jsonnão é especial de forma alguma. A única maneira de fazê-lo funcionar é chamar:

npm run-script build

Existem alguns nomes que são chamados automaticamente pelo npm , mas "build" não é um deles. A lista completa é:

  • prepublish, publish,postpublish
  • preinstall, install,postinstall
  • preuninstall, uninstall,postuninstall
  • preversion, version,postversion
  • pretest, test,posttest
  • prestop, stop,poststop
  • prestart, start,poststart
  • prerestart, restart,postrestart
  • preCUSTOMe postCUSTOMpara nomes de scripts personalizados.
Flimm
fonte
4

OK, para executar uma compilação por si só, use:

npm run-script build
mikemaccana
fonte
3

Eu tive um problema ao npm run buildnão imprimir nada. acabou usando npm run build --verbosepara obter a saída que eu precisava.

Ou Gal
fonte
2

Npm build espera

Uma pasta que contém um arquivo package.json em sua raiz

Tente usar scripts npm em seu package.json, como o clássico npm start

Kangcor
fonte
O que isso significa é que npm build .deve funcionar e, no meu caso, o npm executa o script "build" no meu "package.json", como eu esperava.
Erhhung 28/02