Nuxt js не загружает изображения при переключении в производственную среду

#javascript #vue.js #nuxt.js

Вопрос:

Честно говоря, я работаю над довольно большим приложением. Когда я работал над средой разработки, все работало хорошо, никаких ошибок или чего-то подобного. Теперь, когда я переключился на производственную среду, я получаю много ошибок. Nuxt по какой-то причине не загружает некоторые изображения. У меня хранятся мои изображения в разделе assets/**/* .

Пример импорта изображений:

 <img :src="require(~/assets/establishment_img/${image})" alt="preview image">
 

вот ошибки:
введите описание изображения здесь

nuxt-config.js

 const path = require("path")

export default {
  // Global page headers: https://go.nuxtjs.dev/config-head
  head: {
    title: "Estudiant Orientation",
    htmlAttrs: {
      lang: "en"
    },
    meta: [
      { charset: "utf-8" },
      { name: "viewport", content: "width=device-width, initial-scale=1" },
      { hid: "description", name: "description", content: "" }
    ],
    link: [
      { rel: "icon", type: "image/x-icon", href: "/favicon.ico" },
      {
        rel: "stylesheet",
        type: "text/css",
        href:
          "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.2/css/all.min.css"
      }, // font-awesome css
      {
        rel: "stylesheet",
        type: "text/css",
        href:
          "https://cdnjs.cloudflare.com/ajax/libs/Swiper/6.4.15/swiper-bundle.css"
      }, // swiper css
      {
        rel: "stylesheet",
        type: "text/css",
        href:
          "https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css"
      }, // animate css
      {
        rel: "stylesheet",
        type: "text/css",
        href:
          "https://cdnjs.cloudflare.com/ajax/libs/limonte-sweetalert2/10.15.5/sweetalert2.min.css"
      } // sweetalert2 css
    ],
    script: [
      {
        hid: "stripe",
        src:
          "https://cdnjs.cloudflare.com/ajax/libs/Swiper/6.4.15/swiper-bundle.min.js",
        defer: true
      }, // swiper js
      {
        hid: "stripe",
        src:
          "https://cdnjs.cloudflare.com/ajax/libs/limonte-sweetalert2/10.15.5/sweetalert2.all.js",
        defer: true
      }, // sweetalert2 js
      {
        hid: "stripe",
        src:
          "https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js",
        defer: true
      }, // chart js
      {
        hid: "stripe",
        src: "https://unpkg.com/vue-chartjs/dist/vue-chartjs.min.js",
        defer: true
      }, // vue-chart js
      {
        hid: "stripe",
        src: "https://cdnjs.cloudflare.com/ajax/libs/gsap/3.6.0/gsap.min.js",
        defer: true
      }, // gsap js
      {
        hid: "stripe",
        src:
          "https://cdnjs.cloudflare.com/ajax/libs/ScrollTrigger/1.0.5/ScrollTrigger.min.js",
        defer: true
      }, // ScrollTrigger js
      {
        hid: "stripe",
        src: "https://cdnjs.cloudflare.com/ajax/libs/three.js/108/three.min.js",
        defer: true
      } // three js
    ]
  },

  // Global CSS: https://go.nuxtjs.dev/config-css
  css: [
    "~/assets/css/global.css",
    "~/assets/css/animations.css",
    "~/assets/css/variables.css",
    "~/assets/css/dashboard-light.css",
    "~/assets/css/modal.css",
    "~/node_modules/vue-select/dist/vue-select.css"
  ],

  // Global JS
  js: [
    "~/node_modules/trading-vue-js/dist/trading-vue.min.js",
    "~/assets/js/hover-effect.umd.js" // distortion hover effect js
  ],

  //router active links
  router: {
    linkActiveClass: '--do-nothing',
    linkExactActiveClass: 'active',
  },

  // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
  plugins: [
    { src: "~/plugins/_globals.js" },
    { src: "~/plugins/vue-chartkick.js", mode: "client" },
    { src: '~/plugins/vuex-persist.js', ssr: false},
  ],

  // Auto import components: https://go.nuxtjs.dev/config-components
  components: true,

  // Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules
  buildModules: [],

  // Modules: https://go.nuxtjs.dev/config-modules
  modules: [
    // https://go.nuxtjs.dev/bootstrap
    "bootstrap-vue/nuxt",
    "@nuxtjs/proxy",
    "cookie-universal-nuxt",
    "@nuxtjs/bootstrap-vue",
  ],

  bootstrapVue: {
    bootstrapCSS: false,
    bootstrapVueCSS: false
  },

  // Specifying the build directory
  buildDir: path.resolve(__dirname, "../server/public"),

  // environment proxy
  proxy: {
    "/api": {
      target: "http://localhost:5000"
    }
  },

  router: {
    middleware: ["user-auth"]
  },

  // Build Configuration: https://go.nuxtjs.dev/config-build
  build: {}
};
 

кроме того, это то, что я делаю в своей index.js для серверной части:

 // Handling Production
if (process.env.NODE_ENV === 'production') {
    // Static Folder
    app.use(express.static(__dirname   '/public/'));

    // Handle SPA
    app.get(/.*/, (req, res) => res.send(__dirname   '/public/index.html'));
}
 

Есть ли способ решить эту проблему? Спасибо.

Комментарии:

1. Пожалуйста, покажите, как вы импортируете/используете свои изображения в своем коде

2. все динамично, так что вот пример <img :src="require( ~/активы/установки_img/${изображение} )" alt="preview image">

3. Попробуйте добавить ~@/активы…. или без ~

4. Какие target spa у тебя ключи, в твоих nuxt.config.js ? Как вы создаете свое приложение и где вы его размещаете?

5. Ваш сервер неправильно настроен

Ответ №1:

Нет необходимости использовать require(~/assets/establishment_img/${image}) конструкцию в вашем nuxt.js приложение!

Вы можете просто поместить свое статическое изображение в папку /static/ в корневом каталоге проекта nuxt и получить доступ к нему в своем приложении с помощью:

 <img :src="`/establishment_img/${image}`" alt="preview image">
 

Таким образом, он будет доступен как в режиме разработки, так и в режиме производства

Комментарии:

1. Вы ошибаетесь, необходимо использовать require, потому что, как я сказал выше, он динамический и не будет работать, если он не завернут в require

2. Кроме того, размещение изображения public не всегда является лучшим решением. Действительно, assets предпочтительнее.

3. Что ж, в этом случае вы можете создать псевдоним для папки активов в своем nuxt.config.js, что-то вроде: «сборка: { расширение(конфигурация, ctx) { config.resolve.псевдоним [`~активы’] = путь.разрешение(__имя файла,’. /активы’)}}», А затем требуется(~активы/создание_img/${изображение})

4. Я не знаю, почему это произошло. Но я просто внес некоторые изменения и перестроил приложение. Я работаю в производственном режиме, и на этот раз все, кажется, работает нормально??? Это сбивает с толку, иногда это работает, а иногда просто не работает…