предисловие
Иногда после разработки проекта Vue обнаруживается, что пакет проекта по-прежнему работает медленно, в нем все еще много избыточных файлов, таких как изображения, файлы .vue, файлы .js и т. д., если вы также сталкиваетесь с подобными проблемами или хотите пакет вашего проекта будет меньше, скорость пакета выше, эта статья может вам помочь.
Сделать проект меньше
Сжатые упакованные файлы
установка пакета
npm i compression-webpack-plugin@5.0.0 -D / cnpm i compression-webpack-plugin@5.0.0 -D /yarn add compression-webpack-plugin@5.0.0
конфигурация веб-пакета
module.exports = {
...
chainWebpack:config => {
config.plugin('compression')
.use(
new CompressionWebpackPlugin(
{
filename: info => {
return `${info.path}.gz${info.query}`
},
algorithm: 'gzip',
threshold: 10240,
test: /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i,
minRatio: 0.8,
deleteOriginalAssets: true
}
)
)
}
}
推荐在生产环境使用
удалить лишние файлы
установка пакета
npm i useless-files-webpack-plugin -D / cnpm i useless-files-webpack-plugin -D /yarn add useless-files-webpack-plugin
конфигурация веб-пакета
module.exports = {
...
chainWebpack = config => {
config.plugin('uselessFile')
.use(
new UselessFile({
root: path.resolve(__dirname,'./src/assets/images'),
clean:true,
exclude: /node_modules/
})
)
}
}
推荐生产环境使用
игнорировать локализацию момента
конфигурация веб-пакета
module.exports = {
...
chainWebpack : config=>{
config.plugin('IgnorePlugin')
.use(new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/))
}
}
Загрузка элементов по запросу
Babel.config.js
module.exports = {
...
plugins:[
[
"component",
{
libraryName: "element-ui",
styleLibraryName: "theme-chalk"
}
]
]
}
Импорт компонентов по запросу
import Vue from 'vue'
import { Dialog } from 'element-ui'
Vue.use(Dialog)
Загружать электронную карту по запросу
Babel.config.js
module.exports = {
...
plugins:[
...
'equire'
]
}
Использовать диаграмму по запросу
// eslint-disable-next-line
const echarts = equire([
"line",
"bar"
])
export default echarts
Загружать lodash по запросу
Babel.config.js
module.exports = {
...
plugins:[
...
'lodash'
]
}
конфигурация веб-пакета
module.exports = {
...
chainWebpack: config =>{
...
config.plugin('loadshReplace')
.use(new LodashModuleReplacementPlugin())
}
}
Сделайте упаковку проекта быстрее
Удалить предварительную выборку, предварительную загрузку
конфигурация веб-пакета
module.exports = {
...
chainWebpack: config =>{
config.plugins.delete('prefetch')
config.plugins.delete('preload')
}
}
看自己项目情况/需求使用
Включить многопоточную упаковку (HappyPack)
установка пакета
npm i happypack -D / cnpm i happypack -D /yarn add happypack
конфигурация веб-пакета
const HappyPack = require('happypack')
const os = require('os')
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length })
module.exports = {
...
chainWebpack: config =>{
...
const jsRule = config.module.rule('js')
jsRule.uses.clear()
jsRule.use('happypack/loader?id=babel')
.loader('happypack/loader?id=babel')
.end()
config.plugins.push(
new HappyPack({
id:'babel',
loaders:['babel-loader?cacheDirectory=true'],
threadPool:happyThreadPool
})
)
}
}
看自己项目情况使用
Динамическая цепная упаковка
webpack.dll.config
const webpack = require('webpack')
const path = require('path')
module.exports = {
entry: {
vendor: ['vue', 'vue-router', 'axios', 'echarts','element-ui','moment','sortablejs'] // 第三方包
},
output: {
filename: '[name].dll.js',
path: path.resolve(__dirname, 'dll'),
library:'[name]_lib'
},
plugins: [
new webpack.DllPlugin({
path: path.resolve(__dirname, 'dll/[name]-manifest.json'),
name: '[name]_lib'
})
]
}
Выполните этот файл, чтобы получить скомпилированный код
webpack --config webpack.dll.config.js
конфигурация веб-пакета
module.exports = {
...
configureWebpack: config => {
config.plugins.push(
new webpack.DllReferencePlugin({
manifest: path.resolve(__dirname, 'dll/vendor-manifest.json')
})
)
config.plugins.push(
new AddAssetHtmlPlugin({ filepath: path.resolve(__dirname,'dll/vendor.dll.js') })
)
}
}
end
Вышеизложенное представляет собой небольшое знание оптимизации упаковки проектов Vue, накопленное автором для моих собственных проектов или проектов компании. Возможно, у вас есть лучшая точка оптимизации или лучший план оптимизации. Добро пожаловать, чтобы предоставить примеры и учиться.