Skip to content

Instantly share code, notes, and snippets.

@Atsumi3
Last active June 24, 2024 05:04
Show Gist options
  • Save Atsumi3/be3eba299fbbd11a3c35e2ffba6b3099 to your computer and use it in GitHub Desktop.
Save Atsumi3/be3eba299fbbd11a3c35e2ffba6b3099 to your computer and use it in GitHub Desktop.
Dart/Flutterのライブラリ作成でexportファイルの生成を楽にするためのスクリプト
#!/bin/bash
# 以下のようなディレクトリ構成で作成されているプロジェクト用
# pubspec.yaml
# lib/src/aaa/bbb.dart
if [ ! -f pubspec.yaml ]; then
echo "このスクリプトはDartパッケージのルートディレクトリで実行してください。pubspec.yamlが見つかりません。"
exit 1
fi
if [ ! -d lib/src ]; then
echo "このスクリプトはDartパッケージのルートディレクトリで実行してください。lib/srcフォルダが見つかりません。"
exit 1
fi
### 変数定義 ###
PACKAGE_NAME=$(cat pubspec.yaml | grep name | awk '{print $2}')
# エクスポート先のファイルを指定します
EXPORT_FILE="$PACKAGE_NAME.dart"
# エクスポート先の相対パスを指定します
EXPORT_PATH="lib/$EXPORT_FILE"
# 含めないファイル名を一覧にします
EXCLUDE_FILES=(
"$EXPORT_FILE"
".freezed.dart"
".g.dart"
)
# 含めないディレクトリ名を一覧にします
EXCLUDE_DIRS=()
### スクリプト実行 ###
# エクスポート先のファイルが存在する場合は.bakファイルを作成し削除します
if [ -f $EXPORT_PATH ]; then
mv $EXPORT_PATH $EXPORT_PATH.bak
echo "$EXPORT_PATH が存在するため、$EXPORT_PATH.bak にリネームしました。"
fi
# エクスポート先のファイルを作成します
touch $EXPORT_PATH
# lib/src ディレクトリ以下のすべてのDartファイルを探索し、エクスポート用のファイルに書き込みます
find lib/src -type f -name "*.dart" | while read file; do
# 特定ファイルは除外します
for exclude_file in ${EXCLUDE_FILES[@]}; do
if [[ $file == *$exclude_file ]]; then
continue 2
fi
done
# 特定ディレクトリは除外します
for exclude_dir in ${EXCLUDE_DIRS[@]}; do
if [[ $file == *$exclude_dir* ]]; then
continue 2
fi
done
# 先頭の ./lib/ を削除します
file=${file#lib/}
# エクスポート用のファイルに書き込みます
echo "export '$file';" >> $EXPORT_PATH
done
echo "すべてのDartファイルが $EXPORT_FILE にエクスポートされました。"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment