Astroで作ったプロジェクトにて、ビルド後のファイルに変更を加えたり内容を確認したりすることがあります。そうなった際ファイルに改行がなかったり階層分けされていなかったりしたらとても不便です。
私は不便だった場合もありました。(ありません)
Viteの設定
まずは設定で改行ありにします。改行とインデントがあるだけでコードはとても読みやすいです。早速astro.config.mjs
に以下のように追記します。
export default defineConfig({
vite: {
build: {
minify: false,
},
},
conpressHTML: false,
}
このようにすることで、minify: false
によってCSSやJSなどのファイルの改行が追加されます。どちらかというと、改行を消す処理をなくす設定ですね。
Compressの設定
@playform/compress
も改行を無くす処理をするので、使用している場合は特定のファイルのみ処理しないように設定します。
integrations: [
playformCompress({
CSS: false,
HTML: false,
JavaScript: false,
}),
],
今回はHTML,CSS,JSの改行を見たいので、上のような設定がいいです。場合によって変更しましょう。
黒魔術(おまけ)
これで正しく改行ありのファイルが生成されるはずですが、なぜかHTMLファイルのみ改行がほとんどなく、数行に収まっています。
調べてみましたが解決策なるものは見つからず、結果的にPrettierで強制的に整形することにしました。悪手であることに間違いありませんので、正しい方法を現在模索中です。
scripts
追加
packages.jsonに以下の内容を加えます。
"scripts": {
"build": "astro check && astro build && prettier --write ./dist/**/*.html",
},
ignore
ファイル
これだけだとdistディレクトリが.gitignoreに含まれている影響でPrettierはdist
ディレクトリを整形できません。なので.gitignoreをコピーして.prettierignoreを作成し、そこからdistディレクトリの指定を削除します。
なぜか.gitignoreが優先されてしまうので、先程のPrettierコマンドの最後に--ignore-path .prettierignore
と引数を増やすことで、ようやくdistディレクトリを整形できます。
"scripts": {
- "build": "astro check && astro build && prettier --write ./dist/**/*.html",
+ "build": "astro check && astro build && prettier --write ./dist/**/*.html --ignore-path .prettierignore",
},
階層分け
次にファイルの階層分けをします。今の時点でも十分扱いやすいですが、プロジェクトが大きくなってくるとわかりにくくなります。
そのためにastro.config.mjs
の中のvite.build
に以下の設定を加えてください。
rollupOptions: {
output: {
assetFileNames: (info) => {
const fileType = info.name.split(".").pop().toLowerCase();
const imageTypes = ['png', 'jpg', 'jpeg', 'svg', 'gif', 'tiff', 'bmp', 'ico'];
const scriptTypes = ["js", "ts"];
const styleTypes = ["css", "scss"];
const category = imageTypes.includes(fileType) ? "images/" :
scriptTypes.includes(fileType) ? "script/" :
styleTypes.includes(fileType) ? "css/" : "";
return `assets/${category}[name]-[hash][extname]`;
},
},
},
諸注意としてこれらの設定をするとビルド後のファイルサイズが多少増加してしまいます。
あと三項演算子もりもりのキモイコードになっているのは、私が宗教上の理由でlet
が使えないからです。
これにより認識したファイル形式によってディレクトリ整理がされます。この設定は私がサクッと作ったもので、決して常用しているわけではないのでバグ等にご注意ください。