コマンド処理をまとめてみよう!npmスクリプトを用いたコマンド操作

今回は、npmを用いたコマンド操作について紹介したいと思います!

node.jsを実行する際、複数のコマンドを実行しなければならない時がありますよね?

  • サーバー側とクライアント側のプロセスを同時に開始したい。
  • 一つのコマンド操作で全てのテストコードを実行したい

こんな場合に役に立つのが、npmスクリプトです。

ディレクトリ構成

サーバー側:express

クライアント側:React

.
├── client
│   ├── package.json
│   └── src
├── package.json
└── server
    ├── package.json
    └── src

ソースコードやnode_modules,package-lock.jsonなどのディレクトリは省略しています。

今回紹介するのは、主にpackage.jsonの中身です。

サーバー、クライアント、プロジェクト全体にpackage.jsonが生成されている点が分かっていただければ十分です(^^)

サーバー側のスクリプト

では、サーバー側のスクリプトを実装していきましょう!

package.json

{
  "name": "server",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",

  "scripts": {
    "start": "nodemon src/server.js",
    "test": "jest",
    "test-watch": "jest --watch"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "bcrypt": "^5.0.1",
    "cors": "^2.8.5",
    "dotenv": "^16.0.0",
    "express": "^4.17.3",
    "jest": "^27.5.1",
    "jsonwebtoken": "^8.5.1",
    "mongoose": "^6.2.4",
    "nodemon": "^2.0.15",
    "passport": "^0.5.2",
    "passport-jwt": "^4.0.0",
    "passport-local": "^1.0.0",
    "supertest": "^6.2.2"
  }
}

実行したいスクリプトを作成するためには、scriptsにコマンド名を設定をしていく必要があります。

"start": "nodemon src/server.js",

この部分を例に見て見ましょう。

startというスクリプト名を設定し、コマンド名を値にセットしています。

この例は、nodemonを実行していますね!

npm run start

npm run <設定したスクリプト名> をターミナルに打つと、設定したコマンドが実行されます。

(例では、nodemonが実行される)

クライアント側のスクリプト

次に、クライアント側のスクリプトについて見ていきましょう!

package.json

{
  "name": "client",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.16.2",
    "@testing-library/react": "^12.1.3",
    "@testing-library/user-event": "^13.5.0",
    "axios": "^0.26.0",
    "bootstrap": "^5.1.3",
    "react": "^17.0.2",
    "react-bootstrap": "^2.2.1",
    "react-dom": "^17.0.2",
    "react-router-dom": "^6.2.2",
    "react-scripts": "5.0.0",
    "redux": "^4.1.2",
    "web-vitals": "^2.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "BUILD_PATH=../server/public react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

クライアント側でも、やることは変わりません!

scriptsにスクリプト名とコマンド操作を設定し、npm run <設定したスクリプト名>をターミナルに入力していきます。

プロジェクト全体のスクリプト

次にプロジェクト全体のpackage.jsonを設定していきます。

package.json

"scripts": {
    "install": "npm i --prefix client && npm i --prefix server",
    "deploy": "npm run build --prefix client && npm start --prefix server",
    "start": "npm run start --prefix server & npm run start --prefix client",
    "test": "npm test --prefix server"
  }

プロジェクト全体のスクリプトでは、サーバー側、クライアント側の両方のスクリプトが使えるようになります。

"start": "npm run start --prefix server & npm run start --prefix client"

この部分では、–prefix serverを用いてサーバー側のスクリプトにアクセスしています。

クライアント側も同様、–prefix clientでクライアント側にアクセスしています。

また、スクリプトを&で囲むことで複数の処理を実行できるようになります。

&&:一つ目の処理が完了してから二つ目の処理を実行

&:一つ目の処理が終わらなくても、二つ目の処理を実行

startに限らずとも、testを設定してテストコードを実行したり、installを設定して、 他人が開発するときに簡単にパッケージをインストールできるようにしておくこともできますよ!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です