Vuejs / NuxtJs包含来自动态设置目录的组件

问题描述 投票:0回答:3

我正在使用NuxtJs / VueJs

我有一个问题,我需要动态设置组件的路径。为什么我听到你问?

好,我正在创建一组站点,这些站点将使用相同的基本代码库,但外观仅会有所不同,因此对于每个域,都希望从特定目录中加载组件。基本组件名称等将保持不变,只是希望能够更改一些超出组件或css中的某些v-if语句的内容。

例如Site1:sites / mysite / HomePageHero.vueSite2:sites / yoursite / HomePageHero.vue

现在,我了解动态组件,但是存在的问题是,每次创建新站点时,我都必须将每个站点组件添加到页面中,而我不想这样做。因此,我创建的网站越多,该列表就越大。

我只想在.env中设置站点名称,将组件添加到目录中,然后一切正常(或类似的操作)

因此,如果您在下面输入我的代码,则我需要DYNAMICHERE是动态的。我可能缺少一些简单的东西。

import HomePageHero from '@/components/sites/DYNAMICHERE/HomePageHero'

仅根据对此的第一个响应进行澄清。我已尝试执行以下操作,但显然不起作用

import HomePageHero from '@/components/sites/' + process.env.THEME . + '/HomePageHero'

javascript vue.js nuxt.js nuxt
3个回答
0
投票

如果使用laravel,则有1个选项:process.env.YOUR_SITE


0
投票

这是我们正在做的:

  1. 在package.json中声明站点名称
  2. 对mongodb使用相同的名称
  3. 导入组件并使用与mongodb process.env名称匹配的组件
  "scripts": {
    "siteOne": "cross-env MONGO_DB=siteOne API_URL=http://localhost:3000 MONGO_URL=mongodb://localhost NODE_ENV=development nodemon server/index.js --watch server",
    "siteTwo": "cross-env MONGO_DB=siteTwo API_URL=http://localhost:3000 MONGO_URL=mongodb://localhost NODE_ENV=development nodemon server/index.js --watch server",
    "build_siteOne": "MONGO_DB=siteOne nuxt build",
    "build_siteTwo": "MONGO_DB=siteTwo nuxt build",
    "start": "node server/index.js",
  },
<template>
  <div class="footer">
    <div class="container">
      <component :is="footerComponent"></component>
    </div>
  </div>
</template>


<script>
  import Footer_siteOne from '~/components/Footer_siteOne.vue';
  import Footer_siteTwo from '~/components/Footer_siteTwo.vue';

  export default {
    components: {
      Footer_siteOne,
      Footer_siteTwo,
    },
    computed: {
      footerComponent: function() {
        return 'Footer_'+process.env.MONGO_DB;
      }
    }
  }
</script>

0
投票

我终于有时间解决这个问题,并使用以下代码解决了最适合我的解决方案的问题

我正在使用dotenv定义环境变量

const HomePageHero = () => import('@/components/sites/' + process.env.WEBSITE_NAME + '/HomePageHero');

这篇文章的文章:

https://vuedose.tips/tips/dynamic-imports-in-vue-js-for-better-performance/

可能还有更清洁的解决方案,但这对我来说很好。

© www.soinside.com 2019 - 2024. All rights reserved.