web-dev-qa-db-ja.com

package.json内でnpmスクリプトのエイリアスを設定できますか?

TypeScriptで書かれたプロジェクトがあります

ローカルで開発する場合:

ts-nodeは開発依存としてインストールされ、コマンドは

  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"

導入時:

開発依存関係が削除され、アプリが変換され、コマンドが

  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"

したがって、私はこれをpackage.jsonで維持することを余儀なくされます

"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"
},

私はむしろ両方で機​​能する単一のコマンドが欲しいです


これを行うには、展開サーバーに次のエイリアスを設定しました

alias ts-node=/usr/bin/node

そのため、これらすべてが現在両方で機能します。

 "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",
}

しかし、これは優れた解決策ではなく、他の場所に展開できないようにしています。right-node内のts-node || nodeの名前空間をpackage.jsonに設定すると、移植性が高くなります。 。

npm scriptsを実行すると、すべての依存関係の名前空間が追加されることがわかっています。これは裏で発生しますが、これを手動で実行するための組み込み機能はありますか?

5
lonewarrior556

最良の解決策はNODE_ENVを使用することだと思いますが、最初に、以下をインストールする必要があります。

npm install if-env --save

そしてスクリプトで:

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

}

そしてサーバー上でNODE_ENVを本番に設定する必要があります

Linuxの場合:

export NODE_ENV=production

本番環境では、pm2やfoverer insted nodeなどを使用してアプリケーションを起動することをお勧めします

1
Lukasz Migut