生产构建缺少一块模板
Production build is missing a piece of template
如问题所述,router-view
未出现在 vite preview
中,但它确实出现在 运行 宁 vite
中。我需要让它在预览中工作,因为这也是在生产中出现的那个。我确保在 运行 vite preview
之前也 运行 构建,但是到目前为止这没有用。
nginx.conf
location / {
gzip off;
root /usr/share/nginx/html/;
index index.html;
try_files $uri $uri/ /index.html;
}
我尝试了另一个 post 的 try_files $uri $uri/ /index.html;
,这对我来说似乎不起作用。
router.js
const history = createWebHistory();
const routes = [
{
path: "/",
name: "dashboard",
component: Dashboard,
},
];
const router = new createRouter({
history: history,
routes
});
export default router;
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Title</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>
main.js
import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
import "./index.css";
const app = createApp(App);
app.use(router);
app.mount('#app');
App.vue
<template>
<base-layout>
<template v-slot:header>
<Header/>
</template>
<template v-slot:default>
<Sidebar/>
<router-view></router-view>
</template>
<template v-slot:footer>
<Footer/>
</template>
</base-layout>
</template>
当然这也有页眉、页脚和侧边栏的组件,而 v 槽是页眉、内容和页脚所在的位置。
我的问题是,如何配置 Vite 和 Vue 3.x 以在我使用 vite preview
时显示 router-view
?
所以,我不确定这在 dev
模式下是如何工作的,但它根本不应该工作。
所以,我添加了 ESlint + Prettier 来稍微清理整个项目 + 调出一些 warning/errors。您可以检查它 per-file,但是像 vite.config.js
这样的地方有 2 个有趣的错误(例如 process.env.NODE_ENV
是一个 webpack 的东西,而不是 a Vite)。
然后,我尝试隔离 views/components 以找出问题所在。原来 Carousel.vue
使用了一些骇人听闻的东西。此外,分页页面最初并没有真正工作。
我看到你已经安装了 vue3-carousel 但实际上并没有使用它。因此,我实现了一个快速简单的旋转木马,查看您拥有的另一个旋转木马。
这是我刚创建的实际代码WorkingCarousel.vue
<template>
<section class="flex">
<carousel :items-to-show="2.5" :ref="carouselRef">
<slide v-for="item in items" :key="item.id">
<div class="item-size">
<img :src="item.imageUrl" />
<p>{{ item.name }}</p>
</div>
</slide>
</carousel>
<div class="pagination">
<button @click="previousSlide">prev</button>
<button @click="nextSlide" style="margin-left: 1rem">next</button>
</div>
</section>
</template>
<script>
import 'vue3-carousel/dist/carousel.css'
import { Carousel, Slide } from 'vue3-carousel'
export default {
name: 'App',
components: {
Carousel,
Slide,
},
props: {
items: {
type: Array,
default: () => [],
},
carouselRef: {
type: String,
default: '',
required: true,
},
fallbackImgSrc: {
type: String,
default: 'https://source.unsplash.com/random',
},
fallbackImgTitle: {
type: String,
default: 'Avatar',
},
},
computed: {
fallbackImgAlt() {
return this.fallbackImgTitle
},
},
methods: {
nextSlide() {
this.$refs[this.carouselRef].next()
},
previousSlide() {
this.$refs[this.carouselRef].prev()
},
},
}
</script>
<style scoped>
.flex {
display: flex;
flex-direction: column;
}
.pagination {
text-align: right;
margin-top: 1rem;
}
.item-size img {
height: 8rem;
object-fit: cover;
}
</style>
这是工作轮播的实际结果,在检查生产构建(preview
脚本)和使用更常见的 Vue 模式时,它工作得很好。
如问题所述,router-view
未出现在 vite preview
中,但它确实出现在 运行 宁 vite
中。我需要让它在预览中工作,因为这也是在生产中出现的那个。我确保在 运行 vite preview
之前也 运行 构建,但是到目前为止这没有用。
nginx.conf
location / {
gzip off;
root /usr/share/nginx/html/;
index index.html;
try_files $uri $uri/ /index.html;
}
我尝试了另一个 post 的 try_files $uri $uri/ /index.html;
,这对我来说似乎不起作用。
router.js
const history = createWebHistory();
const routes = [
{
path: "/",
name: "dashboard",
component: Dashboard,
},
];
const router = new createRouter({
history: history,
routes
});
export default router;
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Title</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>
main.js
import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
import "./index.css";
const app = createApp(App);
app.use(router);
app.mount('#app');
App.vue
<template>
<base-layout>
<template v-slot:header>
<Header/>
</template>
<template v-slot:default>
<Sidebar/>
<router-view></router-view>
</template>
<template v-slot:footer>
<Footer/>
</template>
</base-layout>
</template>
当然这也有页眉、页脚和侧边栏的组件,而 v 槽是页眉、内容和页脚所在的位置。
我的问题是,如何配置 Vite 和 Vue 3.x 以在我使用 vite preview
时显示 router-view
?
所以,我不确定这在 dev
模式下是如何工作的,但它根本不应该工作。
所以,我添加了 ESlint + Prettier 来稍微清理整个项目 + 调出一些 warning/errors。您可以检查它 per-file,但是像 vite.config.js
这样的地方有 2 个有趣的错误(例如 process.env.NODE_ENV
是一个 webpack 的东西,而不是 a Vite)。
然后,我尝试隔离 views/components 以找出问题所在。原来 Carousel.vue
使用了一些骇人听闻的东西。此外,分页页面最初并没有真正工作。
我看到你已经安装了 vue3-carousel 但实际上并没有使用它。因此,我实现了一个快速简单的旋转木马,查看您拥有的另一个旋转木马。
这是我刚创建的实际代码WorkingCarousel.vue
<template>
<section class="flex">
<carousel :items-to-show="2.5" :ref="carouselRef">
<slide v-for="item in items" :key="item.id">
<div class="item-size">
<img :src="item.imageUrl" />
<p>{{ item.name }}</p>
</div>
</slide>
</carousel>
<div class="pagination">
<button @click="previousSlide">prev</button>
<button @click="nextSlide" style="margin-left: 1rem">next</button>
</div>
</section>
</template>
<script>
import 'vue3-carousel/dist/carousel.css'
import { Carousel, Slide } from 'vue3-carousel'
export default {
name: 'App',
components: {
Carousel,
Slide,
},
props: {
items: {
type: Array,
default: () => [],
},
carouselRef: {
type: String,
default: '',
required: true,
},
fallbackImgSrc: {
type: String,
default: 'https://source.unsplash.com/random',
},
fallbackImgTitle: {
type: String,
default: 'Avatar',
},
},
computed: {
fallbackImgAlt() {
return this.fallbackImgTitle
},
},
methods: {
nextSlide() {
this.$refs[this.carouselRef].next()
},
previousSlide() {
this.$refs[this.carouselRef].prev()
},
},
}
</script>
<style scoped>
.flex {
display: flex;
flex-direction: column;
}
.pagination {
text-align: right;
margin-top: 1rem;
}
.item-size img {
height: 8rem;
object-fit: cover;
}
</style>
这是工作轮播的实际结果,在检查生产构建(preview
脚本)和使用更常见的 Vue 模式时,它工作得很好。