vue-cli3.0 平常優化

1.項目第三方庫 cdn引入

使用cdn資源主要是爲了減少打包文件體積css

vue.config.js 中html

// 是否爲生產環境
const isProduction = process.env.NODE_ENV !== 'development'
// 本地環境是否須要使用cdn
const devNeedCdn = false

// cdn連接
const cdn = {
  // cdn:模塊名稱和模塊做用域命名(對應window裏面掛載的變量名稱)
  externals: {
    vue: 'Vue',
    // vuex: 'Vuex',
    'vue-router': 'VueRouter',
    axios: 'axios',
    vant: 'vant',
  },
  // cdn的css連接
  css: [
    'https://cdn.jsdelivr.net/npm/vant@2.9/lib/index.css',
  ],
  // cdn的js連接
  js: [
    'https://cdn.staticfile.org/vue/2.6.10/vue.min.js',
    // 'https://cdn.staticfile.org/vuex/3.0.1/vuex.min.js',
    'https://cdn.staticfile.org/vue-router/3.0.3/vue-router.min.js',
    'https://cdn.bootcss.com/axios/0.19.2/axios.min.js',
    'https://cdn.jsdelivr.net/npm/vant@2.12/lib/vant.min.js',
    // 'https://cdn.bootcss.com/moment.js/2.24.0/moment.min.js',
    // 'https://cdn.bootcss.com/echarts/3.7.1/echarts.min.js'
  ]
}

module.exports = {
    chainWebpack:config => {
        
      // 配置cdn引入
      config.plugin('html').tap(args => {
        args[0].cdn = cdn
        return args
      })
        
    }
    configureWebpack:config => {
    // 用cdn方式引入,則構建時要忽略相關資源
    if (isProduction || devNeedCdn) config.externals = cdn.externals
}

pulic / index.htmlvue

favicon.ico"/>

    
    "/>
    
      
    
    " cdata_tag="script" _ue_custom_node_="true">

2.將每一個依賴包打包成單獨的js/css文件

vue.config.jsnode

module.exports = {
      chainWebpack: config => {
          
        // 將每一個依賴包打包成單獨的js文件
          let optimization = {
              runtimeChunk: 'single',
              splitChunks: {
                  chunks: 'all',
                  maxInitialRequests: Infinity,
                  minSize: 20000, // 依賴包超過20000bit將被單獨打包
                  cacheGroups: {
                      vendor: {
                          test: /[\\/]node_modules[\\/]/,
                          name (module) {
                              // get the name. E.g. node_modules/packageName/not/this/part.js
                              // or node_modules/packageName
                              const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]
                              // npm package names are URL-safe, but some servers don't like @ symbols
                              return `npm.${packageName.replace('@', '')}`
                          }
                      }
                  }
              }
          }
          Object.assign(config, {
              optimization
          })

          Object.assign(config, {
              output:{
                  ...config.output,
                  filename: `js/[name].[chunkhash].${version}.js`,
chunkFilename: `js/[name].[chunkhash].${version}.js`
},
});

3.項目自動引入 第三方插件樣式 去掉   使用cdn引入樣式

babel.config.js中ios

//style  true 會自動引入vant css樣式  打包的時候會一塊兒打包到 第三方的css樣式中
//  開發時 引用配置    
module.exports = {
  presets: ['@vue/cli-plugin-babel/preset'],
  plugins: [
    [
      'import',
      { libraryName: 'vant', libraryDirectory: 'es', style: false },
      'vant'
    ]
  ]
};

vant 在使用cdn引入時  main.js 入口文件須要改造vue-router

//去掉vant引入
//import vant from 'vant'

// 經過 CDN 引入時不會自動註冊 Lazyload 組件
// 能夠經過下面的方式手動註冊
Vue.use(vant.Row);
Vue.use(vant.Col);
Vue.use(vant.Icon);
Vue.use(vant.Cell);

4.定義文件夾的縮寫路徑

vue.config.jsvuex

const path = require('path')

function resolve (dir) {
  return path.join(__dirname, dir)
}

module.exports = {
    
    chainWebpack:config => {
        
         // 定義文件夾的路徑
    	config.resolve.alias
          .set('@', resolve('src'))
          .set('@st', resolve('static'))	
        
    }
}

5.移除打包後文件的預加載prefetch/preload

vue.config.jsnpm

module.exports = {
    chainWebpack:config=>{
        // production 生產環境   development  開發環境
        if (process.env.NODE_ENV === 'production') {
            // 爲生產環境修改配置...
            // 移除 prefetch 插件
            config.plugins.delete("prefetch");
            // 移除 preload 插件
            config.plugins.delete('preload');
            // 壓縮代碼
            config.optimization.minimize(true);
            // 分割代碼
            // config.optimization.splitChunks({
            //   chunks: 'all',
            // })
        }
	}
}

preload 是告訴瀏覽器頁面一定須要的資源,瀏覽器必定會加載這些資源axios

prefetch 是告訴瀏覽器頁面可能須要的資源,瀏覽器不必定會加載這些資源瀏覽器

6.不生成相應的  map文件

module.exports = { 
	productionSourceMap: false,
}

//productionSourceMap控制是否在生產環境下生成map文件,
//而devtool是開發調試的配置,若是你配置成source-map,那就會生成這個文件,配置成false就好了。

若是不生效,依然會有map文件生成

檢查configureWebpack配置中的devtool選項

module.exports = { 
    configureWebpack(config){
        config.devtool=config.mode==="production"?false:"source-map";
    }
}

map文件的做用在於:項目打包後,代碼都是通過壓縮加密的,若是運行時報錯,輸出的錯誤信息沒法準確得知是哪裏的代碼報錯。也就是說map文件至關因而查看源碼的一個東西。若是不須要定位問題,而且不想被看到源碼,就把productionSourceMap 置爲false,既能夠減小包大小,也能夠加密源碼

相關文章
相關標籤/搜索