はじめに
- npmやyarnを利用した開発の際に、以下の点が気になったため、良い方法があるか調査。
- package.jsonへ定義するscriptsの量や内容が多くなってしまい、管理が大変
- 柔軟性や拡張性が欲しいため、json以外のファイルで記述したい。
- マルチプラットフォームで利用できる環境にしたい。
- 調査の結果、npsとnps-utilsの2つのライブラリを発見。
- 今回は、上記2つのライブラリの概要や手順、設定テンプレートを記述する。
手順
プロジェクト準備
- npmやyarnを利用している既存Node.jsプロジェクトを利用する。
- ※新規の場合、package.jsonでscriptsを管理するものを各自作成
- 今回は、下記の
package.json
の例を置き換える。
置き換え対象のpackage.json
{
"scripts": {
"dev": "NODE_ENV=development nodemon index.js",
"test": "NODE_ENV=test jest --coverage",
"lint": "eslint . --cache"
"build": "NODE_ENV=production run-s build:{clean,js}",
"build:clean": "rm -rf ./dist",
"build:js": "esbuild src/index.js --bundle --outfile=dist/out.js"
},
"devDependencies": {
................,
"esbuild": "^0.6.12",
"nodemon": "^2.0.4",
"jest": "^26.4.0",
"eslint": "^7.7.0",
"npm-run-all": "^4.1.5"
}
}
導入
- 上記プロジェクトへ以下2つのライブラリへインストール
# nps,nps-utilの導入
npm install --save-dev nps nps-utils
初期化
- 下記のコマンドで設定ファイルを作成する。
- ※今回はjsで作成する
# 設定ファイルの作成。デフォルトはpackage-scripts.js
./node_modules/.bin/nps init
# yamlで作成する場合。package-scripts.ymlが作成
./node_modules/.bin/nps init --type yml
- 作成後、下記の2つのファイルが入っている構造になっていることを確認する。
.
├── package.json
└── package-scripts.js
└── .......
設定テンプレート
- まず、初期化で作成した
package-scripts.js
の中身を下記にする。
package-scripts.js
// クロスプラットフォーム対応(Mac,Windows,Linux)
const {
series, // 連続実行の簡易化
rimraf, // rmコマンド
crossEnv // 環境変数設定
} = require('nps-utils');
module.exports = {
scripts: {
dev: {
default: crossEnv('NODE_ENV=development nodemon index.js')
},
test: {
default: crossEnv('NODE_ENV=test jest --coverage')
},
lint: {
default: 'eslint . --cache'
},
build: {
default: crossEnv(
`NODE_ENV=production ${series.nps(
'build.clean',
'build.js',
)}`,
),
clean: rimraf('dist'),
js: 'esbuild src/index.ts --bundle --outfile=dist/out.js',
}
}
};
- 最終的なpackage.jsonの中身を下記にする。
- ※devDependenciesにはインストール済みのnps等が入っている。
最終package.json
{
"scripts": {
"dev": "nps dev",
"test": "nps test",
"lint": "nps lint",
"build": "nps build"
},
"devDependencies": {
................,
"esbuild": "^0.6.12",
"nodemon": "^2.0.4",
"jest": "^26.4.0",
"eslint": "^7.7.0",
"npm-run-all": "^4.1.5",
"nps": "^5.10.0",
"nps-utils": "^1.7.0",
..........
}
}
実行
- 各種実行は、下記で行う。
- ※基本的に、npm scriptsで行なっている方法と変わらない。
# npm run スクリプト名
# dev
npm run dev
# test
npm run test