Vue 다중 페이지 개발 및 패키징을 사용하는 방법
이번에는 Vue 다중 페이지 개발 및 패키징 사용법을 알려드리겠습니다. Vue 다중 페이지 개발 및 패키징 사용 시 주의사항은 무엇인가요?
얼마전 기술스택을 진행하고 있었는데 주로 공식 홈페이지와 백엔드 관리 시스템을 당시 상황을 토대로 3가지 솔루션을 분석해봤습니다
하나의 프로젝트 코드에는 두 개의 스파 애플리케이션이 내장되어 있습니다(공식 웹사이트 및 백엔드 시스템)
두 세트의 프로젝트 소스 코드를 분리합니다
한 프로젝트 소스 코드 세트에는 하나의 스파 애플리케이션만 있습니다
생각:
한 세트의 프로젝트 소스 코드에서 하나의 스파 애플리케이션(ui)을 직접 무효화합니다. 코드 사양이 없으면 스타일이 서로를 덮게 됩니다.나중에 유지 관리가 어렵습니다)
만약 두 세트의 소스 코드가 있고 두 개의 포트가 백그라운드에서 열릴 수 있으며 nginx 리버스 프록시를 사용하는 것이 번거로울 수 있고 프런트 엔드 개발도 번거로울 수 있습니다. 결국 두 개의 git 웨어하우스를 유지 관리해야 합니다. 두 세트의 git 온라인 프로세스는 많은 시간을 소비할 수 있습니다.
나는 (무의식적으로) 내 기술에 자신감이 있고 새로운 것을 시도하고 싶다. 요구사항을 분석하는 것은 그리 복잡하지 않다. 하나의 소스 코드 세트에서 여러 단일 페이지 애플리케이션을 사용하는 첫 번째 옵션을 선택했습니다.
이전 다중 페이지 구조 다이어그램
vue spa 템플릿 다운로드
npm install vue-cli -g vue init webpack multiple-vue-amazing
멀티 변환 -페이지 애플리케이션
npm install glob --save-dev
src 폴더 아래의 디렉토리 구조를 수정
Add
/* 这里是添加的部分 ---------------------------- 开始 */ // glob是webpack安装时依赖的一个第三方模块,还模块允许你使用 *等符号, 例如lib/*.js就是获取lib文件夹下的所有js后缀名的文件 var glob = require('glob') // 页面模板 var HtmlWebpackPlugin = require('html-webpack-plugin') // 取得相应的页面路径,因为之前的配置,所以是src文件夹下的pages文件夹 var PAGE_PATH = path.resolve(dirname, '../src/pages') // 用于做相应的merge处理 var merge = require('webpack-merge') //多入口配置 // 通过glob模块读取pages文件夹下的所有对应文件夹下的js后缀文件,如果该文件存在 // 那么就作为入口处理 exports.entries = function () { var entryFiles = glob.sync(PAGE_PATH + '/*/*.js') var map = {} entryFiles.forEach((filePath) => { var filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.')) map[filename] = filePath }) return map } //多页面输出配置 // 与上面的多页面入口配置相同,读取pages文件夹下的对应的html后缀文件,然后放入数组中 exports.htmlPlugin = function () { let entryHtml = glob.sync(PAGE_PATH + '/*/*.html') let arr = [] entryHtml.forEach((filePath) => { let filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.')) let conf = { // 模板来源 template: filePath, // 文件名称 filename: filename + '.html', // 页面模板需要加对应的js脚本,如果不加这行则每个页面都会引入所有的js脚本 chunks: ['manifest', 'vendor', filename], inject: true } if (process.env.NODE_ENV === 'production') { conf = merge(conf, { minify: { removeComments: true, collapseWhitespace: true, removeAttributeQuotes: true }, chunksSortMode: 'dependency' }) } arr.push(new HtmlWebpackPlugin(conf)) }) return arr } /* 这里是添加的部分 ---------------------------- 结束 */ webpack.base.conf.js 文件 /* 修改部分 ---------------- 开始 */ entry: utils.entries(), /* 修改部分 ---------------- 结束 */ webpack.dev.conf.js 文件 /* 注释这个区域的文件 ------------- 开始 */ // new HtmlWebpackPlugin({ // filename: 'index.html', // template: 'index.html', // inject: true // }), /* 注释这个区域的文件 ------------- 结束 */ new FriendlyErrorsPlugin() /* 添加 .concat(utils.htmlPlugin()) ------------------ */ ].concat(utils.htmlPlugin()) webpack.prod.conf.js 文件 /* 注释这个区域的内容 ---------------------- 开始 */ // new HtmlWebpackPlugin({ // filename: config.build.index, // template: 'index.html', // inject: true, // minify: { // removeComments: true, // collapseWhitespace: true, // removeAttributeQuotes: true // // more options: // // https://github.com/kangax/html-minifier#options-quick-reference // }, // // necessary to consistently work with multiple chunks via CommonsChunkPlugin // chunksSortMode: 'dependency' // }), /* 注释这个区域的内容 ---------------------- 结束 */ // copy custom static assets new CopyWebpackPlugin([ { from: path.resolve(dirname, '../static'), to: config.build.assetsSubDirectory, ignore: ['.*'] } ]) /* 该位置添加 .concat(utils.htmlPlugin()) ------------------- */ ].concat(utils.htmlPlugin())
util.js에 타사 UI 라이브러리 소개
npm install element-ui bootstrap-vue --save
다른 페이지에 다른 ui index.js 소개
import BootstrapVue from 'bootstrap-vue' Vue.use(BootstrapVue)
admin.js
import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI)
위의 여러 페이지 구성은 인터넷을 기반으로 하며 인터넷에 있는 아이디어는 대부분 유사하며 구성이 완료된 후에는 문제가 없습니다. 개발하고 한 달 뒤에 공식 홈페이지에서 성능 분석을 해보니 webpack으로 패키징한 Vendor.js의 네트워크 로딩 시간이 유난히 길어서 흰색 화면이 매우 길어지는 것으로 나타났습니다. 첫 화면에서 드디어 -webpack-bundle-analyzer 분석을 통해 결론이 나왔습니다
npm run build --report
vendor.js에는 index.html과 admin.html의 공통 부분이 포함되어 있으므로 이 Vendor 패키지는 크고 중복될 운명
해결책
Vendor가 너무 커서 발생하므로 로딩 속도가 느린 경우 Vendor를 분리하면 됩니다. 제 생각에는 각 페이지에 사용된 타사 코드를 Vendor.js로 추출한 다음, 각 페이지에 사용된 타사 코드를 기존 페이지 인덱스 .html과 같은 자체 Vendor-x.js로 패키징하는 것입니다. , admin.html, Vendor.js, Vendor-index.js, Vendor-admin.js가 최종적으로 패키징됩니다.
webpack.prod.conf.js 파일
new webpack.optimize.CommonsChunkPlugin({ name: 'vendor-admin', chunks: ['vendor'], minChunks: function (module, count) { return ( module.resource && /\.js$/.test(module.resource) && module.resource.indexOf(path.join(dirname, '../node_modules')) === 0 && module.resource.indexOf('element-ui') != -1 ) } }), new webpack.optimize.CommonsChunkPlugin({ name: 'vendor-index', chunks: ['vendor'], minChunks: function (module, count) { return ( module.resource && /\.js$/.test(module.resource) && module.resource.indexOf(path.join(dirname, '../node_modules')) === 0 && module.resource.indexOf('bootstrap-vue') != -1 ) } }),
다시 분석해 보니 모든 것이 괜찮습니다. Vendor.js는 Vendor.js, Vendor-index, Vendor-admin.js
로 분리되어 있습니다.
해결된 줄 알았는데 CommonsChunkPlugin 그런 다음 이를 패키지화하여 index.html과 admin.html에 가져오기(해당 Vendor-xx.js)가 누락되었음을 확인합니다.
Solution
문제는 실제로 HtmlWebpackPlugin의 문제입니다. 아래와 같이util.js 파일
chunksSortMode: function (chunk1, chunk2) { var order1 = chunks.indexOf(chunk1.names[0]) var order2 = chunks.indexOf(chunk2.names[0]) return order1 - order2 },
최종 구현
처럼 원래의 ChunkSortMode: '종속성'을맞춤 함수
구성으로 변경하세요.각 페이지는 자체 청크를 로드합니다
각 페이지에는 서로 다른 매개변수가 있습니다
각 페이지는 공통 청크를 공유할 수 있습니다
브라우저 캐시, 더 나은 성능
그래도 불편하다면 속도가 느린 경우 , gzip 켜두기
Impressions
구성은 아주 간단해 보이지만 개발할 때 오랫동안 고민했기 때문에 CommonsChunkPlugin 과 HtmlWebpackPlugin 을 잘 모르시거나 그냥 사용하시면 됩니다. 다른 타사 구성 테이블은 큰 함정이 될 수 있습니다. 예를 들어 CommonsChunkPlugin은 청크를 지정하지 않습니다. 기본값은 무엇입니까? minChunks의 대부분의 사람들은 숫자 값만 쓸 수 있지만 실제로 자체 정의 함수를 작성하는 방법이 가장 강력합니다. 내 개인적인 경험에 따르면 minChunks 사용자 정의 함수와 결합된 청크를 작성하는 방법은 거의 모든 초자연적인 문제를 해결할 수 있습니다. CommonsChunkPlugin의 이벤트. 이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!
추천 자료:
Vue를 사용하여 카운트다운 버튼을 구현하는 방법Vue를 사용하여 양방향 데이터 바인딩을 작성하는 방법위 내용은 Vue 다중 페이지 개발 및 패키징을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이 AI 지원 프로그래밍 도구는 급속한 AI 개발 단계에서 유용한 AI 지원 프로그래밍 도구를 많이 발굴했습니다. AI 지원 프로그래밍 도구는 개발 효율성을 높이고, 코드 품질을 향상시키며, 버그 발생률을 줄일 수 있습니다. 이는 현대 소프트웨어 개발 프로세스에서 중요한 보조자입니다. 오늘 Dayao는 4가지 AI 지원 프로그래밍 도구(모두 C# 언어 지원)를 공유하겠습니다. 이 도구가 모든 사람에게 도움이 되기를 바랍니다. https://github.com/YSGStudyHards/DotNetGuide1.GitHubCopilotGitHubCopilot은 더 빠르고 적은 노력으로 코드를 작성하는 데 도움이 되는 AI 코딩 도우미이므로 문제 해결과 협업에 더 집중할 수 있습니다. 힘내

세계 최초의 AI 프로그래머 데빈(Devin)이 태어난 지 한 달도 채 안 된 2022년 3월 3일, 프린스턴 대학의 NLP팀은 오픈소스 AI 프로그래머 SWE-에이전트를 개발했습니다. GPT-4 모델을 활용하여 GitHub 리포지토리의 문제를 자동으로 해결합니다. SWE-bench 테스트 세트에서 SWE-agent의 성능은 Devin과 유사하며 평균 93초가 걸리고 문제의 12.29%를 해결합니다. SWE-agent는 전용 터미널과 상호 작용하여 파일 내용을 열고 검색하고, 자동 구문 검사를 사용하고, 특정 줄을 편집하고, 테스트를 작성 및 실행할 수 있습니다. (참고: 위 내용은 원문 내용을 약간 조정한 것이지만 원문의 핵심 정보는 그대로 유지되며 지정된 단어 수 제한을 초과하지 않습니다.) SWE-A

Go 언어 개발 모바일 애플리케이션 튜토리얼 모바일 애플리케이션 시장이 지속적으로 성장함에 따라 점점 더 많은 개발자가 Go 언어를 사용하여 모바일 애플리케이션을 개발하는 방법을 모색하기 시작했습니다. 간단하고 효율적인 프로그래밍 언어인 Go 언어는 모바일 애플리케이션 개발에서도 강력한 잠재력을 보여주었습니다. 이 기사에서는 Go 언어를 사용하여 모바일 애플리케이션을 개발하는 방법을 자세히 소개하고 독자가 빠르게 시작하고 자신의 모바일 애플리케이션 개발을 시작할 수 있도록 특정 코드 예제를 첨부합니다. 1. 준비 시작하기 전에 개발 환경과 도구를 준비해야 합니다. 머리

가장 인기 있는 다섯 가지 Go 언어 라이브러리 요약: Go 언어는 탄생 이후 광범위한 관심과 적용을 받아왔습니다. 새롭게 떠오르는 효율적이고 간결한 프로그래밍 언어인 Go의 급속한 발전은 풍부한 오픈 소스 라이브러리의 지원과 불가분의 관계입니다. 이 기사에서는 인기 있는 Go 언어 라이브러리 5개를 소개합니다. 이러한 라이브러리는 Go 개발에서 중요한 역할을 하며 개발자에게 강력한 기능과 편리한 개발 경험을 제공합니다. 동시에 이러한 라이브러리의 용도와 기능을 더 잘 이해하기 위해 구체적인 코드 예제를 통해 설명하겠습니다.

"CSS를 올바르게 표시하기 위해 Laravel 페이지의 오류를 처리하는 방법, 구체적인 코드 예제가 필요합니다." Laravel 프레임워크를 사용하여 웹 애플리케이션을 개발할 때 페이지가 CSS 스타일을 올바르게 표시하지 못하는 문제에 직면할 때가 있습니다. 비정상적인 스타일을 렌더링하는 페이지입니다. 이 글에서는 Laravel 페이지가 CSS를 올바르게 표시하지 못하는 문제를 해결하는 몇 가지 방법을 소개하고 개발자가 이 일반적인 문제를 해결하는 데 도움이 되는 특정 코드 예제를 제공합니다. 1. 파일 경로를 확인하세요. 먼저 CSS 파일의 경로를 확인하세요.

제목: 3초 만에 페이지 점프 구현 방법: PHP 프로그래밍 가이드 웹 개발에서 페이지 점프는 일반적으로 HTML이나 JavaScript 방식에서 페이지로 점프하기 위해 메타 태그를 사용합니다. 그러나 일부 특정 경우에는 서버 측에서 페이지 점프를 수행해야 합니다. 이 기사에서는 PHP 프로그래밍을 사용하여 3초 내에 지정된 페이지로 자동으로 이동하는 기능을 구현하는 방법을 소개하고 구체적인 코드 예제도 제공합니다. PHP를 사용하는 페이지 점프의 기본 원리는 일종의 것입니다.

VSCode 기능에 대한 자세한 설명: 작업 효율성을 높이는 데 어떻게 도움이 되나요? 소프트웨어 개발 산업이 지속적으로 발전함에 따라 개발자의 작업 효율성과 코드 품질 추구는 작업에서 중요한 목표가 되었습니다. 이 과정에서 코드 편집기의 선택은 중요한 결정이 됩니다. 많은 편집기 중에서 Visual Studio Code(줄여서 VSCode)는 강력한 기능과 유연한 확장성으로 대다수 개발자에게 사랑을 받고 있습니다. 이 기사에서는 VSCode의 일부 기능을 자세히 소개하고 논의합니다.

"VSCode 이해: 이 도구는 어떤 용도로 사용됩니까?" 》프로그래머로서 초보자이든 숙련된 개발자이든 코드 편집 도구를 사용하지 않으면 할 수 없습니다. 많은 편집 도구 중에서 Visual Studio Code(약칭 VSCode)는 가볍고 강력한 오픈 소스 코드 편집기로 개발자들 사이에서 매우 인기가 높습니다. 그렇다면 VSCode는 정확히 어떤 용도로 사용되나요? 이 기사에서는 VSCode의 기능과 사용법을 자세히 살펴보고 독자에게 도움이 되는 구체적인 코드 예제를 제공합니다.
