vue-cli 3.8.2项目搭建以及配置

1.项目搭建

    1.命令行

vue create 项目名        

    2.选择模版 (根据项目的需要进行安装,按步骤走下来就可以了)           

建议使用自定义安装,因为默认安装只安装了babel和eslint,当自定义安装之后,可以将其保存为模版,下一次创建项目时使用自己的模版创建。

1)以手动设置为例,根据项目需求进行安装,上下键移动,空格键选择

   - Babel : 将ES6编译成ES5

   - TypeScript: javascript类型的超集

   - Progressive Web App (PWA) Support: 支持渐进式的网页应用程序

   - Router:vue-router

   - Vuex: 状态管理

   - CSS Pre-processors: CSS预处理

   - Linter / Formatter: 开发规范

   - Unit Testing: 单元测试

   - E2E Testing: 端到端测试

2)接下来会提示你路由是否使用history模式,根据你的需求选择y或n

3)选择css处理器,建议如果使用sass,选择Sass/SCSS (with dart-sass),原因可以参考这篇文章为什么使用Dart?

4)选择Eslint代码验证规则(可以选择基础配置)以及什么时候进行代码检查(建议保存时进行代码检查)

5)选择将Babel,PostCSS,ESLint配置文件放在哪里,一般情况独立放置

6)接下来提示你是否将此保存为模版,选择是,然后输入模版名称,之后在创建项目就可以直接用自己定义的这套模版来安装了

2.项目配置

先来看一眼目录结构(自己添加了一些文件)

1.分环境打包配置

在根目录新建文件夹env_config,然后新建几个json文件(一般情况下会有测试test、开发development、生产production),用来配置不同环境的配置参数,以测试环境为例(其它环境按着测试环境进行修改就可以了)

    test.json文件

{

    "VUE_APP_RUN_ENV": "test",

    "baseUrl": "http://www.test.com"

}

在env_config文件下新建一个env.load.js文件

const RUN_SERVER = process.env.run_server || 'development'; 

const DefaultENVConfig = require('./development');

const serverEnvConfig = Object.assign({}, DefaultENVConfig, require('./' + RUN_SERVER + '.json'));

module.exports = serverEnvConfig;

在根目录下新建vue.config.js文件,导入serverEnvConfig

const serverEnvConfig = require('./env_config/env.load');

module.exports = {

chainWebpack: config => {

    config.plugin('define').tap(args => {

            for (let i in serverEnvConfig) {

                args[0]['process.env'][i] = `"${serverEnvConfig[i]}"`;

            }

            return args;

        });

    }

};

修改package.json文件

    1)cross-env:windows不支持NODE_ENV=development的设置方式,cross-env这个包可以提供一个设置环境变量的scripts,让你能够以unix方式设置环境变量,然后在windows上也能兼容运行。

    2)run_server:对应不同的服务环境,在打包时,只要运行不同的 script 脚本就能获取到相关的环境变量并添加到构建进程中。

    3)--mode:    指定环境模式

"scripts": {

    "serve": "cross-env run_server=development vue-cli-service serve --mode development",

    "build:test": "cross-env run_server=test vue-cli-service build --mode test",

    "build:pro": "cross-env run_server=production vue-cli-service build --mode production",

    "lint": "vue-cli-service lint"

},

(如果想要检测一下配置是否正确,可以将打包的build命令改为serve命令,如:build:pro": "cross-env run_server=production vue-cli-service serve --mode production,这样在本地运行的时候,就可以看到访问的接口是测试的还是开发的)

( 或者cmd中敲 vue inspect > output.js,可以查看配置信息 )

2.端口号修改

    项目启动后,端口号是随机的(我的每次启动端口号都不一样),常理来讲,在vue.config.js中设置port就可以了,但是我的不行,郁闷。之后发现需要去node_modules里去修改一下

@vue/cli-service/lib/commands/serve.js     81行修改为如下(其中projectDevServerOptions.port会去vue.config.js中找你设置的port)

const port = args.port || process.env.PORT || projectDevServerOptions.port || defaults.port

然后在vue.config.js文件module.exports中添加配置

devServer: {

    open: true,   // 在服务器启动时打开浏览器(也可以在package.json中通过命令行参数进行设置  --open)

    port: 8082    // 端口号

}

3.封装console.log

    项目对接接口时,一般会一直使用console.log,但是由于本人有些懒,感觉写法太繁琐,于是想要把console.log()缩写为log(),因为在js文件中,可以这样来写let log = console.log.bind(console);但是在vue项目中,希望可以全局引入一下,然后在每个文件中都可以直接使用,于是Google了一番,将其挂载到vue原型上就可以解决了(在utils中新建一个global.js文件)

//  global.js

const log = console.log.bind(console);

export default {

    install (Vue, options) {

        Vue.prototype.log = log;

    }

};

    之后在main.js注册

import global from './utils/global';

Vue.use(global);

这样在这个项目中就可以直接使用this.log()来代替console.log();

4.封装axios

  1)安装axios

npm i axios

2)在src文件夹下新建utils文件夹,接着创建request.js用来封装axios

import axios from 'axios';

// 创建axios实例

const service = axios.create({ 

    baseURL: process.env.baseUrl,  // 根据运行环境找到对应的baseUrl  (前边已经配置过分环境打包)

    withCredentials: true,  // 请求头携带cookies

    timeout: 15000 // 超时请求

});

// request拦截器

service.interceptors.request.use(function (config) { 

    // 自定义一些config配置

    return config;

    }, error => { 

    // 处理错误

    Promise.reject(error);

    }

);

// response拦截器

service.interceptors.response.use( 

    response => { 

        const code = response.data.code; 

        switch (code) { 

            case '400': 

                this.log('错误请求'); 

                break; 

            case '404': 

                this.log('未登录');

                break; 

        }

        return response.data;

    }

);

export default service;

使用的时候,在src下新建api/,用来统一管理请求接口,这样方便维护和管理,比如,可以这样

5.使用CDN加速

    在项目打包时,引入的element,axios等都会被打包到vendors.js文件中,体积会相对比较大,可以使用CDN的方式引入,打包时不将这些打包进去,自行搜索element,axios等的CDN地址,引入到index.html中,然后在vue.config.js中进行配置

configureWebpack: { 

    // 把webpack的配置写在这里 会自动合并 // 以下库使用cdn,不会被打包 

    externals: { 

        'axios': 'axios',

         'vue': 'Vue', 

        'vuex': 'Vuex',

         'vue-router': 'VueRouter',   // 注意这里需要把安装的vue-router卸载

        'element-ui': 'ELEMENT'    // 这里就不用在main.js中引入了,css在index.html中用link引入,这样打包的时候就不会把样式也打包进去了

    }

}

可以看下使用CDN之前和之后的项目打包的大小

使用CDN打包之后
使用CDN打包之前

6.启动gzip压缩

1)命令行安装

npm i -D compression-webpack-plugin

2)vue.config.js中module.exports中添加配置项

productionSourceMap: true    // 开启gzip,此操作需要nginx配置

gzip压缩需要服务端也进行配置,具体可参考这篇文章  启动gzip压缩及后台配置


假如以上提到的vue.config.js文件中有些不知道如何配置的小伙伴,可以参考如下完整的vue.config.js

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容