tailwindcss非同期プラグインエラーの解決
## 問題の概要
React NativeプロジェクトでNativewindを使用中に以下のエラーが発生する場合があります:
screens/HomeScreen.js: Use process(css).then(cb) to work with async plugins
このエラーは通常、次のようなシンプルなコンポーネントで発生します:
```jsx
import { View, Text } from 'react-native'
import React from 'react'
export default function HomeScreen() {
return (
<View>
<Text className="text-red">HomeScreen</Text>
</View>
)
}
発生条件
このエラーが発生する主な環境:
- React Native + Nativewindの組み合わせ
- Tailwind CSSバージョン3.3.3以上を使用
- Expo SDK 49以上での開発環境
根本原因
エラーの主な原因はTailwind CSSバージョンとNativewindの互換性問題です。NativewindがTailwind CSSの非同期プラグイン処理を適切にハンドリングできないため、特にバージョン3.3.3以上で発生します。
効果的な解決策
最適な解決方法:Tailwind CSSのバージグレード
最も確実な解決方法はTailwind CSSをバージョン3.3.2に固定することです:
npm install tailwindcss@3.3.2 --save-dev
yarn add tailwindcss@3.3.2 --dev
bun add tailwindcss@3.3.2 --dev
package.json
の修正
依存関係を確実に固定するには、package.json
を直接編集します:
{
"devDependencies": {
// キャレット(^)を削除してバージョン固定
"tailwindcss": "3.3.2",
// その他の依存関係...
}
}
完全な再インストール手順
上記で解決しない場合、以下の完全な手順を実行してください:
# 既存パッケージの削除
npm uninstall nativewind tailwindcss
# 必要パッケージの再インストール
npm install --save-dev tailwindcss@3.3.2
npm install nativewind
# キャッシュクリア(Expo使用時)
npx expo start -c
その他の注意点
postcssのバージョン指定
環境によってはpostcssのバージョンも調整が必要です:
npm install postcss@8.4.23
フォントファイル名の大文字問題(iOS特有)
一部の環境ではフォントファイル名の大文字/小文字が影響します:
# 変更前
ZenLoop-Regular.ttf → # 変更後
Zenloop-Regular.ttf
Firebaseとの互換性問題
Firebaseを使用している場合、Tailwind CSS以外の互換性問題が発生することがあります:
"firebase": "9.22.2" // 安定バージョンを指定
回避すべき誤った対処法
以下の方法は効果がなく、むしろ問題を悪化させる可能性があります:
// async/awaitを強制的に使おうとする方法
process(css).then(() => {
ReactDOM.render(...);
});
このコードはReact Native環境では機能せず、Nativewindの設計思想にも反します。
公式情報とアップデート
Nativewindチームはこの問題を公式に認識しており、GitHub Issueで追跡中です:
Nativewind Issue #498: Compatibility with Tailwind CSS v3.3.3+
将来的にNativewindが新しいTailwindバージョンに対応した場合は、公式ドキュメントでアップデート情報が公開される予定です。
まとめ
Use process(css).then(cb) to work with async plugins
エラーの根本的な解決には:
- Tailwind CSSをバージョン3.3.2に固定
- パッケージマネージャーでのキャレット(^)の削除
- 必要に応じてpostcssバージョンの調整
これらの手順で、NativewindをReact Nativeプロジェクトで問題なく使用できるようになります。新しいバージョン対応については、Nativewindの公式リリースノートを定期的に確認しましょう。