Vue를 사용하여 개발할 때 단일 페이지 애플리케이션(SPA)이 자주 사용됩니다. 이 방법에는 HTML 페이지가 하나만 있고 모든 중요한 구성 요소가 페이지에 동적으로 로드되며 Vue의 라우터는 다양한 보기를 제공하는 데 사용됩니다. 그러나 단일 페이지 애플리케이션을 다중 페이지 애플리케이션(MPA)으로 변환해야 하는 상황이 있습니다. 이는 각 보기에 대해 서로 다른 HTML 파일을 생성하는 것을 의미합니다. 이 기사에서는 Vue 단일 페이지 애플리케이션을 다중 페이지 애플리케이션으로 변환하는 방법에 대해 설명합니다.
먼저 각 구성 요소가 자체 HTML 파일을 생성할 수 있도록 웹팩에서 MPA를 구성해야 합니다.
webpack 플러그인을 통해 각 뷰에 대한 진입점을 구성하고, HtmlWebpackPlugin 플러그인을 사용하여 각 HTML 파일에 대한 항목 파일을 생성하고, 생성된 JS 파일에 스크립트 태그를 추가할 수 있습니다. 이러한 방식으로 필요에 따라 각 보기에 대한 HTML 파일을 만들 수 있습니다.
다음은 간단한 웹팩 구성 예입니다.
module.exports = { entry: { home: './src/pages/home/main.js', about: './src/pages/about/main.js', contact: './src/pages/contact/main.js' }, output: { path: './dist', filename: '[name].[hash].js' }, plugins: [ new HtmlWebpackPlugin({ filename: 'home.html', template: './src/pages/home/index.html', chunks: ['home'] }), new HtmlWebpackPlugin({ filename: 'about.html', template: './src/pages/about/index.html', chunks: ['about'] }), new HtmlWebpackPlugin({ filename: 'contact.html', template: './src/pages/contact/index.html', chunks: ['contact'] }) ] }
위 코드에서는 세 개의 진입점을 정의하고 각 HTML 파일에 대한 템플릿을 제공합니다. 여기서는 HtmlWebpackPlugin을 사용하여 생성된 JS 파일을 각 HTML 파일에 추가합니다.
다음으로 다중 페이지 애플리케이션에 적응할 수 있도록 라우팅을 일부 수정해야 합니다. 추가 "#" 문자가 경로에 추가되지 않도록 Vue 라우터를 "기록" 모드로 전환해야 하며, 새 HTML 파일 이름과 일치하도록 라우팅 구성을 수정해야 합니다. 다음과 같이 필요한 변경을 수행할 수 있습니다.
// main.js import Vue from 'vue' import App from './App.vue' import router from './router' import createRouter from '@/router' import { sync } from 'vuex-router-sync' import store from '@/store' Vue.config.productionTip = false const { app, router: createdRouter } = createRouter() // sync the router with the vuex store // this registers `store.state.route` sync(store, createdRouter) /* eslint-disable no-new */ new Vue({ el: '#app', router, store, created() { const linkTags = document.getElementsByTagName('link') const links = Array.prototype.slice.call(linkTags) links.forEach(link => { const href = link.getAttribute('href') if (href && href.indexOf('.') !== -1) { link.setAttribute('href', `/public/pages/${[this.$route.path.split('/')[1]]}/${href}`) } }) }, render: h => h(App) })
위 코드에서는 먼저 createRouter() 함수를 가져와 이를 사용하여 애플리케이션 및 라우터 인스턴스를 생성합니다. 그런 다음 Vuex 라우터를 Vue 애플리케이션과 동기화하고 create() 함수를 호출하여 정적 리소스를 참조하는 데 사용되는 a 태그의 href 속성을 수정하여 올바른 CSS 및 JS 파일을 참조하는지 확인합니다.
또한 라우터 구성을 수정하여 다음과 같이 올바른 HTML 파일에 매핑되도록 해야 합니다.
// router/index.js import Vue from 'vue' import Router from 'vue-router' import Home from '@/pages/home/Home.vue' import About from '@/pages/about/About.vue' import Contact from '@/pages/contact/Contact.vue' Vue.use(Router) export default function createRouter() { const router = new Router({ mode: 'history', base: '/', routes: [ { path: '/', redirect: '/home' }, { path: '/home', name: 'Home', component: Home, meta: { title: 'Home Page' } }, { path: '/about', name: 'About', component: About, meta: { title: 'About Page' } }, { path: '/contact', name: 'Contact', component: Contact, meta: { title: 'Contact Page' } } ] }) return { router } }
단일 페이지 앱을 다중 페이지 앱으로 변환한 후, 모든 정적 자산이 올바르게 로드되는지 확인해야 합니다. 단일 페이지 애플리케이션에서는 일반적으로 모든 정적 리소스를 HTML 파일로 참조하므로 webpack의 출력 대상을 루트 디렉터리의 /dist로 설정하여 여러 HTML 페이지의 Access에서 모든 파일을 올바르게 찾을 수 있도록 할 수 있습니다.
위 단계를 완료한 후 이제 Vue를 사용하여 프런트엔드 코드를 작성하고 개발할 수 있습니다. 각 페이지마다 독립적인 구성 요소를 작성하거나 Vue 구성 요소 템플릿을 사용하여 특정 구성 요소를 공유할 수 있습니다. 어떤 방법을 사용하든 각 구성 요소의 파일 이름과 HTML 파일의 파일 이름이 일치하는지 확인해야 합니다.
// Home.vue <template> <div> <h1>Home page</h1> <p>Welcome to my home page!</p> </div> </template>
<!-- home.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Home Page</title> <link rel="stylesheet" href="/public/pages/home/app.12345.css"> </head> <body> <div id="app"></div> <script src="/public/pages/home/app.12345.js"></script> </body> </html>
마지막으로 publicPath가 webpack에 구성되어 정적 리소스 경로를 올바르게 처리하는지 확인하세요. publicPath는 각 파일이 필요한 모든 리소스를 올바르게 로드할 수 있도록 각 HTML 파일의 기본 경로를 가리켜야 합니다.
// webpack.config.js module.exports = { output: { path: path.resolve(__dirname, 'dist'), filename: 'js/[name].[hash:8].js', publicPath: '/' }, // ... }
이제 webpack을 사용하여 MPA를 파일 세트로 빌드하고 웹사이트 서버에 배포할 수 있습니다. 각 HTML 파일에 대해 별도의 디렉터리를 생성하고 각 디렉터리에 대한 공통 구성 요소를 만들어야 합니다. Vue-cli 3.0을 사용하는 경우 아래와 같이 vue.config.js 파일을 수정하여 다중 페이지 애플리케이션에 대한 빌드 구성을 설정할 수 있습니다.
// vue.config.js module.exports = { pages: { home: { entry: 'src/pages/home/main.js', template: 'public/pages/home/app.html', filename: 'home.html', chunks: ['chunk-vendors', 'chunk-common', 'home'] }, about: { entry: 'src/pages/about/main.js', template: 'public/pages/about/app.html', filename: 'about.html', chunks: ['chunk-vendors', 'chunk-common', 'about'] }, contact: { entry: 'src/pages/contact/main.js', template: 'public/pages/contact/app.html', filename: 'contact.html', chunks: ['chunk-vendors', 'chunk-common', 'contact'] } } }
위 코드에서는 Vue에서 제공하는 "페이지"를 사용했습니다. CLI” 속성을 사용하면 각 구성 요소에 대해 서로 다른 페이지를 구성하고 각 페이지에 해당 파일을 자동으로 생성할 수 있습니다.
이제 다중 페이지 애플리케이션의 생성 및 배포가 완료되었습니다. 이러한 방식으로 Vue로 애플리케이션을 구축할 때 다양한 페이지를 매우 유연하게 처리할 수 있습니다. 필요에 따라 페이지를 추가하거나 제거하고 각 페이지에 대해 독립적인 구성 요소를 만들 수 있습니다. 전반적으로 이를 통해 우리는 보다 모듈화되고 유지 관리 가능한 애플리케이션을 구축할 수 있습니다.
위 내용은 vue 단일 페이지를 여러 페이지로 변경하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!