vue webpack 포장 최적화 조작 기법
웹 팩 은 react 프로젝트 에 표 시 된 포장 도구 로 NPM 과 조합 하여 관리 모듈 을 사용 하 는 것 이 매우 편리 합 니 다.
webapck 은 모든 정적 자원 을 하나의 module 로 보고 webpack 을 통 해 이 module 들 을 하나의 bundle 에 구성 하여 현재 페이지 에 bundle.js 를 도입 하여 모든 정적 자원 의 로드 를 실현 합 니 다.
말 이 많 지 않 으 니 바로 본문 을 시작 합 시다
먼저 프로젝트 의 디 렉 터 리 구 조 를 보 여 드 리 겠 습 니 다.
바로 정상 적 인 프로젝트 구조 입 니 다.간단하게 말씀 드 리 겠 습 니 다.
프로젝트 포장 시간 이 긴 이 유 는 프로젝트 전체 가 비교적 크 고 복잡 하 며 구성 요소 에 의존 하기 전에 분리 하 는 것 이 합 리 적 이지 않 기 때문이다.
이 세 가지 문제 에 대해 우 리 는 아래 의 이 몇 가지 측면 에 대해 처리 할 수 있다.
전체적인 사고 가 생 겼 습 니 다.그러면 시작 하면 됩 니 다.웹 팩 문서 에 가서 DllPlugin 이 있 습 니 다.이 플러그 인 은 바로 우리 가 문 제 를 해결 하 는 관건 입 니 다.다음은 제 웹 팩.dll.config 의 코드 입 니 다.
var path = require("path");
var webpack = require("webpack");
function resolve (dir) {
return path.join(__dirname, '..', dir)
}
module.exports = {
//
entry: {
vendor: ['vue', 'lodash', 'vuex', 'axios', 'vue-router', 'iview', 'element-ui',
'echarts','xlsx','jquery','vue-fullcalendar','vue-cookie','handsontable']
},
output: {
path: path.join(__dirname, '../dist/vendor-dll-js'), //
filename: '[name].dll.js',
library: '[name]_library'
// vendor.dll.js 。
// DllPlugin name ,
// webpack.DllPlugin `name: '[name]_library',` 。
},
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'),
}
},
plugins: [
new webpack.DllPlugin({
path: path.join(__dirname, '.', '[name]-manifest.json'),
name: '[name]_library',
context: __dirname
}),
// ,
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
})
]
};
프로젝트 에서 재 활용 성 이 있 는 패 키 지 를 추출 하여 vendor 배열 에 넣 은 다음 에 아래 output 에서 압축 출력 된 파일 경 로 를 정의 한 다음 resolve 에 분석 파 라 메 터 를 설정 하고 마지막 으로 사용 하 는 DllPlugin 플러그 인 을 정의 해 야 합 니 다.UglifyJSPlugin 은 js 를 압축 하 는 플러그 인 입 니 다.Dllplugin 에 있 는 path 는 하 나 를 출력 합 니 다
vendor-manifest.json
.이것 은 관련 id 를 만 드 는 것 입 니 다.포장 할 때 포장 되 지 않 기 때문에 static 에 넣 지 않 고 실행 할 필요 가 없습니다 webpack -p --progress --config build/webpack.dll.conf.js
성공 하면 static 에 dll.vendor.js 가 있 습 니 다.루트 디 렉 터 리 에vendor.manifest.json
각각 열 어 보면 라 이브 러 리 에 의존 하 는 소스 코드 와 일치 하 는 id 를 볼 수 있 습 니 다.ok,여기까지.의존 라 이브 러 리 에서 벗 어 나 는 일이 완성 되 었 습 니 다.그러면 다음 문 제 는 어떻게 인용 하 느 냐 하 는 것 입 니 다.어떻게 dev 와 build 에서 뛰 느 냐 하 는 것 입 니 다.
여기 서 dll 과
commonsChunk
개념 상의 차 이 를 보완 했다.comons Chunk 가 느 리 고 큰 이 유 는 run 할 때마다 포장 을 한 번 하기 때문이다.실제로 우 리 는 우리 가 인용 한 의존 라 이브 러 리 를 계속 업데이트 하지 않 기 때문에 dll 의 방법 은 의존 라 이브 러 리 를 미리 포장 한 다음 에 매번 수정 하 는 js 에 만 포장 하 는 것 과 같다.위의 절 차 를 계속 진행 하려 면 생 성 된 json 파일 에 따라 webpack.base.config 파일 을 수정 해 야 합 니 다.
const manifest = require('../vendor-manifest.json')
......
plugins: [
new webpack.DllReferencePlugin({
manifest
})
]
그리고 index.html 를 열 고 밑 에<script src="./static/dll.vendor.js"></script>
를 추가 합 니 다.실행 해 보 세 요
npm run build
.같이 정상 이면 당신 의 조작 이 정확 하 다 는 것 을 의미 합 니 다.업그레이드 처리
이로써 최 적 화 된 문 제 는 기본적으로 해결 되 었 지만 처리 과정 에서 복사 붙 여 넣 기 를 해 야 하고 index.html 파일 을 조작 해 야 합 니 다.프로젝트 에 익숙 하지 않 은 사람 이 개발 프로젝트 를 진행 하면 작은 문제 가 발생 하기 때문에 저 는 계속 연구 하기 로 결 정 했 습 니 다.
사고방식 은 위의 사고방식 이다.우리 가 다음 에 해 야 할 조작 은 바로 이전의 처리 와 최적화 하고 파일 설정 과 명령 을 통 해 우리 가 원 하 는 효 과 를 실현 하 는 것 이다.
우선 위 웹 팩.dll.config 파일 에 있 는 entry 설정 항목 을 꺼 내 config 폴 더 아래 dll.js 를 새로 만 듭 니 다.
module.exports = {
entry: {
// : , ( )
ui: ['iview', 'element-ui'],
tool: ['lodash', 'jquery', 'axios', 'vue-fullcalendar'],
vue: ['vue', 'vuex', 'vue-router', 'vue-cookie'],
xlsx: ['xlsx'],
echarts: ['echarts'],
other: ['handsontable'],
},
outFile: '../static/dll'
};
이 안 은 사실 우리 가 처음에 쓴 entry 의 설정 항목 입 니 다.이 js 에 따라 포장 한 파일 은 순서 가 있 습 니 다.바로 제 가 정리 한 것 입 니 다.여기 서 의존 순 서 는 대상 이 위 에서 아래로 의존 하고 배열 은 오른쪽 에서 왼쪽으로 의존 해 야 합 니 다.(서로 의존 하지 않 으 면 순 서 를 무시 할 수 있 습 니 다)
이 순서대로 쓰 지 않 으 면 오류 에 의존 하 는 문제 가 생 길 수 있 습 니 다!!!
그리고 output 에서 설정 을 다시 진행 합 니 다:
output: {
path: path.join(__dirname, dllConfig.outFile), //
filename: '[name].dll.[chunkhash].js',
library: '[name]_library'
// DllPlugin name ,
// webpack.DllPlugin `name: '[name]_library',` 。
},
이렇게 하면webpack -p --progress --config build/webpack.dll.conf.js
명령 을 실행 할 때 다음 과 같이 생 성 됩 니 다.파일 뒤에 있 는 hash 를 보고 어리둥절 한 표정 을 짓 는 거 아니 야?어 떡 해?복사 붙 여 넣 을 방법 이 없어!!우리 의 목적 은 복사 붙 여 넣 기 를 하지 않 는 것 이 아 닙 니까?진지 한 얼굴- -)
명령 을 실행 한 후 복사 붙 여 넣 기 동작 을 하지 않 으 려 면 웹 팩 의 HtmlWebpackPlugin 플러그 인 을 사용 해 야 합 니 다.
plugins 에 Html WebpackPlugin 을 설정 합 니 다.
new HtmlWebpackPlugin({
filename: path.join(__dirname, '../', config.dev.index),
template: 'index.ejs',
inject: false
}),
그리고 루트 디 렉 터 리 에 index.ejs 모드ejsGitHub 주소를 추가 합 니 다.index.ejs 의 코드 는 다음 과 같 습 니 다.
<body>
<div id="app"></div>
<!-- dll files will be auto injected -->
<% for (var chunk in htmlWebpackPlugin.files.chunks) { %><script type="text/javascript" src="/<%= htmlWebpackPlugin.files.chunks[chunk].entry %>"></script>
<% } %>
<!-- built files will be auto injected -->
</body>
마지막 으로 config 폴 더 에 있 는 index.js 를 수정 해 야 합 니 다.dev 에 추가:index: 'index.html'
,프로젝트 는 dev 명령 이나 build 명령 을 실행 하기 전에 먼저 실행 해 야 합 니 다.
webpack -p --progress --config build/webpack.dll.conf.js
dll 명령 이 끝 난 후에 다른 작업 을 수행 하면 완벽 하 게 놀 수 있 습 니 다:blush:총결산
이로써 코드 포장 최적화 의 전체 과정 은 기본적으로 끝 났 습 니 다.테스트 를 해 보면 15 분 정도 에 포장 을 완성 할 수 있 습 니 다.이전 포장 보다 10 분 가까이 빨 라 졌 습 니 다.매우 성공 적 인 시도 라 고 할 수 있 습 니 다!!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Fastapi websocket 및 vue 3(Composition API)1부: FastAPI virtualenv 만들기(선택 사항) FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오. 생성main.py 파일 및 실행 - 브라우저에서 이 링크 열기http://127.0.0.1:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.