Vue 포장 부피 최적화 방안 소결

Vue-cli 3 포장 부피 최적화 방안
선언:
회사 프로젝트 가 완 성 된 후에 포장 이 완 성 된 후에 1.18 메가바이트 가 되 었 다.사실은 괜 찮 은 것 같 지만 최적화 할 수 있 는 부분 이 있다.우리 에 게 더욱 정교 하 게(있 는 지 없 는 지*수의)정신 을 가 진 다음 에 최적화 시 키 면 프로젝트 에 먼저 설치 할 수 있다webpack-bundle-analyzer각 파일 의 크기 를 볼 수 있다.

npm install webpack-bundle-analyzer -save-dev
vue.config.js 에서 설정 하기

module.exports = {
 chainWebpack: config => {
  config
  .plugin('webpack-bundle-analyzer')
  .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
 }
}
npm run build 또는 npm run serve 를 실행 하면 파일 크기 를 분석 하 는 화려 한 인터페이스 가 나타 납 니 다.

분석 하 다.
최적화 하기 전에 vendor~app.xxxx.js 는 1.18MB 가 있 습 니 다.각 bundle 크기 를 보고 맞 춤 형 으로 최적화 할 수 있 습 니 다.

최적화 하 다.
CDN 로드
vue,vue-router,vuex,axios 등 은 생산 환경 에서 CDN 으로 불 러 올 수 있 습 니 다.

const externals = {
 'vue': 'Vue',
 'vue-router': 'VueRouter',
 'vuex': 'Vuex',
 'axios': 'axios'
}
const cdn = {
 css: [],
 js: [
 'https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js',
 'https://cdn.jsdelivr.net/npm/[email protected]/dist/vue-router.min.js',
 'https://cdn.jsdelivr.net/npm/[email protected]/dist/vuex.min.js',
 'https://cdn.jsdelivr.net/npm/[email protected]/dist/axios.min.js',
 ]
}

module.exports = {
 chainWebpack: config => {
  config
  .plugin('webpack-bundle-analyzer')
  .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
  config.plugin('html').tap(args => {
  if (process.env.NODE_ENV === 'production') {
  args[0].cdn = cdn
  }
  return args
 })
 },
configureWebpack: config => {
 if (process.env.NODE_ENV === 'production') {
  return {
   externals: externals,
  };
  }
 },
}
이어서 pubilc/index.html 파일 을 수정 합 니 다.

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width,initial-scale=1.0">
 <link rel="icon" href="<%= BASE_URL %>favicon.png" rel="external nofollow" >
 <!--   CDN CSS   -->
 <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %>
 <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="external nofollow" rel="external nofollow" rel="preload" as="style">
 <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="external nofollow" rel="external nofollow" rel="stylesheet">
 <% } %>
 <!--   CDN JS   -->
 <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %>
 <link href="<%= htmlWebpackPlugin.options.cdn.js[i] %>" rel="external nofollow" rel="preload" as="script">
 <% } %>
 <title>    </title>
</head>
<body>
 <noscript>
 <strong></strong>
 </noscript>
 <div id="app"></div>
 <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %>
 <script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script>
 <% } %>
</body>
</html>
루트 게 으 름 로드
포장 응용 프로그램 을 사용 할 때 자 바스 크 립 트 패 키 지 는 매우 커 져 서 페이지 로 딩 에 영향 을 줍 니 다.만약 에 우리 가 경로 에 접근 할 때 이 모듈 을 불 러 오 면 매우 효율 적 이 고 정적 도입 방식 을 동적 도입 방식 으로 바 꿉 니 다.

import ComponentA from '../page/components/ComponentA';
routeList = [
 {
  path: '/comA',
  component: ComponentA
 },
]

//  
routeList = [
 {
  path: '/comA',
  component: () => import('../page/components/ComponentA')
 },
]
제 프로젝트 는 처음부터 게 으 른 로 딩 을 사 용 했 기 때문에 포장 파일 에 서 는 부피 크기 의 변 화 를 볼 수 없 지만 300 k 정도 의 크기 가 줄 어 들 것 입 니 다.
vue cli 3 에서 우 리 는 수 동 으로 제거 해 야 합 니 다.
바로 첫 화면 을 불 러 올 때 경로 파일 을 한꺼번에 다운로드 합 니 다.이 로 인해 첫 화면 에 요청 내용 이 많아 지고 첫 화면 로 딩 이 느 려 집 니 다.다음 과 같이 수정 합 니 다.

module.exports = {
 chainWebpack: config => {
  config
  .plugin('webpack-bundle-analyzer')
  .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
  config.plugin('html').tap(args => {
  if (process.env.NODE_ENV === 'production') {
   args[0].cdn = cdn
  }
  return args
  })
  //    prefetch   
  config.plugins.delete('prefetch')
  //    preload   
  config.plugins.delete('preload');
 },
 configureWebpack: config => {
  if (process.env.NODE_ENV === 'production') {
   return {
   externals: externals,
   };
  }
 },
}
element-ui 필요 에 따라 불 러 오기
element-ui/lib 이 가방 을 보면 가방 크기 의 3 분 의 2,554 k 를 차지 하고 가방 도 700 여 k 를 차지 하기 때문에 element-ui 를 필요 에 따라 불 러 오 면 부 피 를 줄 일 수 있 습 니 다.필요 에 따라 불 러 오 는 것 은 말 하지 않 겠 습 니 다.모두~:stuckout_tongue_closed_eyes:
하지만 babel.config.js 파일 에 추가 해 야 합 니 다(vue cli 3 에 babel-plugin-component 를 설치 해 야 합 니 다)

module.exports = {
 presets: ['@vue/app'],

 //   ~
 plugins: [
  [
  'component',
  {
   libraryName: 'element-ui',
   styleLibraryName: 'theme-chalk'
  }
  ]
 ]
};
gzip
compression-webpack-plugin 설치

nmp i compression-webpack-plugin -D
vue.config.js 에 도입

const CompressionPlugin = require('compression-webpack-plugin');

module.exports = {
 chainWebpack: config => {
  config
  .plugin('webpack-bundle-analyzer')
  .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
   config.plugin('html').tap(args => {
   if (process.env.NODE_ENV === 'production') {
    args[0].cdn = cdn
   }
   return args
  })
  //    prefetch   
  config.plugins.delete('prefetch')
  //    preload   
  config.plugins.delete('preload');
  },
  configureWebpack: config => {
  if (process.env.NODE_ENV === 'production') {
   return {
   externals: externals,
   plugins: [
    //gzip  
    new CompressionPlugin({
    test: /\.jsO¨E92E.html|\.htmlO¨E92E.html|.\css/, //     
    threshold: 10240, //   10k     
    deleteOriginalAssets: false //      
    })
   ],
   performance: {
    hints: false
   }
   };
  }
 },
}
위의 그림 에서 볼 수 있 듯 이 gzip 압축 을 한 후의 파일 이 가장 큰 것 도 140 k 밖 에 없다.
하지만 서버 에서 설정 해 야 합 니 다.
scss 파일 도입
우 리 는 보통 scss 파일 을 추출 하고 공유 스타일,테마 등 을 사용 한 다음 에 필요 한 모든 구성 요소 에 도입 하 는 것 이 번 거 로 워 집 니 다.우 리 는 scss-loader 를 통 해 예비 처 리 를 할 수 있 습 니 다.
예 를 들 어 resetTable.scss 파일 이 있 습 니 다.vue.config.js 에 도입 할 수 있 습 니 다.

module.exports = {
 chainWebpack: config => {
  config
  .plugin('webpack-bundle-analyzer')
  .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
  config.plugin('html').tap(args => {
   if (process.env.NODE_ENV === 'production') {
   args[0].cdn = cdn
   }
   return args
  })
  //    prefetch   
  config.plugins.delete('prefetch')
  //    preload   
  config.plugins.delete('preload');
  },
 configureWebpack: config => {
  if (process.env.NODE_ENV === 'production') {
   return {
   externals: externals,
   plugins: [
    //gzip  
    new CompressionPlugin({
    test: /\.jsO¨E92E.html|\.htmlO¨E92E.html|.\css/, //     
    threshold: 10240, //   10k     
    deleteOriginalAssets: false //      
    })
   ],
   performance: {
    hints: false
   }
  };
  }
 },
 // scss  
 css: {
  loaderOptions: {
  sass: {
   //     assets/commcss    
   data: '@import "@assets/commcss/resetTable.scss";'
  }
  },
 },
}
위 에 있 는 이 그림 은 완전한 vue.config.js 설정 입 니 다.
요약:
이상 은 바로 현재 내 가 프로젝트 에서 최적화 한 점 이지 만 분명 다른 최적화 부분 이 있어 서로 토론 할 수 있다.
Vue 포장 부피 최적화 방안 의 소결 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Vue 포장 부피 최적화 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기