web-dev-qa-db-fra.com

Pouvez-vous définir des alias pour les scripts npm dans package.json?

J'ai un projet écrit en TypeScript

Lors du développement local:

ts-node est installé en tant que dépendance de développement, Les commandes sont

  to start: "ts-node src/index"
  to init: "ts-node bin/init"
  to init db: "ts-node bin/database-init"
  to migrate db: "ts-node bin/database-migrate"
  to add users: "ts-node bin/add-users"

ne fois déployé:

les dépendances dev sont supprimées, l'application est transposée, les commandes sont

  to start: "node src/index"
  to init: "node bin/init"
  to init db: "node bin/database-init"
  to migrate db: "node bin/database-migrate"
  to add users: "node bin/add-users"

Je suis donc obligé de maintenir cela dans mon package.json qui continuera de croître

"scripts": {
  "start": "ts-node src/index",
  "start:js": "node src/index",
  "init": "ts-node bin/init",
  "init:js": "node bin/init",
  "db:init": "ts-node bin/db-init",
  "db:init:js": "node bin/db-init",
  "db:migrate": "ts-node bin/db-migrate",
  "db:migrate:js": "node bin/db-migrate",
  "add:users": "ts-node bin/add-users",
  "add:users:js": "node bin/add-users"
},

Je préfère de loin avoir une seule commande qui fonctionne dans les deux


pour ce faire, j'ai défini l'alias suivant dans le serveur de déploiement

alias ts-node=/usr/bin/node

en tant que tel, tout cela fonctionne maintenant pour les deux ..

 "scripts": {
  "start": "ts-node src/index",
  "init": "ts-node bin/init",
  "db:init": "ts-node bin/db-init",
  "db:migrate": "ts-node bin/db-migrate",
  "add:users": "ts-node bin/add-users",
}

Mais ce n'est pas une excellente solution et m'empêche de le déployer ailleurs .. Je préfère définir l'espace de nom pour right-node à ts-node || node à l'intérieur de package.json de cette façon, ce serait portable ..

Je sais que l'espace de noms pour toutes les dépendances est ajouté lors de l'exécution de npm scripts, Cela se produit donc en coulisses, mais existe-t-il des fonctionnalités intégrées pour le faire manuellement?

5
lonewarrior556

Je pense que la meilleure solution est de travailler avec NODE_ENV mais d'abord, vous devez installer:

npm install if-env --save

puis dans le script:

"scripts": {
"start": "if-env NODE_ENV=production ?? npm run start:prod || npm run start:dev",
"start:dev": "ts-node src/index",
"start:prod": "node src/index"

}

Et sur le serveur, vous devez définir NODE_ENV en production

Sous Linux:

export NODE_ENV=production

Et pour la production, je suggère d'utiliser quelque chose comme pm2 ou foverer insted node pour démarrer une application

1
Lukasz Migut