3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Nuxt.js (universal) で vuejs-datepicker を使う

Last updated at Posted at 2020-03-19
import DatePicker from 'vuejs-datepicker';

では mode: universal で動かないので、ひと手間加える

  • nuxt 2.11.0
  • vuejs-datepicker 1.6.2

そのままでは動かない理由

import すると vuejs-datepicker/dist/vuejs-datepicker.js を参照するが、
<head> に css を注入するコードがある

node_modules/vuejs-datepicker/dist/vuejs-datepicker.js
  var HEAD = document.head || document.getElementsByTagName('head')[0];

SSR 時に document は存在しないので、エラーになる

動くようにする

stylus インストール

vuejs-datepicker はスタイリングに stylus を使用しているので扱えるようにする
下記のコマンドだけで大丈夫だった

yarn add --dev stylus stylus-loader

import を変更

vuejs-datepicker/src 内の .vue を直接 import する

ExampleComponent.vue
<template>
  <date-picker />
</template>

<script>
import DatePicker from 'vuejs-datepicker/src/components/Datepicker.vue';

export default {
  components: {
    DatePicker,
  },
};
</script>

おまけ: locale も src から読み込む

ExampleComponent.vue
<template>
  <date-picker :language="ja" />
</template>

<script>
import DatePicker from 'vuejs-datepicker/src/components/Datepicker.vue';
import ja from 'vuejs-datepicker/src/locale/translations/ja';
// 下記は、ja以外の言語もすべてバンドルされてしまうので推奨されない
// import { ja } from 'vuejs-datepicker/src/locale';

export default {
  components: {
    DatePicker,
  },
  data() {
    return {
      ja,
    };
  },
};
</script>

おまけ: IE11 対応

基本的にライブラリ内のコンポーネントはコンパイルされず、IE11 に対応したコードが出力されない
nuxt.config.js の transpile に追加する

nuxt.config.js
export default {
  build: {
    transpile: ['vuejs-datepicker'],
  },
};
3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?