Rumah > hujung hadapan web > View.js > Panduan pengoptimuman keluaran pembungkusan Vue-cli dan Webpack

Panduan pengoptimuman keluaran pembungkusan Vue-cli dan Webpack

WBOY
Lepaskan: 2023-06-09 16:05:45
asal
1061 orang telah melayarinya

Dengan pembangunan berterusan teknologi bahagian hadapan Web, Vue.js telah menjadi rangka kerja bahagian hadapan yang sangat popular. Vue-cli dan Webpack dalam Vue.js juga telah menjadi alat sokongan yang diperlukan sebagai alat binaan. Apabila membangunkan projek, kami biasanya menggunakan Vue-cli untuk membina rangka kerja aplikasi dan menggunakan Webpack untuk membungkus dan menerbitkan projek. Walau bagaimanapun, dalam proses pembungkusan dan pengeluaran projek besar, disebabkan saiz projek yang besar, masalah seperti kelajuan penyusunan yang perlahan, jumlah pembungkusan yang besar, dan kelajuan akses yang perlahan mungkin berlaku untuk mengelakkan masalah ini, artikel ini akan diperkenalkan Pembungkusan Vue-cli dan Webpack Keluarkan panduan pengoptimuman untuk membantu pembangun mengoptimumkan kesan keluaran projek besar dengan lebih baik.

1. Pengoptimuman projek Vue-cli

  1. Memperkenalkan komponen pihak ketiga mengikut keperluan

Semasa proses pembangunan, kami biasanya menggunakan jQuery, Bootstrap, Perpustakaan pihak ketiga seperti Echarts, tetapi memperkenalkan keseluruhan perpustakaan boleh menyebabkan masalah seperti saiz pembungkusan yang berlebihan dan kelajuan akses yang perlahan. Oleh itu, kita boleh menggunakan pemalam babel-plugin-component untuk memperkenalkan atas permintaan.

ditetapkan dalam babel.config.js:

plugins: [
  ['component', {
    libraryName: 'element-ui',
    styleLibraryName: 'theme-chalk'
  }]
]
Salin selepas log masuk

Mengambil Element-ui sebagai contoh, menggunakan pemalam untuk memperkenalkan perpustakaan atas permintaan boleh mengurangkan jumlah pembungkusan.

  1. Mengkonfigurasi sifat Webpack

Kami boleh mengubah suai sifat konfigurasi Webpack dengan mengubah suai fail vue.config.js. Berikut ialah beberapa kaedah konfigurasi atribut Webpack yang biasa digunakan:

// 修改输出文件名格式
output: {
  filename: '[name].[hash].js'
}

// 修改 publicPath
publicPath: process.env.NODE_ENV === 'production' ?
  '/production-sub-path/' : '/'

// 压缩代码
uglifyOptions: {
  compress: {
    warnings: false,
    drop_console: true,
    drop_debugger: true,
    dead_code: true
  }
}

// 配置 externals,将大型的第三方库从打包代码中剥离
externals: {
  'vue': 'Vue',
  'jquery': 'jQuery',
  'bootstrap': 'Bootstrap',
  'echarts': 'echarts',
  'moment': 'moment'
}

// 使用 Webpack-bundle-analyzer 查看打包后的各个模块的大小
configureWebpack: {
  plugins: [
    new BundleAnalyzerPlugin()
  ]
}
Salin selepas log masuk

2 Pengoptimuman Webpack

  1. Menggunakan binaan berbilang benang

Menggunakan binaan berbilang benang. boleh sangat Untuk meningkatkan kelajuan pembungkusan, anda boleh menggunakan pemalam happypack untuk melaksanakan binaan berbilang benang. Untuk menggunakan pemalam ini, anda perlu memasang happypack:

npm install happypack -D
Salin selepas log masuk

dan kemudian ubah suai fail konfigurasi asal:

module: {
  rules: [
    {
      test: /.js$/,
      loader: 'babel-loader'
    },
    ...
  ]
}
Salin selepas log masuk

kepada:

const HappyPack = require('happypack');
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length });

module: {
  rules: [
    {
      test: /.js$/,
      exclude: /node_modules/,
      loader: 'happypack/loader?id=happyBabel'
    },
    ...
  ]
},
plugins: [
  new HappyPack({
    id: 'happyBabel',
    loaders: ['babel-loader'],
    threadPool: happyThreadPool,
    verbose: true
  })
]
Salin selepas log masuk

Gunakan happypack pemalam untuk membolehkannya binaan berbilang benang.

  1. Gunakan teknologi DllPlugin dan DllReferencePlugin

Teknologi DllPlugin dan DllReferencePlugin terutamanya membungkus beberapa perpustakaan yang tidak kerap berubah menjadi fail lib, supaya setiap kali ia dibungkus, Terdapat tidak perlu membungkus fail perpustakaan ini, anda hanya perlu menggunakan DllReferencePlugin untuk memperkenalkannya kemudian.

Penggunaan:

  1. Konfigurasikan DllPlugin dahulu:
const path = require('path');
const webpack = require('webpack');
const dllPath = 'static/dll';

module.exports = {
  entry: {
    vendor: ['vue', 'vue-router', 'vuex', 'axios', 'lodash'] // 需要单独打包的库
  },
  output: {
    path: path.join(__dirname, `../${dllPath}`),
    filename: '[name].dll.js',
    library: '[name]_[hash]'  // 暴露全局变量,避免前后两次打包,库名字变更
  },
  plugins: [
    new webpack.DllPlugin({
      name: '[name]_[hash]',
      path: path.join(__dirname, `../${dllPath}`, 'manifest.json')
    })
  ]
};
Salin selepas log masuk
  1. Laksanakan pembungkusan:
cross-env NODE_ENV=production webpack --config ./build/webpack.dll.js --progress --hide-modules
Salin selepas log masuk
  1. Gunakan index.html dalam <script> untuk memperkenalkan fail perpustakaan yang dijana:
<script src="<%= BASE_URL %>static/dll/vendor.dll.js"></script>
Salin selepas log masuk
  1. Konfigurasikan DllReferencePlugin:
const AddAssetHtmlWebpackPlugin = require('add-asset-html-webpack-plugin');
const path = require('path');

plugins: [
  new webpack.DllReferencePlugin({
    context: __dirname,
    manifest: require(path.join(__dirname, './static/dll/manifest.json'))
  }),
  new AddAssetHtmlWebpackPlugin({
    filepath: path.resolve(__dirname, './static/dll/*.dll.js')
  })
]
Salin selepas log masuk

Pemalam boleh diperkenalkan secara automatik dalam halaman Dijana fail Dll.

Ringkasan:

Melalui kaedah di atas, kami boleh mengoptimumkan Vue-cli dan Webpack untuk menjadikan pembungkusan projek kami lebih kecil dan lebih pantas. Sudah tentu, kaedah di atas bukanlah peluru perak, dan kaedah pengoptimuman khusus perlu diselaraskan mengikut syarat khusus projek. Saya harap artikel ini dapat membantu semua orang semasa membungkus dan menerbitkan projek.

Atas ialah kandungan terperinci Panduan pengoptimuman keluaran pembungkusan Vue-cli dan Webpack. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan