From 0692418531c2fbfca935ba1b16c67ec6b4a34fcb Mon Sep 17 00:00:00 2001 From: sunnie <406803045@qq.com> Date: Thu, 16 Apr 2020 18:07:29 +0800 Subject: [PATCH] readme --- README.md | 226 ++++++++++++++++++++++++++++++++++++++------ src/router/index.js | 5 +- static/demo.png | Bin 0 -> 24026 bytes vue.config.js | 22 +++-- 4 files changed, 211 insertions(+), 42 deletions(-) create mode 100644 static/demo.png diff --git a/README.md b/README.md index c519fa6..099fb08 100644 --- a/README.md +++ b/README.md @@ -8,25 +8,33 @@ ### Node 版本要求 -`Vue CLI` 需要 Node.js 8.9 或更高版本 (推荐 8.11.0+)。你可以使用 [nvm](https://github.com/nvm-sh/nvm) 或 [nvm-windows](https://github.com/coreybutler/nvm-windows) 在同一台电脑中管理多个 Node 版本。 +`Vue CLI` 需要 Node.js 8.9 或更高版本 (推荐 8.11.0+)。你可以使用 [nvm](https://github.com/nvm-sh/nvm) 或 +[nvm-windows](https://github.com/coreybutler/nvm-windows) 在同一台电脑中管理多个 Node 版本。 本示例 Node.js 12.14.1 目录 +- [√ Vue-cli4](https://cli.vuejs.org/zh/guide/) - [√ 配置多环境变量](#env) - [√ rem 适配方案](#rem) -- [√ Vue-cli4](https://cli.vuejs.org/zh/guide/) -- [√ VantUI 组件按需加载](#vant) -- [√ Sass](#sass) -- Webpack 4 -- Vuex -- Axios 封装 -- 生产环境 cdn 优化首屏加速 -- babel 低版本浏览器兼容 -- Eslint+Pettier 统一开发规范 +- [√ VantUI 组件按需加载](#vant) +- [√ Sass](#sass) +- [√ Webpack 4](#webpack) + +- [√ Vuex](#vuex) +- [√ Axios 封装](#axios) +- [√ Vue-router](#router) +- [√ vue.config.js 基础配置](#base) +- [√ vue.config.js 配置 proxy 跨域](#proxy) +- [√ vue.config.js 配置 proxy 跨域](#proxy) + +* Vuex +* Axios 封装 +* 生产环境 cdn 优化首屏加速 +* babel 低版本浏览器兼容 +* Eslint+Pettier 统一开发规范 - ### ✅ 配置多环境变量   NODE_ENV 和 BASE_URL 是两个特殊变量,在代码中始终可用 @@ -48,8 +56,8 @@ ##### 配置介绍   以 `VUE_APP_` 开头的变量,在代码中可以通过 `process.env.VUE_APP_` 访问。 -  比如,`VUE_APP_ENV = 'development'` 通过`process.env.VUE_APP_ENV` 访问 -   除了 `VUE_APP_*` 变量之外,在你的应用代码中始终可用的还有两个特殊的变量`NODE_ENV` 和`BASE_URL` +  比如,`VUE_APP_ENV = 'development'` 通过`process.env.VUE_APP_ENV` 访问    除了 `VUE_APP_*` 变量之外 +,在你的应用代码中始终可用的还有两个特殊的变量`NODE_ENV` 和`BASE_URL` 在项目根目录中新建.env @@ -146,14 +154,15 @@ module.exports = { 很多小伙伴会问我,适配的问题。 -举个例子:设计给了你一张 750px \* 1334px 图片,在 iPhone6 上铺满屏幕,其他机型适配。 +举个例子:设计给了你一张 750px \* 1334px 图片,在 iPhone6 上铺满屏幕,其他机型适配。 -- 当`rootValue: 70` , 样式 `width: 750px;height: 1334px;` 图片会撑满 iPhone6 屏幕,这个时候切换其他机型,图片也会跟着撑满。 -- 当`rootValue: 37.5` 的时候,样式 `width: 375px;height: 667px;` 图片会撑满 iPhone6 屏幕。 +- 当`rootValue: 70` , 样式 `width: 750px;height: 1334px;` 图片会撑满 iPhone6 屏幕,这个时候切换其他机型,图片也会跟着撑 + 满。 +- 当`rootValue: 37.5` 的时候,样式 `width: 375px;height: 667px;` 图片会撑满 iPhone6 屏幕。 -本案例采用 Vant 是基于 375 设计稿 , rootValue: 37.5。其他的你就可以根据你设计图,去做对应的设置了。 +本案例采用 Vant 是基于 375 设计稿 , rootValue: 37.5。其他的你就可以根据你设计图,去做对应的设置了。 -当然,想要撑满屏幕你可以使用100%,这里只是举例说明。 +当然,想要撑满屏幕你可以使用 100%,这里只是举例说明。 ```html @@ -176,13 +185,14 @@ module.exports = { ### ✅ VantUI 组件按需加载 -项目采用[自动按需引入组件 (推荐)](https://youzan.github.io/vant/#/zh-CN/quickstart#fang-shi-yi.-zi-dong-an-xu-yin-ru-zu-jian-tui-jian) +项目采 +用[Vant 自动按需引入组件 (推荐)](https://youzan.github.io/vant/#/zh-CN/quickstart#fang-shi-yi.-zi-dong-an-xu-yin-ru-zu-jian-tui-jian)下 +面安装插件介绍: -下面安装插件介绍: +[babel-plugin-import](https://github.com/ant-design/babel-plugin-import) 是一款 `babel` 插件,它会在编译过程中将 +`import` 的写法自动转换为按需引入的方式 -[babel-plugin-import](https://github.com/ant-design/babel-plugin-import) 是一款 `babel` 插件,它会在编译过程中将 `import` 的写法自动转换为按需引入的方式 - -# 安装插件 +#### 安装插件 ```javascript npm i babel-plugin-import -D @@ -204,7 +214,7 @@ module.exports = { } ``` -# 使用组件 +#### 使用组件 项目在 `src/plugins/vant.js` 下统一管理组件,用哪个引入哪个,无需在页面里重复引用 @@ -216,26 +226,182 @@ Vue.use(Button) Vue.use(Cell) Vue.use(List) Vue.use(Tabbar).use(TabbarItem) - ``` + [▲ 回顶部](#top) ### ✅ Sass -首先 你可能会遇到 `node-sass` 安装不成功,别放弃多试几次!!! +首先 你可能会遇到 `node-sass` 安装不成功,别放弃多试几次!!! -在 `src/assets/css/`文件夹下包含了三个文件 -- `index.scss` 主入口,主要引入其他两个scss文件,和公共样式 +在 `src/assets/css/`文件夹下包含了三个文件 + +- `index.scss` 主入口,主要引入其他两个 scss 文件,和公共样式 - `variables.scss` 定义变量 - `mixin.scss` 定义 `mixin` 方法 -你可以直接在vue文件下写 sass 语法 +你可以直接在 vue 文件下写 sass 语法 ```html +``` +[▲ 回顶部](#top) + +### ✅ Sass + +首先 你可能会遇到 `node-sass` 安装不成功,别放弃多试几次!!! + +在 `src/assets/css/`文件夹下包含了三个文件 + +- `index.scss` 主入口,主要引入其他两个 scss 文件,和公共样式 +- `variables.scss` 定义变量 +- `mixin.scss` 定义 `mixin` 方法 + +你可以直接在 vue 文件下写 sass 语法 + +```html + +``` + +[▲ 回顶部](#top) + +### ✅ Vue-router + +本案例采用 `hash` 模式,开发者根据需求修改 `mode` `base` + +**注意**:如果你使用了 `history` 模式,`vue.config.js` 中的 `publicPath` 要做对应的**修改** + +前往:[vue.config.js 基础配置](#base) + +```javascript +import Vue from 'vue' +import Router from 'vue-router' + +Vue.use(Router) +export const router = [ + { + path: '/', + name: 'index', + component: () => import('@/views/home/index'), // 路由懒加载 + meta: { + title: '首页', // 页面标题 + keepAlive: false // keep-alive 标识 + } + } +] +const createRouter = () => + new Router({ + // mode: 'history', // 如果你是 history模式 需要配置 vue.config.js publicPath + // base: '/app/', + scrollBehavior: () => ({y: 0}), + routes: router + }) + +export default createRouter() +``` + +更多:[Vue Router](https://router.vuejs.org/zh/) + +[▲ 回顶部](#top) + +### ✅ vue.config.js 基础配置 + +如果你的 `Vue Router` 模式是 hash + +```javascript +publicPath: './', +``` + +如果你的 `Vue Router` 模式是 history 这里的 publicPath 和你的 `Vue Router` `base` **保持一直** + +```javascript +publicPath: '/app/', +``` + +```javascript +const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV) + +module.exports = { + publicPath: './', // 署应用包时的基本 URL。 vue-router hash 模式使用 + // publicPath: '/app/', // 署应用包时的基本 URL。 vue-router history模式使用 + outputDir: 'dist', // 生产环境构建文件的目录 + assetsDir: 'static', // outputDir的静态资源(js、css、img、fonts)目录 + lintOnSave: false, + productionSourceMap: !IS_PROD, // 生产环境的 source map + devServer: { + port: 9020, // 端口号 + open: false, // 启动后打开浏览器 + overlay: { + // 当出现编译器错误或警告时,在浏览器中显示全屏覆盖层 + warnings: false, + errors: true + } + // ... + } +} +``` + +[▲ 回顶部](#top) + +### ✅ vue.config.js 配置 proxy 跨域 + +```javascript +module.exports = { + devServer: { + // .... + proxy: { + //配置跨域 + '/api': { + target: 'https://test.xxx.com', // 接口的域名 + ws: true, // 是否启用websockets + changOrigin: true, // 开启代理,在本地创建一个虚拟服务端 + pathRewrite: { + '^/api': '/' + } + } + } + } +} +``` + +使用 + +```javascript + +``` + +[▲ 回顶部](#top) + +### ✅ vue.config.js 配置 proxy 跨域 + +```javascript + publicPath: './', // 署应用包时的基本 URL router hash 模式使用 + // publicPath: process.env.NODE_ENV === 'development' ? '/' : '/app/', //router history模式使用 需要区分生产环境和开发环境,不然build会报错 + outputDir: 'dist', // 生产环境构建文件的目录 + assetsDir: 'static', // outputDir的静态资源(js、css、img、fonts)目录 + lintOnSave: false, + productionSourceMap: !IS_PROD, // 生产环境的 source map ``` [▲ 回顶部](#top) diff --git a/src/router/index.js b/src/router/index.js index ad9f207..cd26323 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -6,9 +6,10 @@ export const router = [ { path: '/', name: 'index', - component: () => import('@/views/home/index'), + component: () => import('@/views/home/index'), // 路由懒加载 meta: { - keepAlive: false + title: '首页', // 页面标题 + keepAlive: false // keep-alive 标识 } } ] diff --git a/static/demo.png b/static/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..80f3b3e82d43273f1da21c1cb81759291ec57e2f GIT binary patch literal 24026 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 brRMwakI6m*d?Ap>E@y9d>Fi6}AL9Q6-=v&O literal 0 HcmV?d00001 diff --git a/vue.config.js b/vue.config.js index 433eea4..3bac504 100644 --- a/vue.config.js +++ b/vue.config.js @@ -5,7 +5,7 @@ function resolve(dir) { return path.join(__dirname, dir) } const name = defaultSettings.title || 'vue mobile template' // page title -const port = 9018 // dev port + const externals = { vue: 'Vue', 'vue-router': 'VueRouter', @@ -33,20 +33,22 @@ const cdn = { ] } } +const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV) module.exports = { - publicPath: './', // router hash 模式使用 - // publicPath: process.env.NODE_ENV === 'development' ? '/' : '/app/', //router history模式使用 需要区分生产环境和开发环境,不然build会报错 - outputDir: 'dist', - assetsDir: 'static', - lintOnSave: process.env.NODE_ENV === 'development', - productionSourceMap: false, + publicPath: './', // 署应用包时的基本 URL。 vue-router hash 模式使用 + // publicPath: '/app/', //署应用包时的基本 URL。 vue-router history模式使用 + outputDir: 'dist', // 生产环境构建文件的目录 + assetsDir: 'static', // outputDir的静态资源(js、css、img、fonts)目录 + lintOnSave: false, + productionSourceMap: !IS_PROD, // 生产环境的 source map devServer: { - port: port, - open: false, + port: 9020, // 端口 + open: false, // 启动后打开浏览器 overlay: { + // 当出现编译器错误或警告时,在浏览器中显示全屏覆盖层 warnings: false, errors: true - }, + } // proxy: { // //配置跨域 // '/api': {