博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
打包&配置&优化--备忘录
阅读量:3960 次
发布时间:2019-05-24

本文共 4362 字,大约阅读时间需要 14 分钟。

一、打包环境区分

1、正常

/ * npm start */  	process.env.NODE_ENV === 'production',/ * npm run build */  	process.env.NODE_ENV === 'development'

2、额外环境区分打包配置

package.json中配置命令⬇️	"build-pro": "REACT_APP_ENV=pro 打包执行代码"	"build-dev": "REACT_APP_ENV=dev 打包执行代码"等号前面会作为key,等号后面会作为value,打包时可通过⬇️获取做判断	process.env.REACT_APP_ENV === 'pro' || 'dev'

二、打包大小优化

1、检查打包后文件具体大小及文件详细组成方法

vue⬇️在后面加 --report打包后会在dist目录下生成一个report.html文件,点开就是	"build": "vue-cli-service build --report"react⬇️package.json文件里一般有一个analyze命令,直接运行就可以查看	npm run analyze

2、优化打包后chunk-vendors.js文件体积过大

​ 当我们运行项目并且打包的时候,会发现chunk-vendors.js这个文件非常大,那是因为webpack将所有的依赖插件,如elementUi,xlsx等全都压缩到了这个文件里面,这时我们可以将其拆分,将所有的依赖都打包成单独的js文件。
利用splitChunks将每个依赖包单独打包,在生产环境下配置,代码如下

// vue.config.js中module.exports = {
configureWebpack: (config) => {
if (process.env.NODE_ENV === 'production') {
let optimization = {
runtimeChunk: 'single', splitChunks: {
chunks: 'all', maxInitialRequests: Infinity, minSize: 1024 * 1024 * 1, // 超过1M才会被拆分 cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/, name (module) {
const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1] return `npm.${
packageName.replace('@', '')}` } } } } } Object.assign(config, {
optimization }) } }}

3、打包压缩 compression-webpack-plugin

注:在这里有两个问题,第一是 compression-webpack-plugin版本的问题,如果有报错,安装5.0.0版本即可解决。第二个问题是需要后端配合在nginx开启gzip服务。一般浏览器都已支持.gz压缩文件,在http请求的Request Headers 中能看到 Accept-Encoding: gzip。

/* vue.config.js文件中 *//* 1. yarn add -D compression-webpack-plugin */const CompressionWebpackPlugin = require('compression-webpack-plugin')const productionGzipExtensions = ['js', 'css'] // 压缩js和css文件module.exports = {
configureWebpack: () => {
if (process.env.NODE_ENV === 'production') {
return {
plugins: [ // 下面是下载的插件的配置 new CompressionWebpackPlugin({
algorithm: 'gzip', test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'), // 哪些类型的文件做压缩 threshold: 1024 * 1024 * 1, // 大于1M minRatio: 0.8 // 压缩率大于0.8 }) ] } } }, productionSourceMap: process.env.NODE_ENV === 'development', // 开发环境可以打开,生成.map文件,方便定位错误所在(此配置和压缩无关)}

nginx 上配置

gzip  on;gzip_static on;gzip_buffers 4 16k;gzip_comp_level 8;gzip_types application/javascript text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; #  压缩文件类型 gzip_vary on;

4、去除代码中的console和debug

注:terser-webpack-plugin有一个版本问题,可能会报错Cannot read property ‘javascript’ of undefined,只需要固定版本4.2.3即可

/* vue.config.js文件中 *//* 1. yarn add -D terser-webpack-plugin@4.2.3 */const TerserPlugin = require("terser-webpack-plugin");module.exports = {
configureWebpack: () => {
if (process.env.NODE_ENV === 'production') {
return {
optimization: {
minimizer: [ new TerserPlugin({
terserOptions: {
ecma: undefined, warnings: false, parse: {
}, compress: {
drop_console: true, // 去除console drop_debugger: true // 去除debug } } }) ] } } } }}

5、图表库ECharts按需引入

// 柱状图实例import * as echarts from 'echarts/core'; // 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。import {
BarChart } from 'echarts/charts'; // 引入柱状图图表,图表后缀都为 Chartimport {
TooltipComponent, ToolboxComponent, GridComponent} from 'echarts/components'; // 引入提示框,标题等等的组件,组件后缀都为 Componentimport {
CanvasRenderer } from 'echarts/renderers'; // 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步echarts.use( [TooltipComponent, GridComponent, ToolboxComponent, BarChart, CanvasRenderer])

6、CDN引入“”

7、组件库如Element-Ui或Ant-Design按需引入,具体看官方文档 &

二、小问题

1、时间选择器展示英文,手动配置中文包

如果发现时间选择器组件展示的是英文而非中文一月二月等,全局手动配置一下语言,引入中文语言包import moment from 'moment'//手动引入所需要的语言包import 'moment/locale/zh-cn';// 指定使用的语言moment.locale('zh-cn');

2、CDN引入后面最好备一份本地文件,预防CDN挂掉或者用户没网情况

这里通过判断window.jquery全局对象是否存在来判断jQuery是否通过CDN加载成功,不成功就通过document.write方法来加载本地的jQuery文件注意这里用到了转义字符‘\’避免浏览器将document.write方法内的“”当成了结束标签。

转载地址:http://zlqzi.baihongyu.com/

你可能感兴趣的文章
如何写好应用型学术论文
查看>>
如何查看进程的各种限制
查看>>
64位int类型用printf输出问题
查看>>
网络后台开发面试题目
查看>>
Linux 共享内存限制的查看与设置
查看>>
进程的状态转换
查看>>
如何查看进程的信息(线程数)
查看>>
read的用法
查看>>
查看系统信息(cpu,内存,硬盘,网卡)
查看>>
awk的混合编程
查看>>
awk编程
查看>>
Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
查看>>
默认shell的修改
查看>>
Linux中的chage命令
查看>>
linux-详细解析密码文件passwd与shadow
查看>>
su- 与su的区别
查看>>
linux下发邮件mail
查看>>
/etc/group与/etc/gshadow文件解析
查看>>
echo如何手动输出换行
查看>>
linux下join连接
查看>>