Nuxt は、モダンな web アプリケーションを作成する Vue.jsに基づいたプログレッシブフレームワークです。Vue.js
公式ライブラリ(vue
、vue-router
やvuex
)および強力な開発ツール(webpack、Babel や PostCSS
)に基づいています。Nuxt
の目標は、優れた開発者エクスペリエンスを念頭に置き、Web 開発を強力かつ高性能にすることです。
Nuxt
は、Vue
の公式ガイドラインに沿って強力なアーキテクチャを提供するように設計されたフレームワークです。一部分から徐々に採用することが可能で、静的なランディングページから複雑な企業向けweb アプリケーションまで、あらゆるものの作成に使用できます。
本質的に汎用性があり、さまざまなターゲット(サーバー、サーバーレス、または静的)をサポートし、サーバーサイドのレンダリングは切り替えることができます。
強力なモジュールエコシステムにより拡張可能で、REST や GraphQLエンドポイント、お気に入りの CMS や CSS フレームワークなどさまざまなものに簡単に接続できます。PWA および AMPのサポートは、Nuxt プロジェクトからは隔離されたモジュールにすぎません。
NuxtJS は Vue.js プロジェクトのバックボーンであり、柔軟でありながら自信を持ってプロジェクトを構築するための構造を提供します。
1
2
3
<html>
<a href="https://www.yahoo.com/">Yahoo Japan!へのリンク</a>
</html>
Vue ファイルで記述できること *.vue
コードを自動的に分割すること
サーバーサイドレンダリング
非同期データをハンドリングするパワフルなルーティング
静的ファイルの配信
ES2015+ のトランスパイレーション
JS と CSS のバンドル及びミニファイ化
<head>
要素(<title>
、<meta>
など)の管理
開発モードにおけるホットリローディング
プリプロセッサ: Sass, Less, Stylus など
HTTP/2 push headers ready
モジュール構造で拡張できること
Nuxt.js はリッチなウェブアプリケーションを構築するために下記のものを含んでいます :
Vue 2
Vue Router
Vuex(ストアオプションを利用している場合に限る)
Vue Server Renderer(mode: 'spa' を利用している場合を除く)
Vue Meta
すべて合わせてもわずか 57kB min+gzip です。(Vuex 利用時は 60kB)
バンドルやソースコードの分割やミニファイ化するために内部で webpack、vue-loader と babel-loader を使います。
下の図は、サーバーサイドで処理が実行されたときや、ユーザーが <nuxt-link>
を通して遷移したときに Nuxt.js によって何が呼び出されるかを表しています:
Nuxt.js をプロジェクトの UI レンダリング全体を担うフレームワークとして使うことができます。
nuxt コマンドを実行すると開発サーバーが起動します。このサーバーはホットリローディング及び Vue Server Renderer を備えており、アプリケーションが自動的にサーバーサイドレンダリングするよう設定されています。
もし何らかの理由でサーバーサイドレンダリングを使いたくない、あるいはアプリケーションを静的にホスティングする必要があるときは nuxt --spa を使って、シンプルに SPA モードを使うことができます。generate 機能と組み合わせて使うことで、Node.js ランタイムや特別なサーバー処理を利用する必要なしに、SPA のパワフルなデプロイを実現できます。
コマンドについてより深く理解するには コマンド を参照してください。
サーバーが既にある場合は、Nuxt.js をミドルウェアとして組み込むことができます。ユニバーサルなウェブアプリケーションの開発に Nuxt.js を利用する際、制限は何ひとつありません。 Nuxt.js をプログラム的に使う ガイドを参照してください。
1
2
3
$ curl https://api.stripe.com/v1/charges \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc :
# The colon prevents curl from asking for a password.
Nuxt.js への貢献はどんなものでも大歓迎です!
このプロジェクトに貢献する一番の方法は、問題に遭遇したときに詳細なレポートを送ることです。貢献者とメンテナーが問題を把握しやすくするために、私たちは CMTY を使用しています。 問題を再現できるリポジトリか CodeSandBox を報告に含めてください。そうすれば、多大な努力なしにバグを再現できます。バグが再現できれば修正を早く進めることができます!
1
2
3
4
$ curl https://api.stripe.com/v1/charges/ch_3KdWs62eZvKYlo2C0X2XQMJf \
-u sk_test_4eC39HqLyjWDarjtT1zdp7dc :
-H "Stripe-Account: acct_1032D82eZvKYlo2C" :
-G
Nuxt.js はとても簡単に始められます。シンプルなプロジェクトでは必要な依存パッケージは nuxt だけです。
ビデオで Nuxt.js をすぐに使い始める方法を学ぶ。
Nuxt.js の開発をサポートするために、VueSchool がビデオコースを作りました。
create-nuxt-app
を使用する素早くスタートできるようにするため、Nuxt.js チームは足場ツール create-nuxt-app を作成しました。
npx がインストールされていることを確認してください。(npx
は NPM 5.2.0
からデフォルトでバンドルされています)
$ npx create-nuxt-app <project-name>
もしくは yarn を使ってください:
$ yarn create nuxt-app <project-name>
1. サーバーサイドのフレームワークを選択します:
2. 好きな UI フレームワークを選択します:
3. 好きなテスティングフレームワークを選択します:
4. Nuxt のモードを選択します。(Universal
または SPA
)
5. HTTP リクエストを簡単に行うために axios module を追加します。
6. 保存時にコードをチェックするために EsLint を追加します。
7. 保存時にコードを整形するために Prettier を追加します。
8. 回答が終わり次第、全ての依存関係がインストールされ、プロジェクトを開始する次のステップへ進めます:
$ npm run dev
するとアプリケーションは http://localhost:3000 で動いています。
Nuxt.js は pages
ディレクトリ内のファイルの更新を監視します。そのため、新しいページを追加したときにアプリケーションを再起動する必要はありません。
プロジェクトのディレクトリ構造についてより深く理解するには ディレクトリ構造のドキュメント を参照してください。
Nuxt.js プロジェクトをスクラッチから作ることも簡単で、必要なのは 1 つのファイルと 1 つのディレクトリ だけです。まずは空のディレクトリを作りましょう:
1
2
$ mkdir <project-name>
$ cd <project-name>
情報: <project-name>
の箇所はプロジェクト名に置き換えてください。
それぞれのプロジェクトには、 nuxt
を起動するために package.json
ファイルが必要です。下記の json を package.json
にコピーをして、 npm install
を実行する前に保存してください:
上のように書いておけば npm run dev
で Nuxt.js を起動できます。
nuxt
のインストールpackage.json
を作成したら nuxt
を npm
でプロジェクトに追加しましょう:
1
$ npm install --save nuxt
pages
ディレクトリNuxt.js は pages
ディレクトリ内の *.vue
ファイルについて、各ファイルがアプリケーションのひとつのルートに対応するものとして変換します。
pages
ディレクトリを作ります:
1
$ mkdir pages
それから最初のページを pages/index.vue
に作ります:
1
2
3
<template>
<h1>Hello world!</h1>
</template>
そして、プロジェクトを起動します:
1
$ npm run dev
すると、アプリケーションは http://localhost:3000 で動いています。
Nuxt.js は pages
ディレクトリ内のファイルの更新を監視します。そのため新しいページを追加した場合にアプリケーションを再起動する必要はありません。
プロジェクトのディレクトリ構造についてより深く理解するには ディレクトリ構造のドキュメント を参照してください。
1
2
3
4
5
6
{
"name": "my-app",
"scripts": {
"dev": "nuxt"
}
}
Nuxt.js は pages
ディレクトリ内の Vue ファイルの木構造に沿って、自動的に vue-router の設定を生成します。
ページ間を遷移するためには <nuxt-link>
コンポーネントの使用を推奨します。
1
2
3
<template>
<nuxt-link to="/">Home page</nuxt-link>
</template>
下記のようなファイルの木構造のとき:
pages/
--| user/
-----| index.vue
-----| one.vue
--| index.vue
自動的に以下が生成されます:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
router: {
routes: [
{
name: 'index',
path: '/',
component: 'pages/index.vue'
},
{
name: 'user',
path: '/user',
component: 'pages/user/index.vue'
},
{
name: 'user-one',
path: '/user/one',
component: 'pages/user/one.vue'
}
]
}
Nuxt.js では、動的なルーティングをするコンポーネント内に、パラメータをバリデーションするメソッドを定義することができます。
例えば pages/users/_id.vue
内にこのように書きます:
1
2
3
4
5
6
export default {
validate({ params }) {
// 数値でなければならない
return /^\d+$/.test(params.id)
}
}
1
2
3
4
5
6
export default {
validate({ params }) {
// 数値でなければならない
return /^\d+$/.test(params.id)
}
}
Views セクションでは、Nuxt.js
アプリケーション(アプリテンプレート、レイアウト、ページ、および HTML ヘッド)内の特定のルートのデータとビューを設定するために必要なことを全て説明しています。
1
2
3
4
5
6
<template>
<div>
<div>ブログのナビゲーションバーをここに設置します</div>
<nuxt />
</div>
</template>
nuxt-views-schema
スクリプトまたは条件付きの CSS クラスを含めるために Nuxt.js で使われる HTML アプリテンプレートをカスタマイズできます。
テンプレートを変更するために、プロジェクトのソースフォルダ(デフォルトはプロジェクトのルートディレクトリ)に app.html
ファイルを作成します。
サイドバーを含めたり、モバイルとデスクトップに異なるレイアウトを使用したりするなど Nuxt.js アプリの外観を変更したい場合にレイアウトは非常に役立ちます。
layouts/default.vue
ファイルを追加することでメインレイアウトを拡張できます。メインレイアウトは、レイアウト指定がされていないすべてのページに使用されます。
情報: 実際にページコンポーネントが含まれるようにレイアウトを作成するときは、必ず <nuxt/> コンポーネントを入れておくことを覚えておいてください。
次にあるデフォルトのレイアウトはたった 3 行で、単純にページコンポーネントをレンダリングします:
layouts
ディレクトリのすべてのファイル(第一階層)は、ページコンポーネントの layout
プロパティでアクセス可能なカスタムレイアウトを作成します。
ブログのレイアウトを作成して、それを layouts/blog.vue
に書くときの例:
<template>
<div>
<div>ブログのナビゲーションバーをここに設置します</div>
<nuxt />
</div>
</template>
それからページ (例えば pages/posts.vue
) で、カスタムレイアウトを使うことを伝えます:
<template>
<!-- テンプレート -->
</template>
<script>
export default {
layout: 'blog'
// ページコンポーネントの定義
}
</script>
layout
プロパティについての詳細: layout
プロパティ
デモ動画で、カスタムレイアウトの動作する様子を確認して見てください。
1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html {{ HTML_ATTRS }}>
<head {{ HEAD_ATTRS }}>
{{ HEAD }}
</head>
<body {{ BODY_ATTRS }}>
{{ APP }}
</body>
</html>
1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<!--[if IE 9]><html lang="en-US" class="lt-ie9 ie9" {{ HTML_ATTRS }}><![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--><html {{ HTML_ATTRS }}><!--<![endif]-->
<head {{ HEAD_ATTRS }}>
{{ HEAD }}
</head>
<body {{ BODY_ATTRS }}>
{{ APP }}
</body>
</html>
サーバーサイドでデータを取得し、それをレンダリングしたいことがあるでしょう。 Nuxt.js はコンポーネントを初期化する前に非同期の処理を行えるようにするために asyncData
メソッドを追加しています。
asyncData
メソッド場合によっては、ストアを使用せずにデータをフェッチし、サーバー上でプレレンダリングしたい場合があります。 asyncData
は ページ コンポーネントがローディングされる前に常に呼び出されます。サーバーサイドでは 1 回だけ(Nuxt アプリへの最初のリクエスト)呼び出され、クライアントサイドではページ遷移をするたびに呼び出されます。このメソッドは、第一引数としてコンテキストを受け取ります。これを使用してデータを取得し、 Nuxt.js はコンポーネントデータとマージすることができます。
Nuxt.js は返されたオブジェクトとコンポーネントデータを自動的にマージします。
asyncData
メソッド内の this
を通してコンポーネントのインスタンスにアクセスすることは できません。それはコンポーネントが インスタンス化される前に このメソッドが呼び出されるからです。
Nuxt.js では asyncData
メソッドを使うために、いくつかの異なるやり方があるので、お好きなものを選んでください:
Promise
を返す。 Nuxt.js はコンポーネントがレンダリングされる前に Promise
が解決されるまで待ちます
async/await を使う
私たちは isomorphic な HTTP リクエストを作るために axios を使っています。私たちはあなたの Nuxt プロジェクトに、私たちの axios module を使うことを強くオススメします。
node_modules
内の axios
を直接使用しており、axios.interceptors
を使用してデータを処理する場合、interceptors を追加する前にインスタンスを作成してください。そうしなければ、サーバレンダリングされたページをリフレッシュする際に、interceptor が複数追加され、データエラーが発生します。
export default {
asyncData({ params }) {
return axios.get(`https://my-api/posts/${params.id}`).then(res => {
return { title: res.data.title }
})
}
}
export default {
async asyncData({ params }) {
const { data } = await axios.get(`https://my-api/posts/${params.id}`)
return { title: data.title }
}
}
asyncData
の結果はコンポーネントのデータと マージされ ます。下記のように template
の内側でデータを表示することができます:
<template>
<h1>{{ title }}</h1>
</template>
context
内で利用できるキーの一覧を確認するには API 基本 Context
を参照してください。
req
/res
オブジェクトの利用サーバーサイドで asyncData
が呼ばれた場合、ユーザーリクエストの req
と res
オブジェクトにアクセスできます。
export default {
async asyncData({ req, res }) {
// req と res を使う前にサーバーサイドか
// どうかチェックしてください
if (process.server) {
return { host: req.headers.host }
}
return {}
}
}
context
パラメータを利用して動的ルートデータにアクセスすることもできます。たとえば、動的ルートパラメータには、それを設定したファイルまたはフォルダの名前を使用してアクセスできます。 pages
フォルダに _slug.vue
という名前のファイルを定義した場合、 context.params.slug
を介して値にアクセスできます。
export default {
async asyncData({ params }) {
const slug = params.slug // /abc というパスを呼び出した時、 slug は "abc" になる
return { slug }
}
}
デフォルトでは、クエリストリングの変化で asyncData
メソッドは呼ばれません。ページネーションコンポーネントのビルド時などにこの振る舞いを変更したい場合は、ページコンポーネントの watchQuery
プロパティを見るパラメータを設定することができます。より詳しい情報は API watchQuery
プロパティ を参照してください。
Nuxt.js は、 context
に error(params)
メソッドを追加し、エラーページを表示するためにそれを呼び出すことができます。 params.statusCode
は、サーバーサイドから適切なステータスコードを表示するためにも使用されます。
エラーページをカスタマイズするには ビューのレイアウトセクション を参照してください。
1
2
3
4
5
6
7
8
9
10
11
12
import axios from 'axios'
const myaxios = axios.create({
// ...
})
myaxios.interceptors.response.use(
function (response) {
return response.data
},
function (error) {
// ...
}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
export default {
asyncData({ params, error }) {
return axios
.get(`https://my-api/posts/${params.id}`)
.then(res => {
return { title: res.data.title }
})
.catch(e => {
error({ statusCode: 404, message: 'ページが見つかりません' })
})
}
}
デフォルトでは、Nuxt は vue-loader
、file-loader
、url-loader webpack
ローダーを使用して、強力なアセットを提供します。 静的アセットには static
ディレクトリを使用することもできます。
image.png
package.json
nuxt.js
vue-loader は css-loader
と vue-template-compiler
を用いて、スタイルやテンプレートファイルを自動的に処理します。このコンパイル処理の中で、 や background: url(...)
や CSS @import
などのすべてのアセット URL はモジュールの依存関係として解決されます。
例えば、次のようなファイル構成があるとします:
-| assets/
----| image.png
-| pages/
----| index.vue
CSS で url('~assets/image.png')
と書いた場合、それは require('~/assets/image.png')
に変換されます。
createElement('img', { attrs: { src: require('~/assets/image.png') } }).png
は JavaScript ファイルではないため、Nuxt.js は file-loader と url-loader を使ってそれらを処理できるよう webpack を設定します。
file-loader
は、アセットファイルをコピー・配置する場所と、キャッシュ改善のためにバージョンハッシュを用いてファイル名を指定することができます。本番環境では、デフォルトで長期キャッシングの恩恵を受けるでしょう。
url-loader
は、指定した閾値よりも小さい場合に、Base64 データ URL として条件付きでファイルに埋め込むことができます。これにより、小さなファイル取得のための HTTP リクエスト数を減らすことができます。もし閾値よりも大きい場合は、file-loader に自動的にフォールバックします。
つまり、1 KB 未満のすべてのファイルは Base64 データ URL としてインライン化されます。それ以外の場合、画像/フォントは、対応するフォルダ(.nuxt
ディレクトリの下)にコピーされ、より良いキャッシュのためにバージョンハッシュを含む名前が付けられます。
アプリケーションを nuxt
コマンドで起動するとき、pages/index.vue
内のテンプレートは下記のようになっておりそこから次のように生成されます
assets
ディレクトリで webpack したくないアセットがある場合は、プロジェクトのルートディレクトリに static
ディレクトリ(プロジェクトのルートフォルダに)を作成して利用することができます。
これらのファイルは Nuxt によって自動的に提供され、プロジェクトのルート URL からアクセスできます。(static/favicon.ico
は localhost:3000/favicon.ico
で利用することができます)
このオプションは robots.txt
や sitemap.xml
、CNAME
(GitHub Pages などで使う)などのファイルの扱いに役立ちます。
あなたのコードでは、それらのファイルを /
を基準に参照することができます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// https://github.com/nuxt/nuxt.js/blob/dev/packages/webpack/src/config/base.js#L297-L316
;[
{
test: /.(png|jpe?g|gif|svg|webp)$/,
loader: 'url-loader',
query: {
limit: 1000, // 1kB
name: 'img/[name].[hash:7].[ext]'
}
},
{
test: /.(woff2?|eot|ttf|otf)(?.*)?$/,
loader: 'url-loader',
query: {
limit: 1000, // 1kB
name: 'fonts/[name].[hash:7].[ext]'
}
}
]
Nuxt.js では JavaScript プラグインを定義することができ、それはルートの Vue.js アプリケーションがインスタンス化される前に実行されます。この機能は、自前のライブラリや外部のモジュールを使用する際にとりわけ有用です。
Vue インスタンスの ライフサイクル において、beforeCreate
と created
フックのみが クライアントサイドとサーバーサイドの両方で呼び出されることに注意してください。それ以外のすべてのフックはクライアントサイドでのみ呼び出されます。
アプリケーションにおいて、サーバーとクライアントの双方で HTTP リクエストを送るために、外部パッケージ/モジュールを使いたいときがあるでしょう(axios が素晴らしい例です)。 まず最初に、npm でパッケージをインストールします:
npm install --save axios
そうすると次のようにページコンポーネント内で直接それを使うことができます:
アプリケーション内で通知を表示する vue-notifications のような Vue プラグインを使用したい場合には、アプリケーションを起動する前にプラグインをセットアップする必要があります。 plugins/vue-notifications.js ファイルを作成します:
それから nuxt.config.js の plugins キー内にファイルパスを追加します:
plugins
設定キーについてより深く理解するには plugins api を参照してください。
プラグインが node_modules
にあり、ES6 モジュールをエクスポートしている場合、それを transpile
ビルドオプションに追加する必要があるかもしれません:
その他のビルドオプションについては configuration build のドキュメントを参照することができます。
関数や値をアプリケーション全体で利用できるようにしたい場合もあるでしょう。そのような変数を Vue インスタンス(クライアントサイド)やコンテキスト(サーバーサイド)、さらに Vuex ストアへ注入することが可能です。それらの関数の前には $
を付けるのが一般的です。
Vue インスタンスへのコンテキストの注入は、通常の Vue アプリケーションと同様に動作します。
1
2
3
import Vue from 'vue'
Vue.prototype.$myInjectedFunction = string =>
console.log('This is an example', string)
1
2
3
export default {
plugins: ['~/plugins/vue-inject.js']
}
これで全ての Vue コンポーネントで関数を使用することができます。
example-component.vue:
export default {
mounted() {
this.$myInjectedFunction('test')
}
}
Vue インスタンスへのコンテキストの注入は、通常の Vue アプリケーションと同様に動作します。
いくつかのプラグインは、SSR をサポートしていないためにブラウザでのみ動作するかもしれません。そのような場合は、クライアントサイドのみでプラグインを使用するために、plugins
内の mode
: client
オプションを使用することができます。
サーバーサイドでのみライブラリを読み込む必要がある場合は、process.server
変数に true
がセットされているかでチェックできます。
また、もしあなたが生成されたアプリケーション(nuxt generate
コマンドによって)の中にいるかどうか知る必要がある場合は、process.static
変数に true
がセットされているかでチェックできます。これは、アプリケーションの生成中および生成後の場合のみです。
保存前に nuxt generate
コマンドによって、ページがサーバレンダリングされている時の状態を知るには、2 つのオプションを組み合わせて使うことができます (process.static && process.server
) 。
プラグインがクライアント側またはサーバー側でのみ実行されると想定される場合、 .client.js
または .server.js
をプラグインファイルの拡張として適用することができ、ファイルは自動的に対応する側に含まれます。
1
2
3
4
5
import Vue from 'vue'
import VueNotifications from 'vue-notifications'
Vue.use(VueNotifications)
1
2
3
export default {
plugins: ['~/plugins/vue-notifications']
}
1
2
3
4
5
module.exports = {
build: {
transpile: ['vue-notifications']
}
}
1
2
3
export default {
plugins: [{ src: '~/plugins/vue-notifications', mode: 'client' }]
}
1
2
3
4
import Vue from 'vue'
import VueNotifications from 'vue-notifications'
Vue.use(VueNotifications)
モジュールは、Nuxt.js のコア機能を拡張し、無限のインテグレーションを加える Nuxt.js の拡張機能です。
Nuxt を使ってプロダクションレベルのアプリケーションを開発していると、Nuxt のコア機能が十分ではないことにすぐに気が付くでしょう。Nuxt はオプション設定やプラグインにより拡張できますが、複数のプロジェクトにわたってそれらのカスタマイズをメンテナンスしていくことは、退屈で、繰り返される、時間を浪費する作業です。しかし一方であらゆるプロジェクトのニーズを盛り込んでしまうと、Nuxt がとても複雑になり使いづらいものになってしまうでしょう。
これが Nuxt が、コア機能を簡単に拡張できるようにするために、より高度なモジュールシステムを導入する理由のひとつです。モジュールは、Nuxt 起動時に順番に呼び出される、シンプルな関数です。フレームワークは Nuxt が処理を続けるよりも前に、各モジュールが処理を完了するまで待機します。このようにして、モジュールは Nuxt のほとんどすべての項目をカスタマイズできます。Webpack の Tapable に基づいた Nuxt のモジュール設計のおかげで、モジュールは例えばビルドの初期化のような特定のエントリーポイントに、フックを簡単に登録できるのです。また、モジュールはテンプレートの上書き、webpack のローダーの設定、CSS ライブラリの追加、その他多くの便利なタスクを実行することができます。
素晴らしいことに Nuxt モジュールは npm パッケージと統合できます。したがって複数のプロジェクト間で再利用したり、Nuxt コミュニティでシェアすることが容易にできます。そして高品質の Nuxt アドオンのエコシステムをつくっていくことに繋がるでしょう。
もしあなたが下記に該当するならば、モジュールはきっと役に立ってくれるでしょう:
新しいプロジェクトを素早く立ち上げる必要があるアジャイル・チームのメンバーである。
Google Analytics を統合するようなお決まりのタスクのための車輪の再発明にうんざりしている。
愛すべきオープンソース熱狂者であり、あなたの成果をコミュニティと簡単にシェアしたいと思っている。
品質と再利用性が重視されるエンタープライズ企業に所属している。
いつもタイトな締切に追われており、いろいろな新しいライブラリや統合の詳細を深く調べる時間がない。
低レベルのインターフェースの破壊的な変更への対応にうんざりしていて、とにかく動くものを必要としている。
Nuxt.js チームが提供している 公式 モジュール:
@nuxt/http: ky-universal をベースにしており、軽量でユニバーサルな HTTP リクエストを送ります
@nuxt/content: content ディレクトリへの書き込みや、MongoDB のような API を通した Markdown や JSON、YAML、CSV ファイルの取得をします
@nuxtjs/axios: セキュアかつ簡単に Axios と Nuxt.js とを統合し、HTTP リクエストを送ります
@nuxtjs/pwa: 十分にテストされアップデートされた安定した PWA ソリューションを Nuxt に提供します
@nuxtjs/auth: Nuxt.js のための認証モジュールです。さまざまなスキームやストラテジーを提供します
コミュニティによって作成されたモジュール一覧は https://awesomejs.dev/for/nuxt/ と https://github.com/topics/nuxt-module で確認できます。
既に言及されているように、モジュールはただの関数です。npm モジュールとしてパッケージングしたり、あるいはプロジェクトのソースコードに直接インクルードすることができます。
moduleOptions
これは modules の配列を利用するために、モジュールの利用者から渡されるオブジェクトです。これを使うことで modules のふるまいをカスタマイズすることができます。
this.options
この参照を利用して Nuxt options へ直接アクセスすることができます。これはすべてのデフォルトのオプションがアサインされた、ユーザーの nuxt.config.js の内容です。モジュール間で共有されるオプションとして利用できます。
this.nuxt
現在の Nuxt インスタンスへの参照です。利用可能なメソッドは Nuxt クラスのドキュメント を参照してください。
this
モジュールのコンテキストです。利用可能なメソッドは モジュールコンテナ クラスのドキュメントを参照してください。
module.exports.meta
この行は npm
パッケージとして公開するときは必須です。Nuxt はあなたのパッケージをより良く機能させるために、内部でメタ情報を利用します。
それから Nuxt にプロジェクトでいくつかの特定のモジュールをロードするよう伝えます。その際に任意のパラメーターを options として渡すようにします。詳しくは モジュール設定 を参照してください。
すべてのモジュールが同期的に処理を行うわけではありません。例えばどこかの API からフェッチしたり IO を非同期的に扱うモジュールを開発したい場合もあるでしょう。このような場合のために Nuxt は Promise を返したりコールバックを呼び出す非同期モジュールをサポートしています。
通常、モジュールは開発時とビルド時のみ必要です。buildModules を使用すると、本番環境の起動を高速化し、本番環境のデプロイで node_modules
のサイズを大幅に削減することができます。あなたがモジュールの作成者である場合、あなたのパッケージを devDependency
としてインストールし、nuxt.config.js
の modules
ではなく buildModules
を使用するよう、ユーザーに提案することをお勧めします。
次の場合を除き、モジュールは buildModule です:
serverMiddleware
を提供している
Node.js
ランタイムフックを登録する必要がある(sentry のように)
vue-renderer
の動作に影響を与えているか、server:
または vue-renderer:
ネームスペースのフックを使用している
webpack
スコープ外にあるその他のもの(ヒント:プラグインとテンプレートはコンパイルされ、webpack
スコープ内にあります)
async/await
を利用するimport fse from 'fs-extra'
export default async function asyncModule() {
// async/await を使って非同期処理ができる
const pages = await fse.readJson('./pages.json')
import axios from 'axios'
export default function asyncModule() {
return axios
.get('https://jsonplaceholder.typicode.com/users')
.then(res => res.data.map(user => '/users/' + user.username))
.then(routes => {
// Nuxt のルートを拡張して何かの処理を行う
})
}
1
2
3
4
5
6
export default function SimpleModule(moduleOptions) {
// ここにあなたのコードを書く
}
// モジュールを npm パッケージとして公開するのであれば必須
// module.exports.meta = require('./package.json')
1
2
3
4
5
6
7
8
9
export default {
modules: [
// シンプルな使い方
'\~/modules/simple'[
// 直接オプションを渡す
('\~/modules/simple', { token: '123' })
]
]
}
Nuxt.js は便利コマンドのセットを備えています。開発時に役立つものも、プロダクション用途のものもあります。
各コマンドに対して --help
を使うと詳細な使用方法を入手できます。共通の引数は下記の通りです:
ここでは、AWS IoTのコネクションを作成する方法を説明します。
コネクションを作成するためには、以下の設定情報が必要です。
IAM Role ARN
AWS Access Key ID
AWS Secret Access Key
AWS IoT Endpoint
これらを準備する手順を説明します。
はじめに、IAM Role ARNを作成します。
AWSマネジメントコンソールにサインインし、画面上部の「サービス」-「IAM」-「ロール」-「ロールの作成」の順にクリックします。
「このロールを使用するサービスを選択」で「IoT」を選択し、「ユースケースの選択」で「IoT」を選択して、「次のステップ:アクセス権限」ボタンをクリックします。
アクセス権限ポリシーは変更せずに、「次のステップ:タグ」ボタンをクリックします。
タグの追加変更せずに、「次のステップ:確認」ボタンをクリックします。
「ロール名」に、任意のロール名を入力します「ロールの説明」は必要に応じて入力してください。 ロール名の一覧から、作成したロール名をクリックし、以下のポリシーがアタッチされていることを確認します。
AWSIoTThingsRegistration
AWSIoTLogging
AWSIoTRuleActions
ポリシーの右側にある「×」ボタンをクリックし、すべてのポリシーをデタッチします。 8.
「ポリシーをアタッチします」ボタンをクリックし、「AmazonSNSFullAccess」ポリシーと「AWSIoTDataAccess」ポリシーをアタッチします。 IAM Roleが作成されます。
表示される画面で、「ロールARN」をコピーします。 この「ロールARN」をコネクションの作成に使用します(コネクション情報01)。後で参照できるよう、メモなどに記録してください。
次に、AWSのユーザーを作成し、AWS Access Key IDとAWS Secret Access Keyを取得します。
ここで作成するAWSのユーザーに付与する権限は、agentのインストールに必要な権限とは異なりますので注意してください。
PassRole ポリシーを作成する ユーザーを作成する前に、PassRoleポリシーを作成します。 PassRoleポリシーは、AWSユーザーに設定するポリシーです。ここでは、以下の目的のために作成します。
IAM Role ARNに、必要なポリシーが登録されていることを確認するため
AWS IoTのサービスに、IAM Role ARNで指定したRoleを渡すため
AWSマネジメントコンソールにサインインし、画面上部の「サービス」-「IAM」-「ポリシー」-「ポリシーの作成」の順にクリックします。
「サービスの選択」をクリックし、「IAM」と入力して、表示される候補から「IAM」をクリックします。
「アクション」をクリックし、フィルタアクションの入力欄に「PassRole」と入力して、表示される候補にチェックを付けます。
同様にして、「GetRole」と入力し、表示される候補にチェックを付けます。
同様にして、「ListAttachedRolePolicies」と入力し、表示される候補にチェックを付けます。
「ARNの追加」をクリックします。
表示される画面に、以下を入力します。bv
「追加」ボタンをクリックします。
「ポリシーの確認」\\\\\\\\\\*\\\\\\\\\\*ボタンをクリックします。\\\\\\\\\\*\\\\\\\\\\*
「名前」に、任意のポリシー名を入力します。ここでは、「PassRole」と入力します。 「説明」は必要に応じて入力してください。
「ポリシーの作成」ボタンをクリックします。 PassRoleポリシーが作成されます。
PassRoleポリシーの作成後に、ユーザーを作成します。
AWSマネジメントコンソールにサインインし、画面上部の「サービス」-「IAM」-「ユーザー」-「ユーザーを追加」の順にクリックします。
「ユーザー名」に、任意のユーザー名を入力します。ここでは、「-conn-user」と入力します。