项目优化上线

104 阅读3分钟

项目优化上线流程

使用vue图形化管理工具
vue ui

vscode格式化不换行

/.prettierrc 需要在根目录小找到prettierrc.js如果没有手动创建

{
  "semi":false,
  "singleQuote":true,
  "printWidth":200
}

批量移除console.log

安装依赖: npm i babel-plugin-transform-remove-console --save-dev

在babel.config.js下面引入

const proPlugins = [];
//如果是开发环境,则添加 transform-remove-console 插件
if (process.env.NODE_ENV== "production") {
  proPlugins.push("transform-remove-console");
}

module.exports = {
  presets: ["@vue/cli-plugin-babel/preset"],
  plugins: [...proPlugins],
};

ElementUI组件按需加载

  • 在main-prod.js中,注释掉element-ui按需加载的代码
  • 在index.html的头部区域中,通过CDN加载element-ui的js和css样式

修改index.html文件

设置变量isProd

在/vue.config.js引入下面代码

const { defineConfig } = require("@vue/cli-service");
module.exports = defineConfig({

  chainWebpack: (config) => {
    //生产模式
    config.when(process.env.NODE_ENV == "production", (config) => {
      config.entry("app").clear().add("./src/main-prod.js");
      
    	//设置一个全局变量,在index.html中用来区分生产环境和开发环境
      config.plugin("html").tap((args) => {
        args[0].isProd = true;
        return args;
      });
    });
    //开发模式
    config.when(process.env.NODE_ENV == "development", (config) => {
      config.entry("app").clear().add("./src/main-dev.js");

      config.plugin("html").tap((args) => {
        args[0].isProd = false;
        return args;
      });
    });
  },
});
使用变量isProd

通过isProd区分开发环境和生产环境。如果是生产环境,则加载CDN。如果是开发环境,则不接在CDN文件。

在/public/index.html引入对应要压缩的内容:

<% if(htmlWebpackPlugin.options.isProd){%>
      <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
      <link href="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.6/theme-chalk/index.min.css" rel="stylesheet">
      <script src="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.6/index.min.js"></script>
      <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.4.1/echarts.min.js"></script>
<% } %>

第三方依赖启用CDN

在/vue.config.js引入下面代码

module.exports={
    chainWebpack: (config) => {
    config.when(process.env.NODE_ENV == "production", (config) => {
      config.entry("app").clear().add("./src/main-prod.js");
      //使用外部资源文件
      config.set("externals", {
        vue: "Vue",
        axios: "axios",
        echarts: "echarts",
      });
    });
    config.when(process.env.NODE_ENV == "development", (config) => {
      config.entry("app").clear().add("./src/main-dev.js");
    });
  },
}

路由懒加载

在vue 单页应用中,如果路由不实现懒加载,那么打包出来的文件将会非常大,加载也会非常慢.

也叫延迟加载,即在需要的时候进行加载,随用随载。
  1. 安装 @babel/plugin-syntax-dynamic-import包,进入@babel/plugin-syntax-dynamic-import · Babel (babeljs.io)进行下载
  2. 在babel.config.js配置文件中声明该插件
module.exports = {
  presets: ["@vue/cli-plugin-babel/preset"],
  plugins: [...proPlugins,'@babel/plugin-syntax-dynamic-import'],
  plugins: [...proPlugins]
}
  1. 将路由改为按需加载的形式,示例代码如下:
const Foo = () => import(/* webpackChunkName: "group-foo" */ './Foo.vue')
const Bar = () => import(/* webpackChunkName: "group-foo" */ './Bar.vue')
const Baz = () => import(/* webpackChunkName: "group-foo" */ './Baz.vue')

开启gzip压缩

使用gzip减少文件体积,使传输速度更快

1、创建一个文件夹,然后文件夹里面创建一个app.js的文件,cmd打开黑窗口,输入命令:

npm init -y

在app.js文件下面放入以下代码:

const express = require("express");
const  compression = require("compression");

const app = express(); //这个在前
app.use(compression()) //这个在后
app.use(express.static('./dist'))
app.listen(30,()=>{
    console.log('30');
})

2、复制完之后在当前目录下面去下载命令 npm i express compression

image.png 3、下载完将我们npm run bulid打包好的dist文件拉入进来

4、在宝塔面板Node项目去添加,如果没有先配置版本,配置完成以后进入左侧的文件目录,创建文件然后把刚刚写好的文件和打包好的项目拉入进去

image.png

5、添加时项目名称不能为中文,切记不能空格或者逗号分隔,项目端口要和创建文件里面的端口一致,启动项目前面的node跟后面的路径空格隔开,在安全里面检测配置的端口号是否允许访问,不允许添加即可

image.png