接触过vue的同学应该都知道,用vue-cli开发vue的项目十分方便,它可以帮你快速构建一个具有强大构建能力的Vue.js项目。今天不谈什么是vue-cli,而是来说说用vue-cli构建的项目结构是什么样的并分析部分文件。这里以我之前写的一个小项目为参考,项目是用vue-cli的webpack模板构建的,项目地址:https://github.com/hieeyh/tong2-family。

项目结构

.
|-- build                            // 项目构建(webpack)相关代码
|   |-- build.js                     // 生产环境构建代码
|   |-- check-version.js             // 检查node、npm等版本
|   |-- dev-client.js                // 热重载相关
|   |-- dev-server.js                // 构建本地服务器
|   |-- utils.js                     // 构建工具相关
|   |-- webpack.base.conf.js         // webpack基础配置
|   |-- webpack.dev.conf.js          // webpack开发环境配置
|   |-- webpack.prod.conf.js         // webpack生产环境配置
|-- config                           // 项目开发环境配置
|   |-- dev.env.js                   // 开发环境变量
|   |-- index.js                     // 项目一些配置变量
|   |-- prod.env.js                  // 生产环境变量
|   |-- test.env.js                  // 测试环境变量
|-- src                              // 源码目录
|   |-- components                     // vue公共组件
|   |-- store                          // vuex的状态管理
|   |-- App.vue                        // 页面入口文件
|   |-- main.js                        // 程序入口文件,加载各种公共组件
|-- static                           // 静态文件,比如一些图片,json数据等
|   |-- data                           // 群聊分析得到的数据用于数据可视化
|-- .babelrc                         // ES6语法编译配置
|-- .editorconfig                    // 定义代码格式
|-- .gitignore                       // git上传需要忽略的文件格式
|-- README.md                        // 项目说明
|-- favicon.ico
|-- index.html                       // 入口页面
|-- package.json                     // 项目基本信息
.

package.json

package.json文件是项目根目录下的一个文件,定义该项目开发所需要的各种模块以及一些项目配置信息(如项目名称、版本、描述、作者等)。

scripts字段

package.json文件里有一个scripts字段。

"scripts": {"dev": "node build/dev-server.js","build": "node build/build.js"}

在开发环境下,在命令行中运行npm run dev就相当于在执行node build/dev-server.js。所以script字段是用来指定npm相关命令的缩写的。

dependencies字段和devDependencies字段

dependencies字段指定了项目运行时所依赖的模块,devDependencies字段指定了项目开发时所依赖的模块。在命令行中运行npm install命令,会自动安装dependencies和devDependencies字段中的模块。
package.json还有很多配置相关项,想进一步了解package.json的可参考:https://docs.npmjs.com/files/package.json

webpack配置相关

上面说到在命令行中npm run dev就相当于在执行node build/dev-server.js,想必dev-server.js这个文件是十分重要的,它是在开发环境下构建时第一个要运行的文件。掘金上已经有一篇对vue-cli#2.0 webpack配置的分析文章,里面详细讲解了webpack相关配置文件的每行代码的意思,我只做一些补充。链接在此(一定要自习阅读,收获会很大):https://gold.xitu.io/post/584e48b2ac502e006c74a120。

dev-server.js

...
...
// http-proxy可以实现转发所有请求代理到后端真实API地址,以实现前后端开发完全分离
// 在config/index.js中可以对proxyTable想进行配置
var proxyMiddleware = require('http-proxy-middleware')
...
...
// 热加载要使用webpack-dev-middleware在没有webpack-dev-server的时候进行热加载
var hotMiddleware = require('webpack-hot-middleware')(compiler)
// 当html-webpack-plugin模板改变是强制进行页面重新加载
compiler.plugin('compilation', function (compilation) {compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {hotMiddleware.publish({ action: 'reload' })cb()})
})

webpack.base.conf.js

...
...
module.export = {// 编译入口文件entry: {},// 编译输出路径output: {},// 一些解决方案配置resolve: {},resolveLoader: {},module: {// 各种不同类型文件加载器配置loaders: {......// js文件用babel转码{test: /\.js$/,loader: 'babel',include: projectRoot,// 哪些文件不需要转码exclude: /node_modules/},......}},// vue文件一些相关配置vue: {}
} 

check-version.js

这个文件主要是用来检测当前环境中的node和npm版本和我们需要的是否一致的。

// 加载语义化版本测试库
var semver = require('semver')
// 定制控制台日志的输入样式
var chalk = require('chalk')
// 引入package.json文件
var packageConfig = require('../package.json')
var exec = function (cmd) {return require('child_process').execSync(cmd).toString().trim()
}
// 定义node和npm版本需求所组成的数组
var versionRequirements = [{name: 'node',currentVersion: semver.clean(process.version),versionRequirement: packageConfig.engines.node},{name: 'npm',currentVersion: exec('npm --version'),versionRequirement: packageConfig.engines.npm}
]
module.exports = function () {var warnings = []// 依次判断版本是否符合要求for (var i = 0; i < versionRequirements.length; i++) {var mod = versionRequirements[i]if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {warnings.push(mod.name + ': ' +chalk.red(mod.currentVersion) + ' should be ' +chalk.green(mod.versionRequirement))}}...
}

想把webpack完全搞懂还是需要费很大功夫的,我感觉自己也只是入了一个门而已,要想深入了解webpack还是要去官网看说明文档。

  1. http://webpack.github.io/docs/

  2. https://webpack.js.org/configuration/

.babelrc

Babel解释器的配置文件,存放在根目录下。Babel是一个转码器,项目里需要用它将ES6代码转为ES5代码。这里有一篇阮一峰老师写的相关文章供参考:Babel 入门教程

  // 设定转码规则"presets": ["es2015", "stage-2"],// 转码的一些插件"plugins": ["transform-runtime"],"comments": false 

.editorconfig

该文件定义项目的编码规范,编辑器的行为会与.editorconfig 文件中定义的一致,并且其优先级比编辑器自身的设置要高,这在多人合作开发项目时十分有用而且必要。

root = true[*]    // 对所有文件应用下面的规则
charset = utf-8                    // 编码规则用utf-8
indent_style = space               // 缩进用空格
indent_size = 2                    // 缩进数量为2个空格
end_of_line = lf                   // 换行符格式
insert_final_newline = true        // 是否在文件的最后插入一个空行
trim_trailing_whitespace = true    // 是否删除行尾的空格

了解更多请参考官方配置文档http://editorconfig.org/

接触vue并不久,很多东西也不是特别清楚,文章里有什么问题欢迎指出。

vue-cli#2.0项目结构分析相关推荐

  1. Vue CLI 3.0脚手架如何在本地配置mock数据

    前后端分离的开发模式已经是目前前端的主流模式,至于为什么会前后端分离的开发我们就不做过多的阐述,既然是前后端分离的模式开发肯定是离不开前端的数据模拟阶段. 我们在开发的过程中,由于后台接口的没有完成或 ...

  2. vue/cli 3.0 与 2.0脚手架怎样mock数据

    vue/cli 3.0 与 2.0脚手架怎样mock数据 3.0 移除了 static 文件目次,新增了 public 目次,这个目次下的静态资本不会经由 webpack 的处置惩罚,会被直接拷贝,所 ...

  3. Vue CLI 3.0脚手架如何在本地配置mock数据json

    前后端分离的开发模式已经是目前前端的主流模式,至于为什么会前后端分离的开发我们就不做过多的阐述,既然是前后端分离的模式开发肯定是离不开前端的数据模拟阶段. 我们在开发的过程中,由于后台接口的没有完成或 ...

  4. 专访Vue作者尤雨溪:Vue CLI 3.0重构的原因

    1.为什么要对 Vue CLI 进行大规模修改? 尤雨溪认为旧版本的 Vue CLI 本质上只是从 GitHub 拉取模版,这种拉模版的方式有几个问题: (1) 在单个模版里面同时支持太多选项会导致模 ...

  5. Vue CLI 3.0正式发布!

    web前端教程 用大白话,来讲编程 网友们纷纷点赞,也有网友调侃学不动了! 尤雨溪表示,Vue CLI 3.0 与其他的版本完全不同,它经历了重构,目的是: 1.尽可能减少现代前端工具在配置上的烦恼, ...

  6. 如何使用@vue/cli 3.0在npm上创建,发布和使用你自己的Vue.js组件库

    译者按: 你可能npm人家的包过成千上万次,但你是否有创建,发布和使用过自己的npm包? 原文: How to create, publish and use your own VueJS Compo ...

  7. @vue/cli 3.0 eslint 转成tslint

    我们用 vue/cli 创建新项目的时候,通常会选择代码检查工具 [eslint|tslint],有的时候难免会选错,这个时候想要替换,怎么办 场景再现 vue create lint-vue 为了方 ...

  8. Vue CLI 3.0 正式发布,Vue.js 开发标准化工具

    Vue CLI 3.0 已发布,该版本经历了重构,旨在: 减少现代前端工具的配置烦扰,尤其是在将多个工具混合在一起使用时: 尽可能在工具链中加入最佳实践,让它成为任意 Vue 应用程序的默认实践. V ...

  9. Vue Cli 3.0打包生成app

    1.vue cli 3.0创建新工程,添加依赖mint-ui  ​ 2.项目配置中,公共路径设置为./,(注意,这一步非常重要,否则打包后项目找不到项目中文件) 修改保存后,可以看到vue.confi ...

  10. Vue 脚手架生成的项目结构分析||Vue 脚手架的自定义配置

    Vue 脚手架生成的项目结构分析 Vue 脚手架的自定义配置

最新文章

  1. 弯曲评论上关于SOC的一段文章【整理】
  2. 惊呆了!Spring Boot 还能远程调试?
  3. OPENWRT串口收发测试详解
  4. 堆积柱形图显示总数_送你一份堆积柱形图小点心,请收下~
  5. JQuery中的事件委托
  6. 2021年中国专业话筒市场趋势报告、技术动态创新及2027年市场预测
  7. digital ocean 内存不足时增加swap文件的方法
  8. 干货分享:如何挑选一款高效的原型工具?
  9. 简单的小愿望,就这么难实现
  10. Mac——snip滚动截图
  11. gp数据库主节点故障导致数据库无法重启报错
  12. android app怎么给界面加背景图,想做一个Android app,但是背景不能铺满整个页面,不知道大家是用什么样的图片?...
  13. mybatis type-aliases-package
  14. TAM: TEMPORAL ADAPTIVE MODULE FOR VIDEO RECOGNITION ∗
  15. 程序员为什么不会修电脑
  16. WLT8016:BLE蓝牙的一些基本概念
  17. 两个小时倒计时计时器
  18. 辐射骚扰测试软件,电磁兼容EMC测试
  19. mac 读linux格式文件内容,linux和mac osx 下查找替换并保存文件的方法
  20. Dcoker安装mysql

热门文章

  1. 基于Javaweb实现企业财务管理系统
  2. FeiBoStr 斐波那契
  3. django之全文检索
  4. nyoj7——街区最短问题
  5. 【二维树状数组】See you~
  6. Rabbit MQ安装配置及常见问题
  7. cocos2d-lua 3.5 android搭建常见错误
  8. Lua 性能相关笔记
  9. .Net WEB打印需要设置的内容和方法
  10. 限制TextBox的长度