Nuxt 3 触ってみる
公式サイトのQuick Startやっていき
npx nuxi init quick_start
で雛形作る
❯ npx nuxi init quick_start
Need to install the following packages:
nuxi
Ok to proceed? (y) y
Nuxt CLI v3.0.0-rc.2 17:30:19
ℹ cloned nuxt/starter#v3 to /Users/korosuke613/ghq/github.com/korosuke613/playground/javascript/nuxt3/quick_start
17:30:21
✨ Your wondrous Nuxt project is just created! Next steps:
📁 cd quick_start 17:30:21
💿 Install dependencies with npm install or yarn install or pnpm install --shamefully-hoist
🚀 Start development server with npm run dev or yarn dev or pnpm run dev 17:30:21
今回はnpxで作ったけどNuxt的にはどれがおすすめなんだろうか。
npm i
した後にサーバを立ち上げてみる。
❯ npm run dev
> dev
> nuxt dev
ちゃんとVite使われてる
Nuxt CLI v3.0.0-rc.2 17:36:05
17:36:05
> Local: http://localhost:3000/
> Network: http://xxx.xxx.xxx.xxx:3000/
ℹ Vite server warmed up in 93ms 17:36:07
ℹ Vite client warmed up in 492ms 17:36:07
✔ Vite server built in 396ms 17:36:08
✔ Nitro built in 206 ms nitro 17:36:08
localhost:3000を開いてみる。
Remove this welcome page by removing
<NuxtWekcome />
tag or creating anapp.vue
file.
とのこと。
app.vue
から<NuxtWekcome />
を消すとページが真っ白に。
ていうかビルドはえぇ。もちろん規模小さいから早くて当然なんだけど。
Next steps
Now that you've created your Nuxt 3 project, you are ready to start building your application.
- Learn about the framework concepts
- Learn more about the framework features
とのこと。Quick Start終わり!シンプルなQuick Startだった。
concepts見てみる
Nuxtを選ぶ理由
- JavaScript フレームワークはVue.jsだよ
- webpack 5とviteの両方をサポートしてるよ
- トランスパイラにはesbuildを採用してるよ
-
h3を使ってるよ
- h3って何?
-
Minimal h(ttp) framework built for high performance and portability ⚡️
- 軽量なhttpフレームワークらしい。Vueとの関係性はどういう感じなんだろうかわからん
-
- h3って何?
- ルーティングにはvue-routerを使ってるよ
どのように動作する?
- コアエンジン: nuxt
- バンドラー: @nuxt/vite-builder、@nuxt/webpack-builder
- CLI: nuxi
- サーバーエンジン: nitro
- nitroよく知らない
- development kit: @nuxt/kit
- プラグインなんかを作るときに使うのかな
- nuxt 2 bridge: @nuxt/bridge
- nuxt 2でnuxt 3の機能を使うためのモジュールらしい
次はこれ
vueの説明っぽい
Vue with Nuxt
- 単一ファイルコンポーネント
-
components/
ディレクトリにあるVueコンポーネントは利用するものだけ自動インポート -
pages/
ディレクトリと命名規則を使用してルーティングを自動で設定する
components/Welcome.vue
を作ってapp.vue
を以下のようにした。
<template>
<div>
<Welcome />
</div>
</template>
マジでインポートしなくても読み込んでくれた。
pages/index.vue
とpages/hoge.vue
を作った。app.vue
を以下のようにするとpages/index.vue
が表示された。
<template>
<div>
<NuxtPage />
</div>
</template>
また、pages/index.vue
をルートのドキュメントと解釈してくれるみたいでapp.vue
を消したらpages/index.vue
の内容が表示された。
http://localhost:3000/hoge
にアクセスするとちゃんとpages/hoge.vue
が表示された。
lintおよびformatの設定についてはドキュメントで見つけられず。
Nuxt 2と同じようにすればよいのだろうか。ググるか
このコメントみたいな方法が良さそう...?
ここらへんのベストプラクティスいまいちわからん問題ある。
この方の記事でいい感じにeslintとpretteir設定できた。
prettierの設定時は以下のように@vue/eslint-config-prettier
を.extends
に加えないといけなかった
extends: [
"plugin:vue/vue3-recommended",
"eslint:recommended",
"@vue/typescript/recommended",
"@vue/eslint-config-prettier",
],
eslintにpages/index.vue
がmulti-wordじゃないって怒られる件。
/Users/korosuke613/ghq/github.com/korosuke613/playground/javascript/nuxt3/quick_start/pages/index.vue
1:1 error Component name "index" should always be multi-word vue/multi-word-component-names
pageなんだし許してほしい。eslintの設定でpages以下でこのルールを無効化したら良さそう。
こんな風にしてpages以下のvueファイルだけmulti-wordのルールを無効化した。
...
rules: {},
overrides: [
{
files: ["pages/*.vue"],
rules: {
"vue/multi-word-component-names": "off",
},
},
],
...
横から失礼します!
この方法思いつかなかったので、助かりました!
ネストされた pages に適応するために、files
指定は以下のようにする必要がありました!
...
rules: {},
overrides: [
{
files: ["**/pages/**/*.vue"],
rules: {
"vue/multi-word-component-names": "off",
},
},
],
...
お〜それは良かったです!
ネスト対応版もお書きくださりありがとうございます😊
最終的な.eslintrc.js
module.exports = {
root: true,
env: {
browser: true,
es2021: true,
node: true,
},
extends: [
"plugin:vue/vue3-recommended",
"eslint:recommended",
"@vue/typescript/recommended",
"@vue/eslint-config-prettier",
],
parserOptions: {
ecmaVersion: 2021,
},
plugins: [],
rules: {},
overrides: [
{
files: ["pages/*.vue"],
rules: {
"vue/multi-word-component-names": "off",
},
},
],
};
最終的なdevDependencies
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^5.22.0",
"@typescript-eslint/parser": "^5.22.0",
"@vue/eslint-config-prettier": "^7.0.0",
"@vue/eslint-config-typescript": "^10.0.0",
"eslint": "^8.15.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-vue": "^8.7.1",
"nuxt": "3.0.0-rc.1",
"prettier": "^2.6.2"
}
stylelintも導入した。
module.exports = {
"extends": ["stylelint-config-recommended", "stylelint-config-standard", "stylelint-config-recommended-vue"]
}
devDepnedencies
に以下を追加
"stylelint": "^14.8.2",
"stylelint-config-recommended": "^7.0.0",
"stylelint-config-recommended-vue": "^1.4.0",
"stylelint-config-standard": "^25.0.0"
IntelliJで自動fixする設定も盛り込んだ
GitHub ActionsでCIも設定してみた
今日やったことはここにまとめてる
feat: try Nuxt 3 by korosuke613 · Pull Request #21 · korosuke613/playground
ちょっと早いけどホムペをNuxt 3に移行してもいいかもな