English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spiegazione dettagliata di vue-cli: accelerazione e ottimizzazione del build di webpack3

Prefazione

Con la globalizzazione di vue, sempre più framework di componenti di vue sono perfetti, dai primi element-ui a vux, iview e altri progetti di alta qualità, utilizzare vue per la costruzione frontend è diventato un'attività di ingegnerizzazione, modularizzazione e agilità

In questo contesto, molte persone scelgono di utilizzare il template di inizializzazione del progetto ufficiale di vue-cli, quindi sviluppano e costruiscono attraverso l'introduzione di framework e strumenti di terze parti, anche io sono molto a favore di questo metodo. Tuttavia, il template di progetto inizializzato da vue-cli è rivolto a tutti gli sviluppatori e deve fare compromessi in termini di compatibilità. Molte persone hanno cercato articoli di ottimizzazione della costruzione di webpack, ma molti di essi sono troppo vecchi o non rigorosi

Questo articolo desidera bilanciare tra l'ottimizzazione del tempo e l'aumento delle prestazioni di costruzione, ovvero spendere il minor tempo possibile per apportare il minor numero di modifiche al template ufficiale, guadagnando il maggior aumento delle prestazioni di costruzione

Pensiero

Nelle prime versioni di vue-cli e dell'era webpack2, in rete si diffondono le seguenti configurazioni ottimizzate, ma le nuove versioni di vue-cli e webpack3 non necessitano più di esse

  1. Utilizzare ParallelUglifyPlugin per sostituire UglifyPlugin (la nuova versione di UglifyPlugin supporta e ha già abilitato il costruzione parallela multithread, quindi questa fase non è necessaria)
  2. Abilitare il Scope Hoisting di webpack3 (la nuova versione di vue-cli ha configurato webpack3 e ha già abilitato questa configurazione per impostazione predefinita)
  3. Utilizzare alias (la nuova versione di vue-cli ha già eseguito questa operazione)
  4. Configurare CommonsChunkPlugin per estrarre il codice comune (la nuova versione di vue-cli ha già eseguito questa operazione)

Per le nuove versioni di vue-cli e webpack3, la configurazione semplice di seguito può migliorare la velocità di costruzione di almeno il doppio

  1. Riferimento richiesto
  2. Abilitare la costruzione multicore di happypack per il progetto
  3. Modificare la configurazione di source-map
  4. Abilitare la precompilazione dei file delle librerie con DllPlugin e DllReferencePlugin

Pratica

1、Riferimento richiesto

1.1 quasi tutti i framework di componenti di terze parti offrono un modo di riferimento richiesto per i componenti, prendendo iview come esempio, attraverso l'aiuto di pluginbabel-plugin-import È possibile caricare i componenti a richieste specifiche, ridurre la dimensione dei file e modificare semplicemente il file .babelrc

npm install babel-plugin-import --save-dev
// .babelrc
{
 "plugins": [["import", {
 "libraryName": "iview",
 "libraryDirectory": "src/components"
 }]]
}

1.2 Poi, introducendo i componenti a richieste specifiche, è possibile ridurre la dimensione del file

import { Button } from 'iview'
Vue.component('Table', Table)

2、Abilitare la costruzione multicore di happypack per il progetto

Dopo l'installazione di happypack, modificare il file /build/webpack.base.conf.js

npm install happypack --save-dev
// /build/webpack.base.conf.js
const HappyPack = require('happypack')
const os = require('os')
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length })
// 增加 HappyPack 插件
plugins: [
 new HappyPack({
  id: 'happy-babel-js',
  loaders: ['babel-loader?cacheDirectory=true'],
  threadPool: happyThreadPool,
 )
 ]
// 修改引入 loader
{
 test: /\.js$/,
 // loader: 'babel-loader',
 loader: 'happypack.loader?id=happy-babel-js', // 增加新的 HappyPack 构建loader
 include: [resolve('src'), resolve('test')]
}

3、修改 source-map 配置

3.1 首先修改 /config/index.js 文件

// /config/index.js
dev 环境:devtool: 'eval'(最快速度)
prod 环境:productionSourceMap: false(关闭 source-map)

3.2 然后修改 /src/main.js 文件,关闭生产环境的调试信息

// /src/main.js
const isDebug_mode = process.env.NODE_ENV !== 'production'
Vue.config.debug = isDebug_mode
Vue.config.devtools = isDebug_mode
Vue.config.productionTip = isDebug_mode

4、启用 DllPlugin 和 DllReferencePlugin 预编译库文件

这是最复杂也是提升效果最明显的一步,原理是将第三方库文件单独编译打包一次,以后的构建都不需要再编译打包第三方库

4.1 添加 build/webpack.dll.config.js 文件,并在其中配置需要单独DLL化的模块

const path = require("path")
const webpack = require("webpack")
module.exports = {
 // 你想要打包的模块的数组
 entry: {
  vendor: ['vue/dist/vue.esm.js', 'axios', 'vue-router', 'iview']
 },
 output: {
  path: path.join(__dirname, '../static/js'), // Posizione di output dei file dopo il packaging
  filename: '[name].dll.js',
  library: '[name]_library'
 },
 plugins: [
  new webpack.DllPlugin({
   path: path.join(__dirname, '.', '[name]-manifest.json'),
   name: '[name]_library',
   context: __dirname
  }),
  // Comprimi i file di pacchetto
  new webpack.optimize.UglifyJsPlugin({
   compress: {
    warnings: false
   }
  )
 ]
}

4.2 Aggiungi i plugin seguenti in build/webpack.dev.conf.js e build/webpack.prod.conf.js

new webpack.DllReferencePlugin({
  context: __dirname,
  manifest: require('./vendor-manifest.json')
)

4.3 Aggiungi il comando in /package.json

"dll": "webpack --config ./build/webpack.dll.config.js"

4.4 Aggiungi l'introduzione DLL JS in /index.html (deve essere introdotto prima)

<script src="/static/js/vendor.dll.js"></script>

4.5 Esegui la costruzione

npm run dll (questo passaggio genererà build/vendor-manifest.json e static/js/vendor.dll.js)
npm run dev o npm run build

Postilla

Dopo aver completato questi quattro grandi passaggi, abbiamo ottimizzato e migliorato la costruzione del progetto di modello di vue-cli, anche se non è ancora considerato semplice, ma questo è già l'ottimizzazione più semplice possibile, ci sono molte altre tecniche speciali che non sono state espanso, perché penso che un'eccessiva configurazione di ottimizzazione non abbia molto senso, anzi, potrebbe portare troppa complessità e ridondanza al progetto

Il risultato della costruzione testato delle configurazioni è passato da 13 secondi a circa 6 secondi, e il部署 in tempo reale è di livello millisecondo

Soprattutto, la configurazione più semplificata può essere facilmente reimpostata e utilizzata dopo l'aggiornamento del vue-cli e webpack alla nuova versione, e dopo aver configurato una volta, è sufficiente 5 minuti per reimpostare la configurazione. Immagina di spendere 5 minuti per modificare la configurazione, e di ottenere un aumento della velocità di costruzione di oltre il doppio, non è un po' emozionante? :)

Ecco un altro discorso, penso che l'aggiornamento da webpack2 a webpack3 sia stato piuttosto deludente, perché non ha risolto il problema della configurazione troppo complessa alla radice. Come prodotto che mira a coprire la costruzione di tutti i progetti web del mondo, dovrebbe considerare più l'usabilità e l'umanizzazione

Ogni volta che guardo i vari .babelrc, .postcssrc.js... e altri file .conf all'interno del progetto webpack, e persino vari file main, index, app, non posso fare a meno di lamentarmi, perché la costruzione front-end è diventata così, con decine di file di configurazione in un progetto di progetto, è davvero necessario? Credevo che webpack3 avrebbe reso tutto più semplice, ma non è così, tuttavia, dato che non possiamo cambiare nulla al momento, tutto ciò che possiamo fare è cercare di comprendere i principi al meglio, e cercare di semplificare/ottimizzare al massimo

Questo è tutto il contenuto dell'articolo, spero che sia utile per la tua apprendimento, e ti prego di supportare e urlare le guide.

Dichiarazione: il contenuto di questo articolo è stato raccolto da Internet, il copyright è di proprietà del rispettivo proprietario, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene il diritto di proprietà, non è stato editato manualmente e non assume responsabilità per le relative responsabilità legali. Se trovi contenuti sospetti di copyright, ti preghiamo di inviare una email a notice#oldtoolbag.com (sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, questo sito eliminerà immediatamente i contenuti sospetti di copyright.

Ti potrebbe interessare