Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

It's not work in Nuxt production mode #38

Open
Bombay opened this issue Jul 6, 2018 · 18 comments
Open

It's not work in Nuxt production mode #38

Bombay opened this issue Jul 6, 2018 · 18 comments

Comments

@Bombay
Copy link

Bombay commented Jul 6, 2018

I'm using nuxt.

It's working in dev mode but not working in production mode.
(flickity option is ssr false)

  • in dev mode
    image

  • in proudction mode
    image

@MartinMuzatko
Copy link
Contributor

Can't even get it to run in dev mode :/ @Bombay how do you set ssr false for flickity?

@yaki4
Copy link

yaki4 commented Aug 20, 2018

You need to create a plugin and import it in nuxt.config.js with ssr set to false.
Here is the code for the plugin :
import Vue from 'vue'
import Flickity from 'vue-flickity'

Vue.component('flickity', Flickity)

@Bombay
Copy link
Author

Bombay commented Aug 21, 2018

I already set flickity with ssr false.
It's working on dev mode but not on production mode.

@Bombay
Copy link
Author

Bombay commented Aug 21, 2018

@MartinMuzatko

  1. I make flickity.js in plugins folder.
import Vue from 'vue'
import Flickity from 'vue-flickity'

Vue.component('flickity', Flickity)
  1. in nuxt.config.js
module.exports = {
  plugins: [
    {src: '~/plugins/flickity', ssr: false},
  ]
}

@toleberdyyeva
Copy link

toleberdyyeva commented Sep 3, 2018

Hi there , is this issue has been solved ? Cause I'm using flickity on nuxt project. @Bombay how is goin ?

@mcrider
Copy link

mcrider commented Sep 6, 2018

In my case, It wasn't working in chrome but was working in other browsers. I'm not sure why this component isn't converting the flickity dom element to a div (as it does in dev mode), but I was able to get around the issue by adding flickity { display: block; } to the CSS of my module.

@Bombay
Copy link
Author

Bombay commented Nov 19, 2018

@toleberdyyeva Sorry for the delay. now I'm using flickity directly in mounted() and watch section.

if (this.flky) this.flky.destroy()
this.flky = null

const carousel = document.querySelector('.score-card-carousel')
const Flickity = require('flickity')
this.flky = new Flickity(carousel, this.flickityOptions)

@michaelpumo
Copy link

I'm also getting this issue using Nuxt 2.6.2.

@michaelpumo
Copy link

Can't even get it to run in dev mode :/ @Bombay how do you set ssr false for flickity?

Me neither. Is it possible? I'm setting Vue Flickity as a plugin for Nuxt with mode set to client and still not joy!

@yaki4
Copy link

yaki4 commented Apr 18, 2019

@michaelpumo Have you put the no-ssr tag before your div who use vue-flickity ?
If yes, you can try to use flickity instead.
Here how you can use it in a component

<script>
let Flickity = {}
if (process.browser) {
  Flickity = require("flickity")
}
export default{
created () {
    // here i create my options variable
    this.flickityOptionsPromos = {
      resize: true,
      contain: false,
      wrapAround: true,
      setGallerySize: false,
      autoPlay: 4000
    }
  },
  mounted() {
    const carousel = this.$refs.flickycarous
    if (carousel) {
      this.flick = new Flickity(carousel, this.flickityOptionsPromos)
    }
  }
}
</script>
<template lang="pug">
.carousel
    div.flickity-carousel-promo(ref="flickycarous")
      .carousel-cell_serv.promo__card(v-for="(produit, index) in produits", :key="index")
        .promo__wrapper
          img.fallback-image(:src="produit.image")
</template>

@michaelpumo
Copy link

@michaelpumo Have you put the no-ssr tag before your div who use vue-flickity ?
If yes, you can try to use flickity instead.
Here how you can use it in a component

<script>
let Flickity = {}
if (process.browser) {
  Flickity = require("flickity")
}
export default{
created () {
    // here i create my options variable
    this.flickityOptionsPromos = {
      resize: true,
      contain: false,
      wrapAround: true,
      setGallerySize: false,
      autoPlay: 4000
    }
  },
  mounted() {
    const carousel = this.$refs.flickycarous
    if (carousel) {
      this.flick = new Flickity(carousel, this.flickityOptionsPromos)
    }
  }
}
</script>
<template lang="pug">
.carousel
    div.flickity-carousel-promo(ref="flickycarous")
      .carousel-cell_serv.promo__card(v-for="(produit, index) in produits", :key="index")
        .promo__wrapper
          img.fallback-image(:src="produit.image")
</template>

Thanks but I have textual content in my slider that I certainly need for SSR purposes.

@yaki4
Copy link

yaki4 commented Apr 18, 2019

@michaelpumo you'll have all the content in ssr with this solution.
Flickity will only execute on client side and put custom style to your div.
If you don't create a style for the server side it'll be ugly but it'll be there.

@special-offer
Copy link

I'm also having troubles with vue-flickity in a nuxt app. I find that it's working when I deploy the app to a heroku container, but when I deploy to a netlify container the carousel arrows/dots are not styled and the slides don't transition (even though the active dot does). i'm running npm run generate on netlify.

@Tuginho
Copy link

Tuginho commented Nov 26, 2019

I'm also having troubles with vue-flickity in a nuxt app. I find that it's working when I deploy the app to a heroku container, but when I deploy to a netlify container the carousel arrows/dots are not styled and the slides don't transition (even though the active dot does). i'm running npm run generate on netlify.

Same for me.

@ArashKenji73
Copy link

ArashKenji73 commented Dec 10, 2020

I'm using nuxt.

It's working in dev mode but not working in production mode.
(flickity option is ssr false)

  • in dev mode
    image
  • in proudction mode
    image

just put no-ssr tag around it like that:
```



@trandaison
Copy link

trandaison commented Aug 26, 2021

  1. Import vue-flickity as a plugin.
    create a js file under plugin folder: plugins/vue-flickity.js
import Vue from 'vue'
import Flickity from 'vue-flickity'

Vue.component('flickity', Flickity)
  1. in nuxt.config.js
{
  // other configs
  plugins: [
    { src: '~/plugins/vue-flickity', ssr: false },
  ]
  // other configs
}
  1. In component file
<template>
  <client-only>
    <flickity ref="flickity" :options="flickityOptions">
      <div class="carousel-cell">1</div>
      <div class="carousel-cell">2</div>
      <div class="carousel-cell">3</div>
      <div class="carousel-cell">4</div>
      <div class="carousel-cell">5</div>
    </flickity>
  </client-only>
</template>

You can also import Flickity as a component, and register, but don't forget to wrap inside the <client-only> tag.

import Flickity from 'vue-flickity';

export default {
  components: {
    Flickity
  },
  // ...

@kissu
Copy link

kissu commented Oct 14, 2021

  1. Import vue-flickity as a plugin.
    create a js file under plugin folder: plugins/vue-flickity.js
import Vue from 'vue'
import Flickity from 'vue-flickity'

Vue.component('flickity', Flickity)
  1. in nuxt.config.js
{
  // other configs
  plugins: [
    { src: '~/plugins/vue-flickity', ssr: false },
  ]
  // other configs
}
  1. In component file
<template>
  <client-only>
    <flickity ref="flickity" :options="flickityOptions">
      <div class="carousel-cell">1</div>
      <div class="carousel-cell">2</div>
      <div class="carousel-cell">3</div>
      <div class="carousel-cell">4</div>
      <div class="carousel-cell">5</div>
    </flickity>
  </client-only>
</template>

You can also import Flickity as a component, and register, but don't forget to wrap inside the <client-only> tag.

import Flickity from 'vue-flickity';

export default {
  components: {
    Flickity
  },
  // ...

This solution is sub-optimal since it's importing the component globally to your entire Nuxt project.
Having a local import of the package is still a thing to have (would consider it as mandatory even).


Here is my solution for this: https://stackoverflow.com/a/69572014/8816585

@adamalfredsson
Copy link

I had an issue loading it when using it with Vue.extend. So I switched from:

export default Vue.extend({
  // ...
});

to:

export default {
  // ...
};

And it works.. Don't ask

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests