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?
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