我正在使用NuxtJs / VueJs
我有一个问题,我需要动态设置组件的路径。为什么我听到你问?
好吧,我正在创建一组站点,这些站点将使用相同的基本代码库,但外观只会有所不同,因此对于每个域,都希望从特定目录中加载组件。基本组件名称等将保持不变,只是希望能够更改一些超出组件或css中的某些v-if语句的内容。
例如
Site1:sites / mysite / HomePageHero.vue
Site2:sites / yoursite / HomePageHero.vue
现在我知道动态组件,但是存在的问题是,每当我创建一个新站点并且我不想这样做时,我就必须将每个站点组件添加到页面中。因此,我创建的网站越多,该列表就越大。
我只想在.env中设置站点名称,将组件添加到目录中,然后一切正常(或类似操作)
因此,如果您在下面使用我的代码,则我需要DYNAMICHERE是动态的。我可能缺少一些简单的东西。
import HomePageHero from '@/components/sites/DYNAMICHERE/HomePageHero'
为澄清起见,请根据对此的第一个答复。我尝试做以下显然不起作用的事情
import HomePageHero from '@/components/sites/' + process.env.THEME . + '/HomePageHero'
答案 0 :(得分:0)
如果您使用的是laravel,则有1个选项:process.env.YOUR_SITE
答案 1 :(得分:0)
这就是我们正在做的:
"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>
答案 2 :(得分:0)
我终于有时间解决这个问题,并使用以下代码解决了最适合我的解决方案的问题
我正在使用dotenv定义环境变量
const HomePageHero = () => import('@/components/sites/' + process.env.WEBSITE_NAME + '/HomePageHero');
这篇文章的文章:
https://vuedose.tips/tips/dynamic-imports-in-vue-js-for-better-performance/
仍然可能有更清洁的解决方案,但这对我来说很好。