использовалиcreate-react-app
эти лесаreact
Разработка, а позже из-за некоторых пользовательских конфигураций, обратились к использованиюwebpack
Создайте свой собственный набор строительных лесов. но используяwebpack
После упаковки я узнал, Нани? Почему файл такой большой? ? ?
Вот я и понял как с этим боротьсяwebpack
Если файл слишком велик после упаковки, просто запишите его.
Сначала настройте глобальные переменные
Во-первых, указав среду, скажитеwebpack
мы в настоящее время вproduction
среда, по мнениюproduction
способ упаковки.
//指定环境,将process.env.NODE_ENV环境与library关联
new Webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('production'),
}),
оптимизацияdevtool
серединаsource-map
.
dev-tool
предоставляет множество возможностей для улучшения нашегоdebug
возможности, с которыми мы знакомы:source-map
,inline-source-map
,cheap-source-map
и т.п. Подробное использование см.Официальная документация Devtool,Сравнение конфигурации Devtool,Опции Webpack SourceMap Некоторые интерпретации,
https://webpack.github.io/docs/configuration.html#devtool
Если ваш файл после упаковки вдруг стал на несколько мегабайт, то не думайте об этом, должно быть потому чтоsource-map
причина.source-map
Это действительно полезно на этапе разработки и легко отлаживается, но его не обязательно развертывать в производственной среде.
рекомендуется вprod
закрытая средаsource-map
.
Разделите файл css и упакуйте его отдельно
Установитьwebpack
плагинextract-text-webpack-plugin
.npm install extract-text-webpack-plugin --save-dev
.
Инструкции:
plugins:[
new ExtractTextPlugin('static/css/styles.[contenthash].css'),
]
используется здесьcontenthash
,webpack
будет генерироваться в соответствии с содержаниемhash
стоимость.
использоватьUglifyJSPlugin
сжатие.
пройти черезUglifyJSPlugin
может сжать наш*.js
документ.
способ установки:npm install uglifyjs-webpack-plugin --save-dev
.
Применение:Подробное использование UglifyJSPlugin
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
module.exports = {
plugins: [
new UglifyJSPlugin({
parallel: 4,
uglifyOptions: {
output: {
comments: false,
beautify: false,
},
compress: {
warnings: false
},
},
cache: true,
}),
]
}
Извлечение общих зависимостей
использоватьCommonsChunkPlugin
плагины, объединяющие несколькоjs
Файл извлекается для создания отдельного файла. Этот файл содержит некоторые общие модули, так что браузер загружает его только один раз в начале и кэширует для последующего использования. Вместо того, чтобы загружать файл большего размера каждый раз, когда вы посещаете новый интерфейс.
entry:{
app:'./entry',
vendor:['react','other-lib'],
},
plugins:[
new Webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
}),
]
включить сжатие gzip
Мы используемcompression-webpack-plugin
плагин для сжатия.
Установить:npm install compression-webpack-plugin --save-dev
.Подробное использование плагина Compression-webpack-pluginиспользовать:
const CompressionPlugin = require("compression-webpack-plugin");
plugins:[
new CompressionPlugin({
asset: '[path].gz[query]', //目标资源名称。[file] 会被替换成原资源。[path] 会被替换成原资源路径,[query] 替换成原查询字符串
algorithm: 'gzip',//算法
test: new RegExp(
'\\.(js|css)$' //压缩 js 与 css
),
threshold: 10240,//只处理比这个值大的资源。按字节计算
minRatio: 0.8//只有压缩率比这个值小的资源才会被处理
})
]
Результат сжатия:
Включите сжатие html и автоматически добавьте сгенерированные выше статические ресурсы.
Добавить плагинhtml-webpack-plugin
Установить:npm install html-webpack-plugin --save-dev
Применение:
plugins:[
new HtmlWebpackPlugin({
title: '',
template: __dirname + '/../public/index.html',
minify: {
removeComments: true,
collapseWhitespace: true,
removeRedundantAttributes: true,
useShortDoctype: true,
removeEmptyAttributes: true,
removeStyleLinkTypeAttributes: true,
keepClosingSlash: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
},
chunksSortMode:'dependency'
}),
]