`npm build` n'exécute pas le script nommé" build "dans package.json

138

Pour un nouveau module que j'essaie d'utiliser npm buildsans gulp / Grunt / autres outils de construction spécialisés.

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

Mon build.js est simplement

console.log('Hello')

Cependant, courir

npm build

Quitte simplement sans rien imprimer, avec un statut de 0.

Fonctionnement:

npm install

Fait également toutes les choses normales, mais n'exécute pas non plus build.js.

Comment puis-je faire exécuter mon script de construction à npm?

Edit: même les commandes bash simples ne semblent pas fonctionner, par exemple

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

Ne crée pas de fichier avec ce nom.

Mikemaccana
la source
Solution: utilisez à la installplace.
Zaz
C'est fondamentalement un ennui énorme et peu intuitif de NPM et c'est l'une des raisons pour lesquelles je continue à utiliser Yarn. Avec yarn, je peux exécuter n'importe quel script personnalisé comme un paramètre, c'est-à-dire que le livre de contes de fil exécutera le script du livre de contes. Dans NPM, je dois faire npm run storybook et en plus de cela, si je souhaite passer des paramètres via npm, cela nécessite - avant cela, donc lorsque vous comparez yarn storybook --ci à npm run storybook - --ci, c'est une évidence pour moi.
Emobe

Réponses:

243

Malheureusement, il npm builds'agit déjà d'une commande interne , comme décrit dans la documentation :

Il s'agit de la commande de plomberie appelée par npm link et npm install. Il ne doit généralement pas être appelé directement.

Parce que cette commande existe déjà, elle fait toujours de l'ombre sur votre "build": "node build.js".

La manière complète d'exécuter votre propre script est avec run-scriptou son aliasrun :

$ npm run build

npm startet d'autres sont le raccourci, mais ce n'est une option que lorsqu'une commande npm existante ne l'observe pas, comme le npm buildfait.


For posterity (comme d'autres l'ont mentionné) npm buildest utilisé par npm pour créer des addons Node C / C ++ natifs en utilisant node-gyp . Ce n'est pas bien documenté car généralement cela se produit automatiquement, mais si vous êtes intéressé, le code source est ici .

Jayphelps
la source
15
Alors qu'est - ce que çanpm build fait? Pour autant que je puisse voir, tous les fichiers
restent
2
Certains packages nécessitent un processus de construction. Lorsque vous exécutez npm installet que npm trouve un package qui a des liaisons C / C ++ ou généralement sth qui a besoin de node-gyp pour s'exécuter, il démarre npm build. Vous pouvez reconstruire ces packages en exécutant simplement npm buildseul.
Jakub Miziołek
4
La commande interne devrait être renommée _buildet npm builddevrait être un raccourci comme npm startetnpm test
Pawel
1
Je comprends que npm buildcela n'appellera pas mon script et qu'il est utilisé pour créer des composants compilés d'un package. Je ne sais toujours pas comment cela se passe: quels fichiers recherche-t-il, etc.?
aaaidan
1
Si je devais écrire un paquet moi-même, ce serait toujours bon de savoir, quoi faire pour le remplir npm buildde sens ...
Frank Nocke
20

Le script nommé "build" package.jsonn'est en aucun cas spécial. La seule façon de le faire fonctionner est d'appeler:

npm run-script build

Il y a quelques noms qui sont appelés automatiquement par npm , mais "build" n'en fait pas partie. La liste complète est:

  • prepublish, publish,postpublish
  • preinstall, install,postinstall
  • preuninstall, uninstall,postuninstall
  • preversion, version,postversion
  • pretest, test,posttest
  • prestop, stop,poststop
  • prestart, start,poststart
  • prerestart, restart,postrestart
  • preCUSTOMet postCUSTOMpour les noms de script personnalisés.
Flimm
la source
4

OK, pour exécuter une compilation seule, utilisez:

npm run-script build
Mikemaccana
la source
3

J'ai eu un problème en npm run buildne imprimant rien. fini par utiliser npm run build --verbosepour obtenir la sortie dont j'avais besoin.

Ou Gal
la source
2

Npm build attend

Un dossier contenant un fichier package.json à sa racine

Essayez d'utiliser des scripts npm dans votre package.json, comme le démarrage classique de npm

Kangcor
la source
Cela signifie que cela npm build .devrait fonctionner et, dans mon cas, npm exécute le script "build" dans mon "package.json" comme je l'espérais.
Erhhung le