vue-cli的webpack模版,相关配置文件dev-server.js与webpack.config.js配置解析

1.下载vue-cli

[html] view plain copy

  1. npm install vue-cli -g

vue-cli的使用与详细介绍,可以到github上获取https://github.com/vuejs/vue-cli

2.安装webpack项目模版

[html] view plain copy

  1. vue init <template-name> <project-name>

比如:

[html] view plain copy

  1. vue init webpack my-project

之后可以在当前目录下下载该模版,然后

[html] view plain copy

  1. npm install

安装所有的依赖包,可以得到如下的目录结构

3.目录结构与文件配置说明

首先对目录结构进行说明,

1.build目录,主要利用webpack与node插件启动一些相关服务的js文件

2.config目录主要是针对开发环境,生产环境,测试环境的配置信息

3.src是我们自己开发时的源码目录(可指定修改名称)

4.static是一些第三方库的包用到的静态资源目录(可指定修改名称)

说明每个文件:

主要入口文件,dev-server.js文件,几乎每一句话都进行了注释,有些地方,涉及了其他关联文件,下面也会有相应的注释的方式

[html] view plain copy

  1. // 引入检查版本js模块
  2. require(‘./check-versions‘)()
  3. // 引入配置文件信息模块
  4. var config = require(‘../config‘)
  5. // 判断开发环境
  6. if (!process.env.NODE_ENV) process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV)
  7. // 引入nodejs的path模块,进行一些路径的操作,详情可以查看node官方的api
  8. var path = require(‘path‘)
  9. // 引入nodejs的一个框架express,可以帮助我们快速搭建一个node服务 github https://github.com/expressjs/express
  10. var express = require(‘express‘)
  11. // 引入node为webpack提供的一个模块服务 github https://github.com/webpack/webpack
  12. var webpack = require(‘webpack‘)
  13. // 可以指定打开指定的url使用指定的浏览器或者应用,详情可以去看一下github https://github.com/sindresorhus/opn
  14. var opn = require(‘opn‘)
  15. // 一个可以设置帮助我们进行服务器转发代理的中间件 https://github.com/chimurai/http-proxy-middleware
  16. var proxyMiddleware = require(‘http-proxy-middleware‘)
  17. // 根据当前启动环境选择加载相应的配置文件,webpack.prod.conf与webpack.dev.conf文件的说明后面也有
  18. var webpackConfig = process.env.NODE_ENV === ‘testing‘
  19. ? require(‘./webpack.prod.conf‘)
  20. : require(‘./webpack.dev.conf‘)
  21. // 端口号的设置
  22. var port = process.env.PORT || config.dev.port
  23. // 获取需要代理的服务api
  24. // https://github.com/chimurai/http-proxy-middleware
  25. var proxyTable = config.dev.proxyTable
  26. // 启动一个express服务
  27. var app = express()
  28. // 加载webpack配置
  29. var compiler = webpack(webpackConfig)
  30. // webpack的开发中间件,专门为webpack提供的一个简单的中间件,可以让文件都加载内存中,不去读写硬盘,并且当文件被改动的时候,不会刷新页面就会部署成功
  31. var devMiddleware = require(‘webpack-dev-middleware‘)(compiler, {
  32. publicPath: webpackConfig.output.publicPath,
  33. quiet: true
  34. })
  35. // 一个为webpack提供的热部署中间件。https://github.com/glenjamin/webpack-hot-middleware
  36. var hotMiddleware = require(‘webpack-hot-middleware‘)(compiler, {
  37. log: () => {}
  38. })
  39. // 当html被改变的时候,让html被强制部署,使用这个中间件html-webpack-plugin,https://github.com/ampedandwired/html-webpack-plugin
  40. compiler.plugin(‘compilation‘, function (compilation) {
  41. compilation.plugin(‘html-webpack-plugin-after-emit‘, function (data, cb) {
  42. hotMiddleware.publish({ action: ‘reload‘ })
  43. cb()
  44. })
  45. })
  46. // 遍历代理的配置信息,并且使用中间件加载进去
  47. Object.keys(proxyTable).forEach(function (context) {
  48. var options = proxyTable[context]
  49. if (typeof options === ‘string‘) {
  50. options = { target: options }
  51. }
  52. app.use(proxyMiddleware(context, options))
  53. })
  54. // 当访问找不到的页面的时候,该中间件指定了一个默认的页面返回https://github.com/bripkens/connect-history-api-fallback
  55. app.use(require(‘connect-history-api-fallback‘)())
  56. // 使用中间件
  57. app.use(devMiddleware)
  58. // 热部署
  59. app.use(hotMiddleware)
  60. // 根据配置信息拼接一个目录路径,然后将该路径下的文件交给express的静态目录管理
  61. var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory)
  62. app.use(staticPath, express.static(‘./static‘))
  63. var uri = ‘http://localhost:‘ + port
  64. devMiddleware.waitUntilValid(function () {
  65. console.log(‘> Listening at ‘ + uri + ‘\n‘)
  66. })
  67. // 导出的对象
  68. module.exports = app.listen(port, function (err) {
  69. if (err) {
  70. console.log(err)
  71. return
  72. }
  73. // when env is testing, don‘t need open it
  74. if (process.env.NODE_ENV !== ‘testing‘) {
  75. opn(uri)
  76. }
  77. })

webpack.base.conf.js

[html] view plain copy

  1. var path = require(‘path‘)
  2. var config = require(‘../config‘)
  3. // 工具类,下面会用到
  4. var utils = require(‘./utils‘)
  5. // 工程目录,就是当前目录build的上一层目录
  6. var projectRoot = path.resolve(__dirname, ‘../‘)
  7. var env = process.env.NODE_ENV
  8. // 是否在开发环境中使用cssSourceMap,默认是false,该配置信息在config目录下的index.js中可以查看
  9. var cssSourceMapDev = (env === ‘development‘ && config.dev.cssSourceMap)
  10. var cssSourceMapProd = (env === ‘production‘ && config.build.productionSourceMap)
  11. var useCssSourceMap = cssSourceMapDev || cssSourceMapProd
  12. // 导出的对象,就是webpack的配置项,详情可以参考的webpack的配置说明,这里会将出现的都一一说明一下
  13. module.exports = {
  14. // 指明入口函数
  15. entry: {
  16. app: ‘./src/main.js‘
  17. },
  18. // 输出配置项
  19. output: {
  20. // 路径,从config/index读取的,值为:工程目录下的dist目录,需要的自定义的也可以去修改
  21. path: config.build.assetsRoot,
  22. // 发布路径,这里是的值为/,正式生产环境可能是服务器上的一个路径,也可以自定义
  23. publicPath: process.env.NODE_ENV === ‘production‘ ? config.build.assetsPublicPath : config.dev.assetsPublicPath,
  24. filename: ‘[name].js‘
  25. },
  26. // 配置模块如何被解析,就是import或者require的一些配置
  27. resolve: {
  28. // 当使用require或者import的时候,自动补全下面的扩展名文件的扩展名,也就是说引入的时候不需要使用扩展名
  29. extensions: [‘‘, ‘.js‘, ‘.vue‘, ‘.json‘],
  30. // 当我们require的东西找不到的时候,可以去node_modules里面去找,
  31. fallback: [path.join(__dirname, ‘../node_modules‘)],
  32. // 别名,在我们require的时候,可以使用这些别名,来缩短我们需要的路径的长度
  33. alias: {
  34. ‘vue$‘: ‘vue/dist/vue.common.js‘,
  35. ‘src‘: path.resolve(__dirname, ‘../src‘),
  36. ‘assets‘: path.resolve(__dirname, ‘../src/assets‘),
  37. ‘components‘: path.resolve(__dirname, ‘../src/components‘)
  38. }
  39. },
  40. // 同上
  41. resolveLoader: {
  42. fallback: [path.join(__dirname, ‘../node_modules‘)]
  43. },
  44. // 对相应文件的编译使用什么工具的配置
  45. module: {
  46. // loader之前的配置,会对.vue,.js的文件用eslint进行编译,include是包含的文件,exclude是排除的文件,可以使用的正则
  47. preLoaders: [
  48. {
  49. test: /\.vue$/,
  50. loader: ‘eslint‘,
  51. include: [
  52. path.join(projectRoot, ‘src‘)
  53. ],
  54. exclude: /node_modules/
  55. },
  56. {
  57. test: /\.js$/,
  58. loader: ‘eslint‘,
  59. include: [
  60. path.join(projectRoot, ‘src‘)
  61. ],
  62. exclude: /node_modules/
  63. }
  64. ],
  65. // 这里也是相应的配置,test就是匹配文件,loader是加载器,
  66. // query比较特殊,当大小超过10kb的时候,会单独生成一个文件,文件名的生成规则是utils提供的方法,当小于10kb的时候,就会生成一个base64串放入js文件中
  67. loaders: [
  68. {
  69. test: /\.vue$/,
  70. loader: ‘vue‘
  71. },
  72. {
  73. test: /\.js$/,
  74. loader: ‘babel‘,
  75. include: [
  76. path.join(projectRoot, ‘src‘)
  77. ],
  78. exclude: /node_modules/
  79. },
  80. {
  81. test: /\.json$/,
  82. loader: ‘json‘
  83. },
  84. {
  85. test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
  86. loader: ‘url‘,
  87. query: {
  88. limit: 10000,
  89. name: utils.assetsPath(‘img/[name].[hash:7].[ext]‘)
  90. }
  91. },
  92. {
  93. test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
  94. loader: ‘url‘,
  95. query: {
  96. limit: 10000,
  97. name: utils.assetsPath(‘fonts/[name].[hash:7].[ext]‘)
  98. }
  99. }
  100. ]
  101. },
  102. // eslint的配置
  103. eslint: {
  104. formatter: require(‘eslint-friendly-formatter‘)
  105. },
  106. // vue-loader的配置
  107. vue: {
  108. loaders: utils.cssLoaders({ sourceMap: useCssSourceMap }),
  109. postcss: [
  110. require(‘autoprefixer‘)({
  111. browsers: [‘last 2 versions‘]
  112. })
  113. ]
  114. }
  115. }

webpack.dev.comf.js

[html] view plain copy

  1. var config = require(‘../config‘)
  2. var webpack = require(‘webpack‘)
  3. // https://github.com/survivejs/webpack-merge 提供一个合并生成新对象函数
  4. var merge = require(‘webpack-merge‘)
  5. var utils = require(‘./utils‘)
  6. var baseWebpackConfig = require(‘./webpack.base.conf‘)
  7. var HtmlWebpackPlugin = require(‘html-webpack-plugin‘)
  8. var FriendlyErrors = require(‘friendly-errors-webpack-plugin‘)
  9. // 在浏览器不刷新的情况下,也可以看到改变的效果,如果刷新失败了,他就会自动刷新页面
  10. Object.keys(baseWebpackConfig.entry).forEach(function (name) {
  11. baseWebpackConfig.entry[name] = [‘./build/dev-client‘].concat(baseWebpackConfig.entry[name])
  12. })
  13. module.exports = merge(baseWebpackConfig, {
  14. module: {
  15. // 后面会有对utils的解释,这里是对单独的css文件,用相应的css加载器来解析
  16. loaders: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap })
  17. },
  18. // 在开发模式下,可以在webpack下面找到js文件,在f12的时候,
  19. devtool: ‘#eval-source-map‘,
  20. // 将webpack的插件放入
  21. plugins: [
  22. // 通过插件修改定义的变量
  23. new webpack.DefinePlugin({
  24. ‘process.env‘: config.dev.env
  25. }),
  26. // webpack优化的这个一个模块,https://github.com/glenjamin/webpack-hot-middleware#installation--usage
  27. new webpack.optimize.OccurrenceOrderPlugin(),
  28. // 热加载
  29. new webpack.HotModuleReplacementPlugin(),
  30. // 当编译出现错误的时候,会跳过这部分代码
  31. new webpack.NoErrorsPlugin(),
  32. // filename生成的文件名,template是模版用的文件名,https://github.com/ampedandwired/html-webpack-plugin
  33. new HtmlWebpackPlugin({
  34. filename: ‘index.html‘,
  35. template: ‘index.html‘,
  36. // 让打包生成的html文件中css和js就默认添加到html里面,css就添加到head里面,js就添加到body里面
  37. inject: true
  38. }),
  39. new FriendlyErrors()
  40. ]
  41. })

utils.js和config目录下面的js文件都比较好辨认是干什么的,config下面都是配置信息,json对象,很好理解,utils下面就是导出了几个常用的方法,主要也就是用在了上述的几个js文件里面,另外关于生产阶段和测试阶段的js说明,后面会有文章说明

时间: 2024-08-03 09:34:20

vue-cli的webpack模版,相关配置文件dev-server.js与webpack.config.js配置解析的相关文章

JMeter学习-010-JMeter 配置文件实例之 - CSV Data Set Config 参数化配置

众所周知,在进行接口测试的过程中,需要创建不同的场景(不同条件的输入,来验证不同的入参的返回结果).因而,在日常的自动化接口监控或商品监控等线上监控过程中,需要配置大量的入参来监控接口的返回是否正确. 日常常见的线上监控几个简单的监控示例场景如下: 监控电商网站某个类目下的商品数量.若类目中商品的数量小于一定的数量,则认为需要认为查看商品池的商品是否正确: 监控商品的价格.当商品价格出现超出限定的波动幅度时,通知相应的商品负责人,对其进行确认,从而保证商品价格的正确无误. 监控商品在某一地域是否

基于webpack.config.js和babel.config.js及package.json构建项目的demo

webpack.config.js的内容如下 const HtmlWebpackPlugin = require('html-webpack-plugin'); const Webpack = require("webpack"); const ConcatPlugin = require('webpack-concat-plugin'); const CopyPlugin = require('copy-webpack-plugin'); const Path = require('

【Vue CLI】从安装到构建项目再到目录结构的说明 &#196968;

目录 1. 构建我们的项目 2. 目录结构说明 2.1 build目录 2.2 config目录 2.3 src目录 2.4 static目录 原文: http://blog.gqylpy.com/gqy/284 "Vue CLI是一个基于Vue.js进行快速开发的完整系统. Vue CLI致力于将Vue生态中的工具基础标准化.它确保了各种构建工具只需给予智能的默认配置便可平稳衔接. 这样我们就可以专注在撰写应用上,而不必花好几天去纠结配置的问题.于此同时,它还为每个工具提供了调整配置的灵活性.

@vue/cli 3 安装搭建及 webpack 配置

首先卸载旧版1 npm uninstall vue-cli -g //or 2 yarn global remove vue-cli 再次安装 1 npm install -g @vue/cli 2 //or 3 yarn global add @vue/cl 查看版本 vue --version //or vue -V 创建项目vue create  my-project //项目名// Windows 上通过 minTTY 使用 Git Bash,交互提示符并不工作.  //你必须通过  

vue cli脚手架项目利用webpack给生产环境和发布环境配置不同的接口地址或者不同的变量值。

废话不多说,直接进入正题,此文以配置不同的接口域名地址为例子 项目根目录下有一个config文件夹,基础项目的话里面至少包括三个文件, 1.dev.env.js 2.index.js 3.prod.env.js 我们需要做配置的就是第一个和第三个. 其实这两个文件内容就是针对生产环境和发布环境设置不同的参数的文件,那么打开dev.en.js,开发环境.原本代码如下: 'use strict' const merge = require('webpack-merge') const prodEnv

手把手教你如何安装使用webpack vue cli

1.安装node.js:https://nodejs.org/en/download/(看电脑的系统是多少位下载相应版本) 我下载的是Windows Installer(.msi) x64 2.打开cmd,查询npm -v看是否有版本号 3.输入指令: 1.npm install -g @vue/cli 2.npm install -g @vue/cli 这两种方式都是全局的(-g) 注意:如果觉得下载速度过于慢了(服务器在国外),可以使用淘宝镜像下载 在cmd中输入: npm install

vue.cli脚手架初次使用图文教程

vue.cli脚手架初次使用图文教程 我之前的环境是安装了node.js, 我记得曾经好像安装过vue ,不过现在又要重新开始学习起来了.在youtube上看了一vue的相关教程,还是需要实操的. 好像安装过npm -v 发现已经安装了5.6.0 需要安装然后使用 cnpm 安装 vue-cli 和 webpack 安装代码:npm install -g vue-cli 一.生成项目 首先需要在命令行中进入到项目目录,然后输入: vue init webpack vue-testone p.p1

vue-cli的webpack模板项目配置文件分析

由于最近在vue-cli生成的webpack模板项目的基础上写一个小东西,开发过程中需要改动到build和config里面一些相关的配置,所以刚好趁此机会将所有配置文件看一遍,理一理思路,也便于以后修改配置的时候不会"太折腾". 一.文件结构 本文主要分析开发(dev)和构建(build)两个过程涉及到的文件,故下面文件结构仅列出相应的内容. ├─build │ ├─build.js │ ├─check-versions.js │ ├─dev-client.js │ ├─dev-ser

基于Vue-Cli 打包自动生成/抽离相关配置文件

背景 基于Vue-cli 项目产品部署,涉及到的交互的地址等配置信息,每次都要重新打包才能生效,极大的降低了效率.我们的目的是让项目实施的小伙伴重新快乐起来.网上实现的方式,都是半自动化的,还需要重新修改. 需求点 配置化:打包后的配置文件可二次修改 配置自动生成:vue-cli 提供了各种环境的打包,要实现相关配置文件的自动打包 研发人员无痛感:对于产品研发人员来说,不需要增加额外的打包成本,基于Vue-cli的开发习惯不变. 实现步骤 一:配置自动生成 安装generate-asset-we