HolyKnightIX 2 лет назад
Родитель
Сommit
f3cf15a77f
11 измененных файлов: 232 добавлений и 188 удалений
  1. +1
    -0
      .gitignore
  2. Двоичные данные
      dist.7z
  3. Двоичные данные
      src/assets/img/pause.png
  4. Двоичные данные
      src/assets/img/play.png
  5. Двоичные данные
      src/assets/video/P1 横版_x264.mp4
  6. Двоичные данные
      src/assets/video/video2.mp4
  7. +5
    -0
      src/components/common/tail.vue
  8. +29
    -16
      src/components/common/top.vue
  9. +168
    -155
      src/components/home/home.vue
  10. +7
    -7
      src/registerServiceWorker.js
  11. +22
    -10
      vue.config.js

+ 1
- 0
.gitignore Просмотреть файл

@@ -21,3 +21,4 @@ pnpm-debug.log*
*.njsproj *.njsproj
*.sln *.sln
*.sw? *.sw?
.7z

Двоичные данные
dist.7z Просмотреть файл


Двоичные данные
src/assets/img/pause.png Просмотреть файл

До После
Ширина: 128  |  Высота: 128  |  Размер: 3.7 KiB

Двоичные данные
src/assets/img/play.png Просмотреть файл

До После
Ширина: 128  |  Высота: 128  |  Размер: 4.3 KiB

Двоичные данные
src/assets/video/P1 横版_x264.mp4 Просмотреть файл


Двоичные данные
src/assets/video/video2.mp4 Просмотреть файл


+ 5
- 0
src/components/common/tail.vue Просмотреть файл

@@ -328,4 +328,9 @@ export default {
color: #ccc; color: #ccc;
font-size: 16px; font-size: 16px;
} }
.el-input.is-active .el-input__inner,
.el-input__inner:focus {
border-color: #16e9d6;
outline: 0;
}
</style> </style>

+ 29
- 16
src/components/common/top.vue Просмотреть файл

@@ -4,33 +4,32 @@
<img src="../../assets/img/logo.png" alt class="logo" /> <img src="../../assets/img/logo.png" alt class="logo" />
<div class="logoTitle">metavatar</div> <div class="logoTitle">metavatar</div>
</div> </div>

<div class="categoryBox"> <div class="categoryBox">
<div class="categoryitem" @click="goPage('Product')">
{{ characters == 1 ? "产品能力" : "Product" }}
</div>
<div class="categoryitem" @click="goPage('Technology')">
{{ characters == 1 ? "创新技术" : "Technology" }}
</div>
<div class="categoryitem" @click="goPage('Solutions')">
{{ characters == 1 ? "解决方案" : "Solutions" }}
</div>
<div class="categoryitem" @click="goPage('Cases')">
{{ characters == 1 ? "经典案例" : "Cases" }}
</div>
<div class="categoryitem"> <div class="categoryitem">
<el-dropdown trigger="click" @command="handleCommand"> <el-dropdown trigger="click" @command="handleCommand">
<span class="el-dropdown-link"> <span class="el-dropdown-link">
{{ characters == 1 ? "更多案例" : "AllCases"
{{ characters == 1 ? "产品能力" : "AllCases"
}}<i class="el-icon-arrow-down el-icon--right"></i> }}<i class="el-icon-arrow-down el-icon--right"></i>
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item command="turing">邃图灵</el-dropdown-item>
<el-dropdown-item command="live">邃芒慧播</el-dropdown-item>
<el-dropdown-item command="generate">邃芒慧生</el-dropdown-item> <el-dropdown-item command="generate">邃芒慧生</el-dropdown-item>
<el-dropdown-item command="shadow">邃芒慧影</el-dropdown-item> <el-dropdown-item command="shadow">邃芒慧影</el-dropdown-item>
<el-dropdown-item command="live">邃芒慧播</el-dropdown-item>
<el-dropdown-item command="turing">邃图灵</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</div> </div>
<div class="categoryitem" @click="goView('Technology')">
{{ characters == 1 ? "创新技术" : "Technology" }}
</div>
<div class="categoryitem" @click="goView('Solutions')">
{{ characters == 1 ? "解决方案" : "Solutions" }}
</div>
<!-- <div class="categoryitem" @click="goView('Cases')">
{{ characters == 1 ? "经典案例" : "Cases" }}
</div> -->

<div class="categoryitem" @click="goPage('aboutUs')"> <div class="categoryitem" @click="goPage('aboutUs')">
{{ characters == 1 ? "关于我们" : "About us" }} {{ characters == 1 ? "关于我们" : "About us" }}
</div> </div>
@@ -104,8 +103,16 @@ export default {
handleCommand(path) { handleCommand(path) {
this.$router.push(`/${path}`); this.$router.push(`/${path}`);
}, },
goView(id) {
document.querySelector("#" + id).scrollIntoView({
behavior: "smooth", //定义动画过渡效果"auto"或 "smooth" 之一。默认为 "auto"。
block: "start", //定义垂直方向的对齐, "start", "center", "end", 或 "nearest"之一。默认为 "start"。
inline: "nearest", //"start", "center", "end", 或 "nearest"之一。默认为 "nearest"。
});
// console.log(document.querySelector(id),);
},
goPage(path) { goPage(path) {
this.$router.push(`/?id=${path}`);
this.$router.push(`${path}`);
}, },
go(url) { go(url) {
this.$router.push(url); this.$router.push(url);
@@ -201,4 +208,10 @@ export default {
.el-select { .el-select {
width: 120px; width: 120px;
} }
.el-dropdown-link {
transition: all 0.3s;
&:hover {
color: #16e9d6;
}
}
</style> </style>

+ 168
- 155
src/components/home/home.vue Просмотреть файл

@@ -1,111 +1,70 @@
<template> <template>
<div class="Box">
<div class="topBox">
<div class="logoBox" @click="go('/')">
<img src="../../assets/img/logo.png" alt class="logo" />
<div class="logoTitle">metavatar</div>
</div>

<div class="categoryBox">
<div class="categoryitem">
<el-dropdown trigger="click" @command="handleCommand">
<span class="el-dropdown-link">
{{ characters == 1 ? "产品能力" : "AllCases"
}}<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="generate">邃芒慧生</el-dropdown-item>
<el-dropdown-item command="shadow">邃芒慧影</el-dropdown-item>
<el-dropdown-item command="live">邃芒慧播</el-dropdown-item>
<el-dropdown-item command="turing">邃图灵</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<div class="categoryitem" @click="goView('Technology')">
{{ characters == 1 ? "创新技术" : "Technology" }}
</div>
<div class="categoryitem" @click="goView('Solutions')">
{{ characters == 1 ? "解决方案" : "Solutions" }}
</div>
<div class="categoryitem" @click="goView('Cases')">
{{ characters == 1 ? "经典案例" : "Cases" }}
</div>

<div class="categoryitem" @click="goView('aboutUs')">
{{ characters == 1 ? "关于我们" : "About us" }}
</div>
</div>
<div class="cutBox">
<div class="en">
<el-select
v-model="charactersMy"
placeholder="请选择"
@change="change"
>
<el-option
v-for="item in languageLsit"
:key="item.value"
:label="item.name"
:value="item.value"
>
<div class>
<img :src="item.url" alt class="cutImg" />
<span>{{ item.name }}</span>
</div>
</el-option>
</el-select>
</div>
</div>
</div>

<div class="Box" id="top">
<div class="module_1"> <div class="module_1">
<img src="../../assets/img/BG@2x.png" width="100%" height="100%" />
<video
ref="video"
src="../../assets/video/P1 横版_x264.mp4"
width="100%"
height="100%"
autoplay
muted="muted"
loop="loop"
/>
<div class="titleBox"> <div class="titleBox">
<div class="title_item1" v-if="characters == 1"> <div class="title_item1" v-if="characters == 1">
超写实!虚拟数字人创造者
打造自主数字人IP 沉淀数字资产
</div> </div>
<div class="title_item3" v-if="characters == 1"> <div class="title_item3" v-if="characters == 1">
轻松创造您独一无二的数字人IP
自动化实时创作过程 帮助您快速定义形象 多种类型
</div>
<div class="title_item3" v-if="characters == 1">
创造生成 超真实 超写实 风格化 不同性别
</div>
<div class="title_item3" v-if="characters == 1">
多人种 分身化身随心创造
</div> </div>


<!-- <div class="title_item3" v-if="characters==1">创造生成 超真实 超写实 风格化 不同性别</div>
<div class="title_item3" v-if="characters==1">多人种 分身化身随心创造</div> -->

<div class="title_item1_y">Hyperrealism</div>
<div class="title_item1_y" v-if="characters != 1">
Create virtual human IP
</div>
<div class="title_item2" v-if="characters != 1"> <div class="title_item2" v-if="characters != 1">
Digital human creator
for your business as digital assets
</div> </div>
<div class="title_item3" v-if="characters != 1"> <div class="title_item3" v-if="characters != 1">
Easily create your unique digital IP
Automatic creation process, speed up character defined from months to
hours Diversity character types, ultra-realistic, stylized or
customized freely
</div> </div>


<div class="title_btn" @click="showBox"> <div class="title_btn" @click="showBox">
{{ characters == 1 ? "立刻体验" : "Try it now" }} {{ characters == 1 ? "立刻体验" : "Try it now" }}
</div> </div>
</div> </div>
<div class="md1" id="Product"></div>
<div class="md1" id="md1"></div>
</div> </div>


<div class="module_2" id="module_2"> <div class="module_2" id="module_2">
<div class="characters_l"> <div class="characters_l">
<div class="titleBox"> <div class="titleBox">
<div class="title"> <div class="title">
{{ characters == 1 ? "Ai驱动" : "ai drive" }}
{{
characters == 1 ? "文字语音AI驱动" : "Text/Audio AI manipulation"
}}
</div> </div>
</div> </div>
<div class="ctnBox"> <div class="ctnBox">
<div class="title_ctn1"> <div class="title_ctn1">
{{ {{
characters == 1 characters == 1
? "文字驱动数字人交互,面容生动表情自然,ai语音配合专业文案和音频素材"
: "Text and AI language Sound driven digital human interaction, vivid face and natural expression,"
? "文字/语音驱动生成数字人,邃芒技术所呈现的高自然度,以及多语言多种输入方式"
: "Text/audio manipulate the virtual human created, Metavatar AIGC delivers high resolution, naturally and vividly character moves"
}} }}
</div> </div>
<div class="title_ctn1"> <div class="title_ctn1">
{{ {{
characters == 1 characters == 1
? "让邃芒数字人学富五车,驾驭各种复杂场景"
: "make Suimang digital people clever to driving various complex scenes"
? "让您的数字人可以快速进行内容生产,真正实现智能全自动的内容生产(AIGC)。"
: "supporting multiple languages and inputs, generating digital content, bring new intelligence experience far more exciting than before ."
}} }}
</div> </div>
</div> </div>
@@ -114,7 +73,7 @@
<div class="characters_2"> <div class="characters_2">
<div class="titleBox"> <div class="titleBox">
<div class="title"> <div class="title">
{{ characters == 1 ? "真人驱动" : "human drive" }}
{{ characters == 1 ? "中之人驱动" : "“中の人”manipulation" }}
</div> </div>
</div> </div>


@@ -122,23 +81,36 @@
<div class="title_ctn1"> <div class="title_ctn1">
{{ {{
characters == 1 characters == 1
? "文字驱动数字人交互,面容生动表情自然,ai语音配合专业文案和音频素材让邃芒数字人学富五车,"
: "Text and AI language Sound driven digital human interaction, vivid face and natural expression,"
? "中之人驱动数字形象,快速生产各种背景下的视频,短片,影视剧等,让您的数字人轻松进入各种复杂场景"
: "Metavatar also supports the “中の人“ vtuber manipulation. Generating videos and broadcasting content on demand in any "
}} }}
</div> </div>
<div class="title_ctn1"> <div class="title_ctn1">
{{ {{
characters == 1 characters == 1
? "驾驭各种复杂场景"
: "make Suimang digital people clever to driving various complex scenes"
? " 为企业在数字内容上提供丰富的体验,大幅节省成本提高生产效率。"
: "complex cases Provide extremely expenses saving & extendable user experience in digital content producing process ."
}} }}
</div> </div>
</div> </div>
</div> </div>
</div> </div>

<div class="module_3" id="module_3"> <div class="module_3" id="module_3">
<div class="imgBox1">
<img src="../../assets/img/module_3_1.png" alt />
<div class="imgBox1" @click="goSetVedio(isPlayed)">
<img
v-if="isPlayed"
class="play"
src="../../assets/img/play.png"
title="click to play"
/>
<img
v-else
class="play"
src="../../assets/img/pause.png"
title="click to pause"
/>
<video ref="videoII" src="../../assets/video/video2.mp4" />
</div> </div>
<div class="imgBox2"> <div class="imgBox2">
<img src="../../assets/img/module_3_2.png" alt /> <img src="../../assets/img/module_3_2.png" alt />
@@ -157,67 +129,6 @@
</div> </div>
</div> </div>


<div :class="characters == 1 ? 'module_5_0' : 'module_5_1'" id="Technology">
<div :class="characters == 1 ? 'titleBox' : 'titleBox1'">
<div class="title">
{{
characters == 1 ? "快速 高效 完美" : "Fast Efficient Perfect"
}}
</div>
<div class="paragraph">
{{
characters == 1
? "邃芒数字人通过StyleGAN和基于神经辐射场(NeRF)的场景表征 "
: "Suimang Digital Human brings digital human creation into a new generation"
}}
</div>

<!-- <div class="paragraph" v-if="characters != 1">
User can experiences a completely automatic process of character
creation, manipulation and intelligent interaction without any
intervention.MetaGene provides high-resolution virtual digital human ,
“digital twin”, symbolization characters editable freely rapidly.
</div> -->

<div class="paragraph">
{{
characters == 1
? "与容积渲染将数字人创造带入了全新世代!"
: "through StyleGAN and neural radiation field (NeRF) based scene"
}}
</div>

<div class="paragraph">
{{ characters == 1 ? "" : "representation and volume rendering! " }}
</div>
<div class="read_btn" @click="showBox">
{{ characters == 1 ? "了解详情" : "Read more" }}
</div>
</div>

<div class="md1" id="Solutions"></div>
</div>

<div class="module_6" id="module_6">
<div class="title">
{{
characters == 1
? "让如此优秀的数字人服务于您的更多应用场景吧!"
: "Let such excellent digital people serve more of your application scenarios!"
}}
</div>
<div class="imgBox">
<div
class="itemBox"
v-for="(item, index) in module_6_data"
:key="index"
>
<img :src="item.url" alt />
<p>{{ characters == 1 ? item.name : item.name_y }}</p>
</div>
</div>
</div>

<div class="module_7"> <div class="module_7">
<div class="fillBox"> <div class="fillBox">
<div class="title"> <div class="title">
@@ -275,7 +186,71 @@
</div> </div>
</div> </div>


<div class="module_8" id="Cases">
<div :class="characters == 1 ? 'module_5_0' : 'module_5_1'" id="Technology">
<div :class="characters == 1 ? 'titleBox' : 'titleBox1'">
<div class="title">
{{ characters == 1 ? "快速 高效 完美" : "Flexible and Vivid Avatar" }}
</div>
<div class="paragraph">
{{
characters == 1
? "MetaGene是邃芒科技自主技术研发的自动化数字人平台,以GAN(生成对抗网络)、NeRF(神经辐射场)、多模态合成技术为基础,并加持NLP与知识图谱能力,建设元宇宙的基础设施。MetaGene 实现无人工干预的形象创造、数字人驱动以及智能交互全流程,通过MetaGene可以实时创造高辨率的虚拟数字人形象,数字分身,并且可以自由的编辑及风格化。"
: "MetaGene is an automated digital human platform developed by Metavatar. MetaGene is based on GAN (Generative Adversarial Network), NeRF (Neural Radiation Field) and multimodal synthesis technology, combined by NLP and knowledge graph capabilities to build the infrastructure of the Metaverse. "
}}
</div>

<!-- <div class="paragraph" v-if="characters != 1">
User can experiences a completely automatic process of character
creation, manipulation and intelligent interaction without any
intervention.MetaGene provides high-resolution virtual digital human ,
“digital twin”, symbolization characters editable freely rapidly.
</div> -->

<div class="paragraph">
{{
characters == 1
? "MetaGene不仅支持通过语音、文字、视频等多种有/无中之人的数字人驱动方式,为用户生成实时的生成高质量的视频内容;还通过先进技术手段降低前端算力依赖,解决直播实时性等复杂场景问题。"
: "MetaGene not only supports real-time high-quality video content generation for users through voice, text, video and other manipulation approaches; It also reduces the front-end computing power cost and compatible in the complex scenario, such as live broadcast real-time."
}}
</div>

<div class="paragraph">
{{
characters == 1
? "MetaGene为数字人提供了智能交互的能力,让输出的形象具备智能化互动功能,帮助处理实际业务中的问题,协助完成任务。"
: "MetaGene provides digital human with the interactive ability, the character will have intelligent interactive functions, help to deal with real world problems in the business and assistance in completing tasks."
}}
</div>

<div class="read_btn" @click="showBox">
{{ characters == 1 ? "了解详情" : "Read more" }}
</div>
</div>

<div class="md1" id="Solutions"></div>
</div>

<div class="module_6" id="module_6">
<div class="title">
{{
characters == 1
? "邃芒数字人可服务的场景"
: "Scenarios that Suimang Digital Humans can serve"
}}
</div>
<div class="imgBox">
<div
class="itemBox"
v-for="(item, index) in module_6_data"
:key="index"
>
<img :src="item.url" alt />
<p>{{ characters == 1 ? item.name : item.name_y }}</p>
</div>
</div>
</div>

<!-- <div class="module_8" id="Cases">
<div class="title">SELECTED CASES</div> <div class="title">SELECTED CASES</div>
<div class="title_1">{{ characters == 1 ? "经典案例" : "" }}</div> <div class="title_1">{{ characters == 1 ? "经典案例" : "" }}</div>
<div class="xian"></div> <div class="xian"></div>
@@ -302,7 +277,7 @@
: "With the warming of the concept of meta-universe, digital artists begin to appear widely in front of the public, and people are used to it. Jia Mang Technology's AI" : "With the warming of the concept of meta-universe, digital artists begin to appear widely in front of the public, and people are used to it. Jia Mang Technology's AI"
}} }}
</div> </div>
</div>
</div> -->


<div class="module_9" id="aboutUs"> <div class="module_9" id="aboutUs">
<div class="weBox" @click="goPages('aboutUs')"> <div class="weBox" @click="goPages('aboutUs')">
@@ -333,7 +308,7 @@
</div> --> </div> -->
</div> </div>
</div> </div>
<img src="../../assets/img/myS.png" alt class="weImg" />
<img src="../../assets/img/me.png" alt class="weImg" />
</div> </div>


<div class="timeBox"> <div class="timeBox">
@@ -380,7 +355,7 @@
v-for="(item, index) in partnerLsit" v-for="(item, index) in partnerLsit"
:key="index" :key="index"
> >
<img :src="item.url" alt />
<img :src="item.url" />
</div> </div>
</div> </div>
</div> </div>
@@ -433,6 +408,7 @@ import { mapState, mapActions } from "vuex";
export default { export default {
data() { data() {
return { return {
isPlayed: true,
//零时存放 //零时存放
charactersMy: 1, charactersMy: 1,
languageLsit: [ languageLsit: [
@@ -555,18 +531,23 @@ export default {
partnerLsit: [ partnerLsit: [
{ {
url: require("../../assets/img/partner1.png"), url: require("../../assets/img/partner1.png"),
path: "",
}, },
{ {
url: require("../../assets/img/partner2.png"), url: require("../../assets/img/partner2.png"),
path: "",
}, },
{ {
url: require("../../assets/img/partner3.png"), url: require("../../assets/img/partner3.png"),
path: "",
}, },
{ {
url: require("../../assets/img/partner4.png"), url: require("../../assets/img/partner4.png"),
path: "",
}, },
{ {
url: require("../../assets/img/partner5.png"), url: require("../../assets/img/partner5.png"),
path: "",
}, },
], ],
timeLsit: [ timeLsit: [
@@ -630,6 +611,14 @@ export default {
this.setCharacters(value); this.setCharacters(value);
}, },


goSetVedio(flag) {
if (flag) {
this.$refs["videoII"].play();
} else {
this.$refs["videoII"].pause();
}
this.isPlayed = !flag;
},
showBox() { showBox() {
this.dialogVisible = true; this.dialogVisible = true;
}, },
@@ -693,7 +682,6 @@ export default {


mounted() { mounted() {
// console.log(); // console.log();
// this.$refs["vidoe"].play();
new Swiper(".swiper-container", { new Swiper(".swiper-container", {
slidesPerView: 3, slidesPerView: 3,
spaceBetween: 30, spaceBetween: 30,
@@ -719,12 +707,9 @@ export default {
}); });
}, },
created() { created() {
const id = this.$route.query.id;
if (id) {
this.$nextTick(() => {
this.goView(id);
});
}
this.$nextTick(() => {
this.goView("top");
});
}, },
}; };
</script> </script>
@@ -922,14 +907,34 @@ export default {
overflow: hidden; overflow: hidden;
background-color: #202020; background-color: #202020;
.imgBox1 { .imgBox1 {
position: relative;
float: left;
width: 49%; width: 49%;
height: 570px; height: 570px;
float: left;
cursor: pointer;
.play {
position: absolute;
top: 42%;
left: 50%;
transform: translate(-50%, -50%);
width: 100px;
height: 100px;
z-index: 99;
transition: all 0.3s;
transform: scale(10);
opacity: 0;
}
// background-color: #16e9d6; // background-color: #16e9d6;
img {
video {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
&:hover {
.play {
transform: scale(1);
opacity: 1;
}
}
} }
.imgBox2 { .imgBox2 {
width: 49%; width: 49%;
@@ -1573,6 +1578,9 @@ export default {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin-bottom: 130px; margin-bottom: 130px;
background-color: #ffffff;
border-radius: 30px;
overflow: hidden;
.cooperationItem { .cooperationItem {
width: 200px; width: 200px;
height: 100px; height: 100px;
@@ -1581,6 +1589,11 @@ export default {
width: 100%; width: 100%;
height: 100%; height: 100%;
// margin: 20px 5%; // margin: 20px 5%;
cursor: pointer;
transition: all 0.3s;
&:hover {
transform: scale(1.1);
}
} }
} }
} }


+ 7
- 7
src/registerServiceWorker.js Просмотреть файл

@@ -4,28 +4,28 @@ import { register } from 'register-service-worker'


if (process.env.NODE_ENV === 'production') { if (process.env.NODE_ENV === 'production') {
register(`${process.env.BASE_URL}service-worker.js`, { register(`${process.env.BASE_URL}service-worker.js`, {
ready () {
ready() {
console.log( console.log(
'App is being served from cache by a service worker.\n' + 'App is being served from cache by a service worker.\n' +
'For more details, visit https://goo.gl/AFskqB' 'For more details, visit https://goo.gl/AFskqB'
) )
}, },
registered () {
registered() {
console.log('Service worker has been registered.') console.log('Service worker has been registered.')
}, },
cached () {
cached() {
console.log('Content has been cached for offline use.') console.log('Content has been cached for offline use.')
}, },
updatefound () {
updatefound() {
console.log('New content is downloading.') console.log('New content is downloading.')
}, },
updated () {
updated() {
console.log('New content is available; please refresh.') console.log('New content is available; please refresh.')
}, },
offline () {
offline() {
console.log('No internet connection found. App is running in offline mode.') console.log('No internet connection found. App is running in offline mode.')
}, },
error (error) {
error(error) {
console.error('Error during service worker registration:', error) console.error('Error during service worker registration:', error)
} }
}) })


+ 22
- 10
vue.config.js Просмотреть файл

@@ -1,3 +1,7 @@
const path = require('path')
function resolve(dir) {
return path.join(__dirname, dir)
}
module.exports = { module.exports = {
css: { css: {
loaderOptions: { loaderOptions: {
@@ -15,15 +19,15 @@ module.exports = {
} }
}, },


pwa: {
iconPaths: {
favicon32: 'favicon.ico',
favicon16: 'favicon.ico',
appleTouchIcon: 'favicon.ico',
maskIcon: 'favicon.ico',
msTileImage: 'favicon.ico'
}
},
// pwa: {
// iconPaths: {
// favicon32: 'favicon.ico',
// favicon16: 'favicon.ico',
// appleTouchIcon: 'favicon.ico',
// maskIcon: 'favicon.ico',
// msTileImage: 'favicon.ico'
// }
// },
//http://www.metavatar.cc/ //http://www.metavatar.cc/
devServer: { devServer: {
overlay: { overlay: {
@@ -43,5 +47,13 @@ module.exports = {
} }
}, },
lintOnSave: false, lintOnSave: false,
publicPath: './', // 打包后引用的资源路径
indexPath: 'index.html',
publicPath: '/', // 打包后引用的资源路径
configureWebpack: {
resolve: {
alias: {
'@': resolve('src')
}
}
}
} }

Загрузка…
Отмена
Сохранить