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

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

(一) package.json 配置文件

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

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

1. scripts

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

  1. 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启动时调用的配置文件

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

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

2. dependencies 和 devDependencies

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

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

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

  1. #将该模块写入dependencies属性
  2. cnpm install <name> --save
  3. #该模块写入devDependencies属性
  4. 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 路由文件

  1. /* 使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter)*/
  2. import Vue from 'vue'
  3. import Router from 'vue-router'
  4. Vue.use(Router);
  5. /*定义路由*/
  6. export default new Router({
  7. /*当切换到新路由时,想要页面滚到顶部。不设置页面将在默认的地方*/
  8. scrollBehavior(to, from, savedPosition) {
  9. return {x: 0, y: 0}
  10. },
  11. routes: [{ ------------------------配置路由
  12. path: '/', ------------------------路由路径
  13. redirect: '/home' ------------------------路由重定向
  14. },
  15. {
  16. path: '/home',
  17. name: 'home', -------------------------路由需要的组件
  18. component: (resolve) => require(['@/views/home/home.vue'], resolve),
  19. },
  20. {
  21. path: '/login',
  22. name: 'login',
  23. component: (resolve) => require(['@/views/login/login.vue'], resolve),
  24. meta: { ---------------路由的元信息
  25. title: '登录'
  26. }
  27. },
  28. }]
  29. })

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

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

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

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

  1. /*定义变量,引入需要的配置*/
  2. 'use strict'
  3. const path = require('path')
  4. const utils = require('./utils')
  5. const config = require('../config')
  6. const vueLoaderConfig = require('./vue-loader.conf')
  7. const vuxLoader = require('vux-loader')
  8. var PostCompilePlugin = require('webpack-post-compile-plugin')
  9. var TransformModulesPlugin = require('webpack-transform-modules-plugin')
  10. /*处理路径的函数*/
  11. function resolve(dir) {
  12. return path.join(__dirname, '..', dir)
  13. }
  14. module.exports = {
  15. context: path.resolve(__dirname, '../'), //基础路径
  16. entry: {
  17. app: './src/main.js' //入口文件
  18. },
  19. output: {
  20. path: config.build.assetsRoot, //输出文件,默认是打包编译之后会生成一个dist文件夹来存储输出文件
  21. filename: '[name].js', //输出文件名字
  22. publicPath: process.env.NODE_ENV === 'production' ? //生产环境和开发环境判断,来确定引用的publicpath
  23. config.build.assetsPublicPath : config.dev.assetsPublicPath
  24. },
  25. resolve: { //解析确定的扩展名,方便模块的导入
  26. extensions: ['.js', '.vue', '.json'],
  27. alias: { //创建别名
  28. 'vue$': 'vue/dist/vue.esm.js',
  29. '@': resolve('src'), //方便模块的引用,比如@/components/HelloWorld = src/components/HelloWorld
  30. }
  31. },
  32. module: { //模块的相关配置
  33. rules: [{
  34. test: /\.vue$/,
  35. loader: 'vue-loader',
  36. options: vueLoaderConfig
  37. },
  38. {
  39. test: /\.js$/,
  40. loader: 'babel-loader', //babel,用来将es6转换为es5,解决部分浏览器不支持es6的问题
  41. include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
  42. },
  43. {
  44. test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, //图片类型
  45. loader: 'url-loader', //url-loader 文件大小低于指定的限制时,可返回 DataURL,即base64
  46. options: {
  47. limit: 10000, //默认无限制
  48. name: utils.assetsPath('img/[name].[hash:7].[ext]')
  49. }
  50. },
  51. {
  52. test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, //音频类型
  53. loader: 'url-loader',
  54. options: {
  55. limit: 10000,
  56. name: utils.assetsPath('media/[name].[hash:7].[ext]')
  57. }
  58. },
  59. {
  60. test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, //字体类型
  61. loader: 'url-loader',
  62. options: {
  63. limit: 10000,
  64. name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
  65. }
  66. }
  67. ]
  68. },
  69. node: {
  70. setImmediate: false,
  71. dgram: 'empty',
  72. fs: 'empty',
  73. net: 'empty',
  74. tls: 'empty',
  75. child_process: 'empty'
  76. },
  77. plugins:[ //可以添加自定义的插件
  78. new PostCompilePlugin(),
  79. new TransformModulesPlugin()
  80. ]
  81. }

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

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

  1. 'use strict'
  2. const utils = require('./utils')
  3. const webpack = require('webpack')
  4. const config = require('../config') //基础配置的参数
  5. const merge = require('webpack-merge') //用来合并webpack配置文件的
  6. const path = require('path')
  7. const baseWebpackConfig = require('./webpack.base.conf') //引入webpack基础的配置文件
  8. const CopyWebpackPlugin = require('copy-webpack-plugin')
  9. const HtmlWebpackPlugin = require('html-webpack-plugin') //帮你自动生成一个html5文件, 这个文件中自动引用了你打包后的JS文件。每次编译都在文件名中插入一个不同的hash值。可以去打包后的dist文件夹中查看html文件
  10. const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') //能在终端更好的查看webpack的警告和错误
  11. const portfinder = require('portfinder') //自动检索下一个可用端口,比如8080端口被占用,启动后会自动调用8081端口打开项目
  12. const HOST = process.env.HOST //读取系统环境变量host
  13. const PORT = process.env.PORT && Number(process.env.PORT) //读取系统环境变量端口号
  14. const devWebpackConfig = merge(baseWebpackConfig, { //合并基础配置文件
  15. module: {
  16. rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
  17. },
  18. devtool: config.dev.devtool,
  19. devServer: { //webpack-dev-server服务器配置
  20. clientLogLevel: 'warning',
  21. historyApiFallback: {
  22. rewrites: [
  23. { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
  24. ],
  25. },
  26. hot: true, //开启热加载,热加载是指代码启动后,修改代码,会自动检测代码的更新,浏览器自动渲染更新的部分
  27. contentBase: false,
  28. compress: true,
  29. host: HOST || config.dev.host,
  30. port: PORT || config.dev.port,
  31. open: config.dev.autoOpenBrowser, //启动项目的时候自动打开浏览器,默认的是false。可以在config/index.js中修改为true,启动的时候就会自动打开浏览器
  32. overlay: config.dev.errorOverlay
  33. ? { warnings: false, errors: true }
  34. : false,
  35. publicPath: config.dev.assetsPublicPath,
  36. proxy: config.dev.proxyTable, //代理设置,前后端分离,解决跨域问题
  37. quiet: true, // necessary for FriendlyErrorsPlugin
  38. watchOptions: {
  39. poll: config.dev.poll,
  40. }
  41. },
  42. plugins: [ //webpack一些构建用到的插件
  43. new webpack.DefinePlugin({
  44. 'process.env': require('../config/dev.env')
  45. }),
  46. new webpack.HotModuleReplacementPlugin(), //模块热替换它允许在运行时更新各种模块,而无需进行完全刷新
  47. new webpack.NamedModulesPlugin(),
  48. new webpack.NoEmitOnErrorsPlugin(),
  49. /*打包后会自动生成一个html文件,并自动将 打包过程中输出的js、css的路径添加到html文件中,css文件插入到head中*/
  50. new HtmlWebpackPlugin({
  51. filename: 'index.html', // 指定编译后生成的html文件名
  52. template: 'index.html',
  53. inject: true
  54. }),
  55. new CopyWebpackPlugin([
  56. {
  57. from: path.resolve(__dirname, '../static'),
  58. to: config.dev.assetsSubDirectory,
  59. ignore: ['.*']
  60. }
  61. ])
  62. ]
  63. })
  64. module.exports = new Promise((resolve, reject) => {
  65. portfinder.basePort = process.env.PORT || config.dev.port
  66. portfinder.getPort((err, port) => {
  67. if (err) {
  68. reject(err)
  69. } else {
  70. process.env.PORT = port;
  71. devWebpackConfig.devServer.port = port;
  72. devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ //webpack错误提示的插件
  73. compilationSuccessInfo: {
  74. messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
  75. },
  76. onErrors: config.dev.notifyOnErrors
  77. ? utils.createNotifierCallback()
  78. : undefined
  79. }))
  80. resolve(devWebpackConfig)
  81. }
  82. })
  83. })

(五)src/app.vue vue文件

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

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

  1. import Vue from 'vue'
  2. import router from './router'
  3. Vue.config.productionTip = false; //生产环境提示,这里设置成了false
  4. // 引入reset.scss
  5. import './assets/styles/reset.scss'
  6. // 引入小图标
  7. import 'font-awesome/css/font-awesome.css'
  8. /*引入vue-awesome-swiper组件和样式,swsiper参考4.x的API,前提,先安装vue-awesome-swiper插件*/
  9. import VueAwesomeSwiper from 'vue-awesome-swiper'
  10. import 'swiper/dist/css/swiper.css'
  11. Vue.use(VueAwesomeSwiper);
  12. /*引入vuex*/
  13. import store from '@/utils/vuex.js'
  14. 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. binding(转)

    1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...

  2. mybatis 原理

    什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...

  3. DPDK L2fwd 源码阅读

    代码部分 /* SPDX-License-Identifier: BSD-3-Clause * Copyright(c) 2010-2016 Intel Corporation */ #include ...

  4. 结对作业-四则运算GUI

    目录: 一.项目地址二.PSP三.接口设计四.计算模块接口的设计与实现过程五.计算模块接口部分的性能改进六.计算模块部分单元测试展示七.计算模块部分异常处理说明八.界面模块的详细设计过程九.界面模块与 ...

  5. LeetCode题解:(19) Remove Nth Node From End of List

    题目说明 Given a linked list, remove the nth node from the end of list and return its head. For example, ...

  6. C# 调用 taskkill命令结束服务进程

    获取服务映像名称 windows服务安装后会在注册表中存储服务信息,路径是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[服务名称] 通过I ...

  7. YARN的重启动问题:RM Restart/RM HA/Timeline Server/NM Restart

    ResourceManger Restart ResourceManager负责资源管理和应用的调度,是YARN的核心组件,有可能存在单点失败的问题.ResourceManager Restart是使 ...

  8. vue element 新增、编辑类Dialog公用函数

    调用 <el-button type="primary" class="my-button" size="small" :loadin ...

  9. win10与Ubantu双系统:Linux下开启FTP服务器与创建无线热点(实现文件共享)

    如何在win系统下使用filelizza这个软件搭建FTP服务器,然后建立一个无线局域网,让平板终端连接以后,访问电脑硬盘的文件. 如果是只在win7环境下,一切都很简单,按照上文提供的教程就可以实现 ...

  10. 【转】嵌入式Linux驱动面试题三道

    题一: Linux设备中字符设备与块设备有什么主要的区别? 字符设备:字符设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性.字符设备驱动程序通常至少实现open,cl ...