# vue-prerender
**Repository Path**: leolee18/vue-prerender
## Basic Information
- **Project Name**: vue-prerender
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-07-26
- **Last Updated**: 2021-07-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# vue-prerender快速创建项目
## 全局安装/查看版本
```
npm install -g @vue/cli 或 yarn global add @vue/cli
vue -V
```
## 创建项目
```
vue create my-project
vuecli3是因为上一次记录过的cli3配置,第一次执行create是没有的
选择默认(default)还是手动(Manually),如果选择default,一路回车执行下去就行了
选择配置,看个人项目需求
注意,空格键是选中与取消,A键是全选
TypeScript 支持使用 TypeScript 书写源码
Progressive Web App (PWA) Support PWA 支持。
Router 支持 vue-router 。
Vuex 支持 vuex 。
CSS Pre-processors 支持 CSS 预处理器。
Linter / Formatter 支持代码风格检查和格式化。
Unit Testing 支持单元测试。
E2E Testing 支持 E2E 测试。
配置文件存放地方
第一个是独立文件夹位置,第二个是在package.json文件里
询问是否记录这一次的配置,以便下次使用,如一开始的时候会显示的vuecli3配置
回车确定等待下载
```
## 启动
```
cd my-project // 进入到项目根目录
npm run serve // 启动项目
```
## 配置页面预渲染
```
1、在项目中安装prerender-spa-plugin
npm install --save prerender-spa-plugi
2、conf.js文件
const PrerenderSPAPlugin = require('prerender-spa-plugin')
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer
new PrerenderSPAPlugin({
// 生成文件的路径,也可以与webpakc打包的一致。
// 这个目录只能有一级,如果目录层次大于一级,在生成的时候不会有任何错误提示,在预渲染的时候只会卡着不动。
staticDir: path.join(__dirname, '../dist'),
//对应自己的路由文件,比如index有参数,就需要写成 /index/param1。
routes: ['/', '/find', '/order', ],
// 这个很重要,如果没有配置这段,也不会进行预编译
renderer: new Renderer({
inject: {},
// 在 main.js 中 document.dispatchEvent(new Event('render-event')),两者的事件名称要对应上。
renderAfterDocumentEvent: 'render-event',
args: ['--no-sandbox', '--disable-setuid-sandbox']
})
3、index.js,在const router = new Router({ })中写入
mode:'history',
4、修改main.js入口文件
new Vue({
el: '#app',
router,
components: { App },
template: '',
// 添加mounted,不然不会执行预编译
mounted () {
document.dispatchEvent(new Event('render-event'))
}
})
```
## 管理你的 app 里面的 meta 信息
```
npm install vue-meta-info --save
全局引入vue-meta-info
import Vue from 'vue'
import MetaInfo from 'vue-meta-info'
Vue.use(MetaInfo)
组件内静态使用 metaInfo
...
```
## 遇到的问题
```
Error: Chromium revision is not downloaded. Run "npm install" or "yarn install"
at Launcher.launch (/Users/admin/Desktop/vue-meituan/node_modules/puppeteer/lib/Launcher.js:115:15)
[Prerenderer - PuppeteerRenderer] Unable to start Puppeteer
使用淘宝镜像,下载puppeteer,可以代理下载 Chromium r526987
cnpm install puppeteer
```
## 调试工具安装
```
Vue.js devtools开发工具的使用
在Chrome或Firefox浏览器的扩展插件仓库里搜vue devtool,安装Vue.js devtools.
安装说明
https://www.cnblogs.com/alice-fee/p/8038367.html
0720 编译好的chrome 插件
```
## vue 优化
```
一.代码包优化
屏蔽sourceMap
vue.config.js
productionSourceMap: false,
webpack
devtool: 'none',
devtool: 'source-map',inline-source-map
对项目代码中的JS/CSS/SVG(*.ico)文件进行gzip压缩
1、安装compression-webpack-plugin
npm i compression-webpack-plugin
2、vue.config.js
const CompressionWebpackPlugin = require('compression-webpack-plugin')
module.exports = {
configureWebpack: config => {
if (process.env.NODE_ENV === 'production') {
productionGzip && myConfig.plugins.push(
new CompressionWebpackPlugin({
test: /\.js$|\.html$|\.css$/,
threshold: 1024,
minRatio: 0.8
})
)
}
}
}
3、后台Nginx配置
gzip on;
gzip_static on;
gzip_min_length 1024;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
对路由组件进行懒加载
component: resolve=>require(["@/components/employees"],resolve)
二、源码优化
v-if 和 v-show选择调用
为item设置唯一key值,方便vuejs内部机制精准找到该条列表数据
细分vuejs组件
减少watch的数据,可以采用事件中央总线或者vuex进行数据的变更操作
内容类系统的图片资源按需加载
SSR(服务端渲染)
三、用户体验优化
better-click防止iphone点击延迟
菊花loading
骨架屏加载
```