建立一个vue-cli 项目,总结网上已有资料。
首先要安装node.js,才能安装vue。html
npm install -g vue-clivue
vue --versionnode
vue init webpack/simple/browserify myFirstProject 建立项目webpack
cd myFirstProject 进入项目git
npm install 安装依赖github
npm run dev 启动web
下面是建立好的项目:vuex
项目结构一览:
.
|-- 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 // 项目基本信息
.vue-cli
package.jsonnpm
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/...
webpack配置相关
上面说到在命令行中npm run dev就至关于在执行node build/dev-server.js,想必dev-server.js这个文件是十分重要的,它是在开发环境下构建时第一个要运行的文件。掘金上已经有一篇对vue-cli#2.0 webpack配置的分析文章,里面详细讲解了webpack相关配置文件的每行代码的意思,我只作一些补充。连接在此(必定要自习阅读,收获会很大):https://gold.xitu.io/post/584...。
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仍是要去官网看说明文档。
http://webpack.github.io/docs/ 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 // 是否删除行尾的空格