質問するログイン新規登録

回答編集履歴

1

コード部分を修正

2021/09/11 07:55

投稿

miyabi-sun
miyabi-sun

スコア21482

answer CHANGED
@@ -53,25 +53,42 @@
53
53
  const fs = require("fs");
54
54
 
55
55
  // __dirnameはこのスクリプトファイルのディレクトリの絶対パスを示す
56
- const targets = fs.readdirSync(`${__dirname}/../assets/scripts`)
56
+ const assetsDir = `${__dirname}/../assets/scripts`;
57
- .filter(it => /\w.js$/.test(it)); // 拡張子を見てJSファイルでなきゃ捨てる
58
57
 
59
- console.log(targets);
60
- // ["a.js", "b.js"]
58
+ let output = "";
59
+ for (let it on fs.readdirSync(assetsDir)) {
60
+ // 拡張子を見てJSファイルでなきゃ捨てる
61
+ if (!/\w.js$/.test(it)) continue;
61
62
 
62
- let js = "";
63
- for (let it on targets) {
64
63
  // バイナリオブジェクトで取れる事があるので.toStringメソッドを叩いてStringにしておくこと
65
64
  const file = fs.readFileSync(`${__dirname}/../assets/scripts/${it}`).toString();
66
65
  if (js != "") js += "\n";
67
- js += file;
66
+ js += file;
68
67
  }
69
68
 
70
69
  fs.writeFileSync(`${__dirname}/../output/bundle.js`, js);
71
70
  ```
72
71
 
73
72
  Gulp使ってもこれと似たようなコードは記述しないといけないですからね。
73
+ 因みにメソッドチェーンを駆使するとこんな感じ
74
+ コード量的にも許容範囲って感じですね。
74
75
 
76
+ まぁストリームで処理するGulpはメモリの問題で死ぬ可能性がぐっと下がりますが、
77
+ 私の回答は馬鹿でかいファイルを読み込むと死にます。
78
+ まぁMB超えるようなファイルは作らないと思うので大丈夫ですかね。
79
+
80
+ ```js
81
+ #!/usr/bin/env node
82
+
83
+ const fs = require("fs");
84
+ const assetsDir = `${__dirname}/../assets/scripts`;
85
+ const output = fs.readdirSync(assetsDir)
86
+ .filter(it => /\w.js$/.test(it))
87
+ .map(it => fs.readFileSync(`${assetsDir}/${it}`).toString())
88
+ .join("\n");
89
+ fs.writeFileSync(`${__dirname}/../output/bundle.js`, output);
90
+ ```
91
+
75
92
  ---
76
93
 
77
94
  【おまけ】ちょっと戻ってBashの力で解決する