Vue企业级优雅实战-01-初始化工程

1 环境准备

1.1 安装 Node JS

在官网下载 Node JS 最新稳定版进行安装,安装完成后分别输入命令 node -vnpm -v 查看 node 版本与 npm 版本。无论是 NodeJS 还是 Vue-Cli,都不建议版本低于我的,我的版本信息如下:

MacBook-Pro ~ % node -v
v10.15.3
MacBook-Pro ~ % npm -v
6.14.6

1.2 安装 Vue-Cli 4

npm install -g @vue/cli

安装完成后,使用命令 vue --version 查看 vue-cli 的版本号:

MacBook-Pro ~ % vue --version
@vue/cli 4.4.6

2 初始化工程

2.1 创建工程

在本地创建一个文件夹(目录)用于存放这个平台前端的所有代码 (随着后续组件库及微前端、命令行的开发,前端不是仅一个单体工程,而是多个工程),在 命令行(CMD、Terminal)中进入该目录,执行命令:

vue create dscloudy-admin-single

回车后,按照如下步骤进行有关选择:

1、选择预设 preset:

? Please pick a preset: 
  dscloudy-common (router, vuex, dart-sass, babel, eslint) 
  default (babel, eslint) 
❯ Manually select features 

一般只有两个选型:默认(default)和手动选择(Manually select features),我选择后者,手动选择。

2、选择项目需要的功能:

? Check the features needed for your project: 
 ◉ Babel
 ◯ TypeScript
 ◯ Progressive Web App (PWA) Support
 ◉ Router
 ◉ Vuex
❯◉ CSS Pre-processors
 ◉ Linter / Formatter
 ◯ Unit Testing
 ◯ E2E Testing

我选择 Babel、Router、Vuex、CSS Pre-processors、Linter / Formatter。

3、路由是否使用 history 模式:

? Use history mode for router? (Requires proper server setup for index fallback in production) (Y/n) 

现在无论使用 history 或 hash 都行,反正后面可以修改。我就直接回车了(history 模式)

4、选择 CSS 预处理器:

? Pick a CSS pre-processor (PostCSS, Autoprefixer and CSS Modules are supported by default): (Use arrow keys)
❯ Sass/SCSS (with dart-sass) 
  Sass/SCSS (with node-sass) 
  Less 
  Stylus 

由于 Element-UI 采用 SCSS 作为 CSS 预处理器,我习惯使用 Sass/SCSS (with dart-sass) ,选择第一项。

5、选择 ESLint 的配置:

? Pick a linter / formatter config: (Use arrow keys)
  ESLint with error prevention only 
  ESLint + Airbnb config 
❯ ESLint + Standard config 
  ESLint + Prettier 

我一直使用标准配置,选择第三项:ESLint + Standard config。 适当插一句,部分教程喜欢关闭 ESLint 等语法或代码检测,个人不推荐这么做。无论是学习还是实战,代码质量是重中之重的,实现功能只需要时间,但代码风格反应一个人的素质及认知。例如:定义了未使用到的变量,既然没有使用到,你留着干嘛? 规定两个空格,你为什么要加4个? 这无关强迫症,而是代码的整洁之道。无规矩不成方圆,一个团队如果不统一标准,那每个人写的风格都五花八门,后续还怎么维护? 跟着文章实践的伙伴们,一定要开启 ESLint!!

6、选择检测的触发点:

? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i> to invert selection)
❯◉ Lint on save
 ◯ Lint and fix on commit

强烈要求选择 Lint on save, 保存时校验。

7、选择配置文件的存放方式:

? Where do you prefer placing config for Babel, ESLint, etc.? (Use arrow keys)
❯ In dedicated config files 
  In package.json 

我选择第一个,放在独立的配置文件中(不建议牛屎马尿混在一起!)

8、是否将刚才的设置保存为预设:

? Save this as a preset for future projects? (y/N) 

这个随便你,反正我之前保存过了。如果保存了,以后会在最开始的选择预设中出现你预设的这一项,省事。

然后就耐心等待创建代码并自动安装默认的依赖。根据你的网速决定时间,我通常是一两分钟完成。完成后会显示如下提示:

🎉  Successfully created project dscloudy-admin-single.
👉  Get started with the following commands:

 $ cd dscloudy-admin-single
 $ npm run serve

2.2 配置 WebStorm

WebStorm 需要提前安装好 Vue的插件(Vue.js)。使用 WebStorm 打开上面的工程: File - Open...,选择 dscloudy-admin-single, 打开工程。 然后打开设置 Preferences,进行如下设置:

1、设置文件编码: Editor-File Encodings`

设置编码

2、由于会出现 '@/xxxx' 之类的代码(@代替 src 路径),为了便于开发过程中的代码提示,需要配置 webpack 的配置文件路径:Languages & Frameworks - JavaScript - Webpack,选择 webpack 配置文件的路径:

{dscloudy-admin-single所在的路径}/node_modules/@vue/cli-service/webpack.config.js
webpack配置

3、开启 ESLint 代码检查:Languages & Frameworks - JavaScript - Code Quality Tools - ESLint

ESLint设置

4、其他的颜色、字体等根据个人喜好配置

在命令行中进入工程,执行 npm run serve, 测试工程是否可以正常运行

启动成功示意

浏览器中访问: http://localhost:8080

运行示意图

如果可以正常运行,便可以停止运行该工程(ctrl + c)。因为每次运行都在命令行中 npm run serve 是在是太无趣,在 WebStorm 中点击个按钮就完成的事,干嘛每次都要敲键盘。

2.3 调整目录

作为一个优雅实战,肯定要优化和完善 src 代码的目录结构,方便快速定位代码。我的目录结构如下(src同级的目录和文件忽略,使用默认的即可。关注点在源码目录 src 下):

dscloudy-admin-single
|- public/
|- src/
        |- assets/
                |- img/             存放类似背景图片之类的图片资源
                |- scss/            存放样式文件
        |- axios/                   封装 axios
        |- common/              存放通用的 JS 工具类等
        |- components/      存放自己封装的组件库
        |- config/              存放配置文件
        |- i18n/                    存放国际化文件
        |- icons/                   存放 SVG 图标
        |- mock/                    存放 mock 模拟数据
        |- modules/             存放各个模块,包括核心模块和各个业务 module
                |- core/                    存放核心模块,每个module的目录结构都与 core 一样
                |- demo/                    存放demo演示模块
        |- router/              存放通用路由和路由配置
        |- store/                   存放全局状态管理
        |- views/                   存放基础抽象视图
        |- App.vue
        |- main.js

注意,这里说明一下,我是按照模块化方式进行开发。 modules/ 之外的其他目录,都是项目全局的文件,modules 中存放的是一个个模块。这些模块包括:

  • 支撑工程运行的核心(core)模块
  • 很多项目都需要使用的系统管理(system)模块(这里还没有创建)
  • 给开发人员提供案例的演示(demo)模块
  • 各个业务模块(如:会员管理模块、商品管理模块、运营管理模块、报表管理模块、订单管理模块等)

核心模块 core 与 系统管理模块 system,是支撑这套前后端基础开发平台必备的模块。每个模块的结构都一样,后面会将这些业务模块拆分成一个个独立的前端工程(微前端),核心模块与系统管理模块放在基座工程中。

每个module的目录结构都是:

|- {module name}
        |- api/                 存放该模块的网络请求
        |- components/  存放该模块使用的特殊组件
        |- mock/                存放该模块使用的模拟数据
        |- pages/               存放该模块的页面
        |- router/          存放该模块的路由
        |- store/               存放该模块的状态管理
        |- index.js         该模块的入口文件
工程目录结构

2.4 运行工程

在 WebStorm 中配置工程的快速启动。 点击右上角的 Add Configuration...:

image-20200823143739761

在弹窗的框中,点击左上角 " + ", 选择 " npm ":

image-20200823143939720
Name: 随意输入啥都行,建议别改了
package.json: 默认是项目中的package.json,也不要修改
Command: 默认 run,不需修改
Scripts:选择 serve

确定之后,在主界面右上角就有运行的按钮了:

启动工程按钮示意

如果只有一个运行项,默认选中 serve, 点击旁边的运行按钮,即可启动项目。以后每次开发测试,都点击这个按钮就行,多省事啊!(反正我是没有每次 敲 npm run serve 这种癖好)

如果需要停止运行,点击旁边的红色按钮就行。

停止运行按钮

(本来这篇还包括提交GitHub 与 Gitee, 但有些细节写得太多导致篇幅稍长,故一套代码同时提交 GitHub、Gitee,就独立一篇写吧)


欢迎关注我的个人公众号,留言可加我个人微信或交流问题


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