-
Notifications
You must be signed in to change notification settings - Fork 0
/
compile.js
87 lines (76 loc) · 2.55 KB
/
compile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/* eslint-disable import/no-extraneous-dependencies, no-console */
// モジュールを読み込む
const cpexec = require('child_process').exec; // コマンド実行
const mkdir = require('mkdirp'); // ディレクトリ作成
const notifer = require('node-notifier'); // デスクトップ通知
const path = require('path'); // パス文字列操作
// 拡張子ごとに入力元の基準ディレクトリを設定
const baseDir = {
'.js': 'src/js',
'.pcss': 'src/pcss',
'.pug': 'src/pug',
};
// 拡張子ごとに出力先の基準ディレクトリを設定
const outDir = {
'.js': 'public/js',
'.pcss': 'public/pcss',
'.pug': 'public',
};
// 引数からパスを取得
const srcPath = path.normalize(process.argv[2]);
// パスから拡張子を取得
const extStr = path.extname(srcPath);
// 出力先のディレクトリ・パスを生成
const outPath = path.join(outDir[extStr], path.relative(baseDir[extStr], path.dirname(srcPath)));
// コンパイル・コマンドを生成
let cmdStr = '';
switch (extStr) {
// 拡張子.js用コンパイル・コマンド
case '.js':
// Usage: webpack [options]
cmdStr = 'webpack';
break;
// 拡張子.pcss用コンパイル・コマンド
case '.pcss':
// Usage: postcss [input.css] [options] [-o|--output output.css]
cmdStr = 'postcss src pcss/style.pcss --map --output public/css/style.min.css';
break;
// 拡張子.pug用コンパイル・コマンド
case '.pug':
// Usage: pug [options] [dir|file ...]
cmdStr = `pug --out ${outPath} --basedir ${baseDir[extStr]} --pretty ${srcPath}`;
break;
// 登録外拡張子用メッセージ
default:
cmdStr = `echo Command for "${extStr}" is not registered.`;
}
// 出力先のディレクトリを作成
mkdir(outPath, (err) => {
// エラー処理
if (err) {
// デスクトップ通知を表示
notifier.notify({
title: 'An error has occured',
message: 'Check the terminal for more information',
});
// コンソールにエラー・ログを表示
console.log(err);
} else {
// コンパイル・コマンドを実行
cpexec(cmdStr, (error, stdout) => {
// エラー処理
if (error) {
// デスクトップ通知を表示
notifier.notify({
title: 'An error has occured',
message: 'Check the terminal for more information',
});
// コンソールにエラー・ログを表示
console.log(error);
} else {
// コンソールにログを表示
console.log(stdout);
}
});
}
});