0202
ログ
riotjs, vite, typescript, tailwindcss でチャットアプリをデモ的に
- 以下,作業ログ
> mkdir my-chat-app > cd my-chat-app > npm create vite@latest . -- --template vanilla-ts # 俺は pnpm を使う > pnpm install riot > pnpm install -D tailwindcss@latest postcss@latest autoprefixer@latest > npx tailwindcss init -p # このタイミングで入れるのはアホだが # リモートリポジトリはとりあえず後で > git init # 続いて typescript の設定 > pnpm install @riotjs/compiler @types/riot
- 現時点の
package.json
に書かれている各モジュールのバージョン
"devDependencies": { "@rollup/plugin-typescript": "^11.1.6", "autoprefixer": "^10.4.17", "postcss": "^8.4.33", "tailwindcss": "^3.4.1", "typescript": "^5.2.2", "vite": "^5.0.8" }, "dependencies": { "@riotjs/compiler": "^9.0.7", "@types/riot": "^4.1.0", "riot": "^9.1.2" }
- 続いて
vite.config.ts
を作成後,以下を追記
import { defineConfig } from "vite"; import riot from "@riotjs/compiler"; import typescript from "@rollup/plugin-typescript"; // Riot.js 用のカスタムプラグイン const riotPlugin = () => { return { name: "riot", transform(code, id) { if (id.endsWith(".riot")) { const { code: compiledCode } = riot.compile(code, { file: id }); return { code: compiledCode, map: null, // ソースマップはこの例では省略 }; } }, }; }; export default defineConfig({ plugins: [riotPlugin(), typescript()], });
- 実行 → エラー
Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@rollup/plugin-typescript'
- そうやろな
> pnpm install @rollup/plugin-typescript
- 再実行,よし
そしたら,riot のコンポーネントを作ってみる
src/app.riot
<app> <p>{ props.message }</p> </app>
src/main.ts
import './style.css' - import typescriptLogo from './typescript.svg' - import viteLogo from '/vite.svg' - import { setupCounter } from './counter.ts' + import * as riot from 'riot' - document.querySelector<HTMLDivElement>('#app')!.innerHTML = ` - <div> - <a href="https://vitejs.dev" target="_blank"> - <img src="${viteLogo}" class="logo" alt="Vite logo" /> - </a> - <a href="https://www.typescriptlang.org/" target="_blank"> - <img src="${typescriptLogo}" class="logo vanilla" alt="TypeScript logo" /> - </a> - <h1>Vite + TypeScript</h1> - <div class="card"> - <button id="counter" type="button"></button> - </div> - <p class="read-the-docs"> - Click on the Vite and TypeScript logos to learn more - </p> - </div> - ` + import App from './app.riot' - setupCounter(document.querySelector<HTMLButtonElement>('#counter')!) + const mountApp = riot.component(App) + const app = mountApp( + document.getElementById('root'), + { message: 'Hello World', items: [] } + )
- 再実行,よし
Hello World
出た
続いて
global.d.ts
を作成(ドキュメントルート)し以下を追記
declare module "*.riot" {
import { RiotComponentWrapper } from "riot";
const component: RiotComponentWrapper;
export default component;
}
tsconfig.json
を変更
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["src/*"]
+ },
/* Bundler mode */
"moduleResolution": "bundler",
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
- "include": ["src"]
+ "include": ["src/**/*", "global.d.ts"]
}
- 今日はここで時間切れ