之前已经介绍了关于Vue的脚手架vue-cli的安装,以及一些文件目录介绍。具体可以查看《vue 入坑教程(一)——搭建vue-cli脚手架》

下面简单说一下具体的文件介绍

(一) package.json 配置文件

package.json是项目的配置文件,里面是项目的相关的包依赖,npm运行命令,位于项目根目录。

{
"name": "ddlcwecaht", ---------------------项目名称
"version": "1.0.0", ---------------------项目版本号(以上两者是必须的,否则无法执行install)
"description": "A Vue.js project", ---------------------项目描述
"author": "wujy", ---------------------作者名称(以上这些都和vue-cli搭建的时候填写的信息是一致的,当然这里也可以修改)
"private": true,
"scripts": { ---------------------定义npm命令
"dev": "webpack-dev-server --inline --progress --open --config build/webpack.dev.conf.js", ------------cnpm run dev 运行项目
"start": "npm run dev", ----------------------和上面的相同,运行项目
"build": "node build/build.js" ----------------------cnpm run build项目打包构建
},
"dependencies": { ---------------------运行时的依赖
"axios": "^0.18.0",
"vue": "^2.5.2",
"vue-router": "^3.0.1",
"vuex": "^3.0.1",
"vux": "^2.9.0"
},
"devDependencies": { -----------------------开发时的依赖
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-loader": "^7.1.1",
"babel-plugin-import": "^1.7.0"
……
},
"engines": { -------------------------环境的版本号
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [ ------------------------浏览器的版本号
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}

1. scripts

指定了运行脚本命令的npm命令行缩写,比如start指定了运行npm run start时,所要执行的命令。

dev: "webpack-dev-server --inline --progress --open --config build/webpack.dev.conf.js"

执行命令:cnpm run dev,其中webpack-dev-server启动本地的服务器, --inline --progress启动时分行展示启动的进度条,--open启动完成后自动打开浏览器,--config build/webpack.dev.conf.js启动时调用的配置文件

"build": "node build/build.js"

执行的命令: cnpm run buildbuild/build.js运行时调用的配置文件,命令执行之后会生成一个dist文件夹,里面存放的是打包构建后的文档,用于正式环境。

2. dependencies 和 devDependencies

这两项分别是项目运行所依赖的模块、项目开发所依赖的模块。他们的成员比如 "vue": "^2.5.2",分别由模块名和对应的版本号组成,表示依赖的模块及其版本范围。

这些依赖在执行了cnpm install之后都会添加到node_modules文件夹中。

可以通过命令添加自己需要的依赖:(这里使用的是淘宝镜像)

#将该模块写入dependencies属性
cnpm install <name> --save
#该模块写入devDependencies属性
cnpm install <name> --save-dev

命令执行结束之后,刷新,可以看到package.json里面对应的增加了刚才下载的依赖,同样的在node_modules文件夹里也增加了相同对应的依赖

3. engines 和 browserslist

分别表示项目所需要的node.js版本号、浏览器的版本号。

注意:

  1. vue不支持IE8及其以下的版本。
  2. 注意本地的node的版本号是否符合。 可以打开命令行控制面板,通过node -vnpm -v查看本地的版本号
  3. package.json 文档中不能加注释,不然会报错

(二)src/router/index.js 路由文件

/* 使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter)*/
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router);
/*定义路由*/
export default new Router({
/*当切换到新路由时,想要页面滚到顶部。不设置页面将在默认的地方*/
scrollBehavior(to, from, savedPosition) {
return {x: 0, y: 0}
},
routes: [{ ------------------------配置路由
path: '/', ------------------------路由路径
redirect: '/home' ------------------------路由重定向
},
{
path: '/home',
name: 'home', -------------------------路由需要的组件
component: (resolve) => require(['@/views/home/home.vue'], resolve),
},
{
path: '/login',
name: 'login',
component: (resolve) => require(['@/views/login/login.vue'], resolve),
meta: { ---------------路由的元信息
title: '登录'
}
},
}]
})

具体的可以参考官网vue-router

代码中可以通过this.$router来使用,实现页面跳转,路由信息的传值。

(三) 基础配置文件 webpack.base.conf.js

这是webpack最为基础的配置文件,主要是来定义入口文件,处理vue,babel等各种模块。由此还有两个配置文件分别是开发环境配置文件 webpack.dev.conf.js 生产模式配置文件 webpack.prod.conf.js

/*定义变量,引入需要的配置*/
'use strict'
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const vueLoaderConfig = require('./vue-loader.conf')
const vuxLoader = require('vux-loader')
var PostCompilePlugin = require('webpack-post-compile-plugin')
var TransformModulesPlugin = require('webpack-transform-modules-plugin')
/*处理路径的函数*/
function resolve(dir) {
return path.join(__dirname, '..', dir)
} module.exports = {
context: path.resolve(__dirname, '../'), //基础路径
entry: {
app: './src/main.js' //入口文件
},
output: {
path: config.build.assetsRoot, //输出文件,默认是打包编译之后会生成一个dist文件夹来存储输出文件
filename: '[name].js', //输出文件名字
publicPath: process.env.NODE_ENV === 'production' ? //生产环境和开发环境判断,来确定引用的publicpath
config.build.assetsPublicPath : config.dev.assetsPublicPath
},
resolve: { //解析确定的扩展名,方便模块的导入
extensions: ['.js', '.vue', '.json'],
alias: { //创建别名
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src'), //方便模块的引用,比如@/components/HelloWorld = src/components/HelloWorld
}
},
module: { //模块的相关配置
rules: [{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
{
test: /\.js$/,
loader: 'babel-loader', //babel,用来将es6转换为es5,解决部分浏览器不支持es6的问题
include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, //图片类型
loader: 'url-loader', //url-loader 文件大小低于指定的限制时,可返回 DataURL,即base64
options: {
limit: 10000, //默认无限制
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, //音频类型
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('media/[name].[hash:7].[ext]')
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, //字体类型
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
]
},
node: {
setImmediate: false,
dgram: 'empty',
fs: 'empty',
net: 'empty',
tls: 'empty',
child_process: 'empty'
},
plugins:[ //可以添加自定义的插件
new PostCompilePlugin(),
new TransformModulesPlugin()
]
}

(四)开发环境配置文件 webpack.dev.conf.js

开发环境的配置文件在项目启动的时候就会运用的,比较重要。

'use strict'
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config') //基础配置的参数
const merge = require('webpack-merge') //用来合并webpack配置文件的
const path = require('path')
const baseWebpackConfig = require('./webpack.base.conf') //引入webpack基础的配置文件
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin') //帮你自动生成一个html5文件, 这个文件中自动引用了你打包后的JS文件。每次编译都在文件名中插入一个不同的hash值。可以去打包后的dist文件夹中查看html文件
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') //能在终端更好的查看webpack的警告和错误
const portfinder = require('portfinder') //自动检索下一个可用端口,比如8080端口被占用,启动后会自动调用8081端口打开项目
const HOST = process.env.HOST //读取系统环境变量host
const PORT = process.env.PORT && Number(process.env.PORT) //读取系统环境变量端口号
const devWebpackConfig = merge(baseWebpackConfig, { //合并基础配置文件
module: {
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
},
devtool: config.dev.devtool,
devServer: { //webpack-dev-server服务器配置
clientLogLevel: 'warning',
historyApiFallback: {
rewrites: [
{ from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
],
},
hot: true, //开启热加载,热加载是指代码启动后,修改代码,会自动检测代码的更新,浏览器自动渲染更新的部分
contentBase: false,
compress: true,
host: HOST || config.dev.host,
port: PORT || config.dev.port,
open: config.dev.autoOpenBrowser, //启动项目的时候自动打开浏览器,默认的是false。可以在config/index.js中修改为true,启动的时候就会自动打开浏览器
overlay: config.dev.errorOverlay
? { warnings: false, errors: true }
: false,
publicPath: config.dev.assetsPublicPath,
proxy: config.dev.proxyTable, //代理设置,前后端分离,解决跨域问题
quiet: true, // necessary for FriendlyErrorsPlugin
watchOptions: {
poll: config.dev.poll,
}
},
plugins: [ //webpack一些构建用到的插件
new webpack.DefinePlugin({
'process.env': require('../config/dev.env')
}),
new webpack.HotModuleReplacementPlugin(), //模块热替换它允许在运行时更新各种模块,而无需进行完全刷新
new webpack.NamedModulesPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
/*打包后会自动生成一个html文件,并自动将 打包过程中输出的js、css的路径添加到html文件中,css文件插入到head中*/
new HtmlWebpackPlugin({
filename: 'index.html', // 指定编译后生成的html文件名
template: 'index.html',
inject: true
}),
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.dev.assetsSubDirectory,
ignore: ['.*']
}
])
]
}) module.exports = new Promise((resolve, reject) => {
portfinder.basePort = process.env.PORT || config.dev.port
portfinder.getPort((err, port) => {
if (err) {
reject(err)
} else {
process.env.PORT = port;
devWebpackConfig.devServer.port = port;
devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ //webpack错误提示的插件
compilationSuccessInfo: {
messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
},
onErrors: config.dev.notifyOnErrors
? utils.createNotifierCallback()
: undefined
}))
resolve(devWebpackConfig)
}
})
})

(五)src/app.vue vue文件

<template>
<div id="app">
<img src="./assets/logo.png">
<router-view></router-view>
</div>
</template> <script>
export default {
name: 'app',
data(){
return {}
},
methods:{}
}
</script> <style lang="scss" scoped>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
  1. <template></template>标签内存放的是 HTMLDOM 结构,注意:只能有一个顶级标签
  2. <script></script>标签内存放的是 js 内容,用来写逻辑代码。里面有data,methods,props,components……等,具体的可以参考Vue官网
  3. <style></style>标签内放的是 CSS 样式,加上scoped 表示该样式只在这个.vue文件中有效,还可以用scss来写,具体请自行百度查询。

(六)src/main.js 入口文件

import Vue from 'vue'
import router from './router'
Vue.config.productionTip = false; //生产环境提示,这里设置成了false // 引入reset.scss
import './assets/styles/reset.scss' // 引入小图标
import 'font-awesome/css/font-awesome.css' /*引入vue-awesome-swiper组件和样式,swsiper参考4.x的API,前提,先安装vue-awesome-swiper插件*/
import VueAwesomeSwiper from 'vue-awesome-swiper'
import 'swiper/dist/css/swiper.css'
Vue.use(VueAwesomeSwiper);
/*引入vuex*/
import store from '@/utils/vuex.js'
new Vue({router, store}).$mount('#app');

项目的入口文件main.js,全局的设置可以在这里添加。

(七)其他

  1. 编码规范.editorconfig
  2. babel配置文件.babelrc
  3. 实用代码段 utils.js
  4. 编译入口文件build.js
  5. 生产模式配置文件 webpack.prod.conf.js

写的有点乱,本文的参考文章:《vue-cli项目结构详解》,作者博客:tanzhenyan的博客

Vue入坑教程(二)——项目结构详情介绍的更多相关文章

  1. Vue入坑教程(一)——搭建vue-cli脚手架

    1. Vue简介 详细内容可以参考官网Vue.js 1)兼容性 Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性.但它支持所有兼容 ECMA ...

  2. vue入坑教程(二)在vue项目中如何导入element以及sass

    在项目中导入element以及sass.stylus等方便开发的工具以及UI框架 (1)如何在vue项目中导入elementUI框架 elementUI是饿了么团队开发出来基于vue的前端UI框架,其 ...

  3. vue入坑教程(一)

    1.脚手架搭配webpack的安装 (1)需要检查自己的电脑有没有安装node和npm 如果没有安装可以参考官网,以及安装的步骤 官方中文网地址:http://nodejs.cn/ (2)下载webp ...

  4. vue入坑教程(三)vue父子组件之间互相调用方法以及互相传递数据

    1.父组件调用子组件的方法 父组件: <template> <div> <button v-on:click="clickParent">点击& ...

  5. 《Asp.Net Core3 + Vue3入坑教程》 - Vue 1.使用vue-cli创建vue项目

    简介 <Asp.Net Core3 + Vue3入坑教程> 此教程适合新手入门或者前后端分离尝试者.可以根据图文一步一步进操作编码也可以选择直接查看源码.每一篇文章都有对应的源码 目录 & ...

  6. 《Asp.Net Core3 + Vue3入坑教程》-Net Core项目搭建与Swagger配置步骤

    简介 <Asp.Net Core3 + Vue3入坑教程> 此教程仅适合新手入门或者前后端分离尝试者.可以根据图文一步一步进操作编码也可以选择直接查看源码.每一篇文章都有对应的源码 教程后 ...

  7. Vue2.0史上最全入坑教程(下)—— 实战案例

    书接上文 前言:经过前两节的学习,我们已经可以创建一个vue工程了.下面我们将一起来学习制作一个简单的实战案例. 说明:默认我们已经用vue-cli(vue脚手架或称前端自动化构建工具)创建好项目了 ...

  8. Vue入坑第一篇

    写在前面的话:文章是个人学习过程中的总结,为方便以后回头在学习.文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. 一.前言 本篇作为vue入门的一 ...

  9. 《Asp.Net Core3 + Vue3入坑教程》 - 6.异常处理与UserFriendlyException

    简介 <Asp.Net Core3 + Vue3入坑教程> 此教程适合新手入门或者前后端分离尝试者.可以根据图文一步一步进操作编码也可以选择直接查看源码.每一篇文章都有对应的源码 目录 & ...

随机推荐

  1. Unity3D游戏开发——访问集中式共享模块的设计模式

    什么是设计模式 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.设计模式是开发人员在开发过程中面临的一般问题的解决方案,这些解决方案是众多开发人 ...

  2. 牛客网国庆集训派对Day3题目 2018年

    链接:https://www.nowcoder.com/acm/contest/203/D来源:牛客网 Shopping 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...

  3. 在dell服务器上装windows server 2012详细解析

    壹: 首先确定磁盘阵列的问题,在dell服务器开机后按住 Ctrl+R 或者 F2 会展开虚拟磁盘创建菜单 详细步骤可以查看:https://jingyan.baidu.com/article/915 ...

  4. 11th 单元测试工具JUnit的学习

    1.写好一个简易的四则运算的程序 UnitTest类文件: public class UnitTest { int a; int b; int answer;//正确答案 public int plu ...

  5. HDU 2086 A1 = ?

    http://acm.hdu.edu.cn/showproblem.php?pid=2086 Problem Description 有如下方程:Ai = (Ai-1 + Ai+1)/2 - Ci ( ...

  6. 笔记之分布式文件系统(DFS)

    不知何故,老外都挺喜欢使用DFS,但是国内公司用这个的不多.一个具体的需求就是,备份服务器在国外,所以启用DFS把国内的数据同步一份到国外进行备份.最近有机会接触DFS,把一些心得体会记录一下. 1. ...

  7. [日常工作] 应用服务器上面应该尽量少开各种应用 --Chrome 内存泄露 让应用服务器非常缓慢

    1. 前段时间修改 服务器的密码 导致应用程序的web site 启动有问题 ,打开chrome 查看了错误详细信息 但是忘记关了.. 今天反馈机器非常缓慢 简单看了下内存 吐血... 所以以后不能在 ...

  8. override toString() function for TreeNode to output OJ's Binary Tree Serialization

    class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } @Override publ ...

  9. delphi如何检索adoquery里面某一列存在的重复行?

    var IsHave:Boolean; begin adoquery.first; while(not adoquery.eof) do begin if(adoquery.fieldbyname(' ...

  10. Qt——线程与定时器

    一.定时器QTimer类 The QTimer class provides repetitive and single-shot timers. The QTimer class provides ...