ローカルで作った Node.js プログラムを npm コマンドとして使いたい
ローカルCLI開発では、npm link を使います。
Express.js のアプリの基本ファイルを作成する方法を試してみます。
ディレクトリ構成
- cli
- template(Express アプリのテンプレート)
- ...
- cli.js
- package.json
- template(Express アプリのテンプレート)
- ex5app
cli.js
#!/usr/bin/env node
const fs = require('fs/promises');
const path = require('path');
const app_name = process.argv[2];
async function copyDir() {
if (!app_name) {
console.error("アプリ名を指定してください");
process.exit(1);
}
// CLIのあるディレクトリ基準
const templatePath = path.join(__dirname, 'template');
// 実行した場所基準
const targetPath = path.join(process.cwd(), app_name);
const jsonPath = path.join(targetPath, 'package.json');
await fs.cp(templatePath, targetPath, { recursive: true });
const packageJson = {
name: app_name,
version: "0.0.0",
private: true,
scripts: {
start: "node ./bin/www"
},
dependencies: {
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"ejs": "^4.0.1",
"express": "^5.0.3",
"http-errors": "~1.6.3",
"morgan": "^1.10.1"
}
};
await fs.writeFile(
jsonPath,
JSON.stringify(packageJson, null, 2),
'utf8'
);
console.log('アプリ作成完了');
}
copyDir(); cli.js のファイルの先頭に「 #!/usr/bin/env node 」を記述します。
package.json
{
"name": "genapp",
"version": "1.0.0",
"bin": {
"genapp": "./cli.js"
}
} 「 cli 」のディレクトリでnpm linkコマンドを実行します。
「 ex5app 」ディレクトリに移動し、以下のコマンドを実行します。
# genapp アプリ名
genapp myapp 「 template 」ディレクトリを引数に指定した名前に変更し、コマンドを実行した場所にディレクトリをコピーします。
npm link の削除
グローバル登録した自分の CLI を削除するには、プロジェクト内(cli ディレクトリ内)で以下のコマンドを実行します。
# npm unlink -g パッケージ名
npm unlink -g genapp