使用Webpack 搭建 Vue3 开发环境过程详解


Posted in Javascript onJuly 28, 2020

从零开始使用 Webpack 搭建 Vue3 开发环境

创建项目

首先需要创建一个空目录,在该目录打开命令行,执行 npm init 命令创建一个项目,这个过程会提示输入一些内容,完成后会自动生成一个 package.json 文件

Webpack 的配置文件

project

project-name
+ |- index.html
 |- package.json
+ |- webpack.config.js
+ |- /src
+ |- index.js

webpack.config.js

'use strict'

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { VueLoaderPlugin } = require('vue-loader')

module.exports = {
 mode: 'development',
 entry: './src/index.js',
 output: {
 filename: 'index.js',
 path: path.resolve(__dirname, 'dist')
 },
 resolve: {
 alias: {
  'vue': '@vue/runtime-dom',
  'vuex': 'vuex/dist/vuex.esm-bundler',
  '@': path.join(__dirname, 'src')
 }
 },
 module: {
 rules: [
  {
  test: /\.vue$/,
  use: [
   {
   loader: 'vue-loader'
   }
  ]
  },
  {
  test: /\.css$/,
  use: [
   {
   loader: 'style-loader'
   },
   {
   loader: 'css-loader'
   }
  ]
  },
  {
  test: /\.(png|jpe?g|gif)$/i,
  loader: 'file-loader'
  options: {
   name: 'images/[name].[ext]'
  }
  }
 ]
 },
 plugins: [
 new HtmlWebpackPlugin({
  filename: 'index.html',
  template: './index.html'
 }),
 new VueLoaderPlugin()
 ],
 devServer: {
 compress: true,
 port: 8080
 }
}

安装依赖

npm install --save-dev css-loader file-loader html-webpack-plugin style-loader vue-loader@16.0.0-beta.4 @vue/compiler-sfc webpack webpack-cli webpack-dev-server
  • VueLoaderPlugin 的导入方式改变了
  • vue-loader@16.0.0-beta.4 当前需要自行指定版本
  • vue-template-compiler 没有了,新增了 @vue/compiler-sfc
  • 其它都是 Webpack 基本配置

Vue

npm install --save vue@3.0.0-beta.15 vue-router@4.0.0-alpha.13 vuex@4.0.0-beta.2

当前均需要自行指定版本

根组件

project

project-name
 |- package.json
 |- /src
+ |- app.vue

app.vue

<template>
 <ul>
 <li><router-link to="/">Home</router-link></li>
 <li><router-link to="/about">About</router-link></li>
 </ul>
 <router-view/>
</template>
  • 组件根元素允许为多个

入口文件

src/index.js

import { createApp } from 'vue'

import App from '@/app.vue'
import router from '@/router'
import store from '@/store'

createApp(app)
 .use(router)
 .use(store)
 .mount('#app')

不同于 Vue2.0 的整包导入方式,Vue3.0 采用了按需导入的方式,比如这里只导入了 createApp 这个方法,这样做的好处是可以支持 Webpack 的 treeshaking, 其它没有用到的部分将不会出现在最终打包文件中

Vue3.0 的响应式系统使用了 ES2015 的 Proxy (代理),其浏览器兼容性参考 CanIUse,该特性无法兼容旧浏览器

Router

project

project-name
 |- package.json
 |- /src
+ |- /router
+  |- index.js

src/router/index.js

import { createRouter, createWebHashHistory } from 'vue-router'

const routes = [
 {
 path: '/',
 component: require('@/views/index.vue').default
 },
 {
 path: '/about',
 component: require('@/views/about.vue').default
 },
 {
 path: '/:catchAll(.*)',
 component: require('@/views/404.vue').default
 }
]

const router = createRouter({
 history: createWebHashHistory(),
 routes
})

export default router
  • 导入方式也为按需导入
  • 原来的 mode 参数变为 history
  • 除了 createWebHashHistory,还有 createWebHistory 和 createMemoryHistory
  • 路由未匹配时使用 '/:catchAll(.*)'

在组件中使用 router

import { useRouter } from 'vue-router'

export default {
 setup() {
 const router = useRouter()

 // 也可以解构
 const { push, go, back } = useRouter()
 }
}

router 就是原来实例的 $router,也有 beforeEach, afterEach 等等方法

在组件中使用 route

import { useRoute } from 'vue-router'

export default {
 setup() {
 const route = useRoute()
 }
}
  • route 是个响应式的代理对象,和原来实例的 $route 一样,也有 query, params 等属性
  • 不建议将 route 解构,解构后的 query, params 并不是响应式的

Store

project

project-name
 |- package.json
 |- /src
+ |- /store
+  |- index.js

该文件创建并导出一个 Vuex 实例

src/store/index.js

import { createStore } from 'vuex'

const store = createStore({
 state: {},
 getters: {},
 mutations: {},
 actions: {}
})

export default store
  • 导入方式也为按需导入
  • 其它照旧,没有什么变化

在组件中使用 store

import { useStore } from 'vuex'

export default {
 setup() {
 const { state, getters, commit, dispatch } = useStore()

 return {
  state
 }
 }
}

state 是响应式的代理对象,不通过 commit 提交 mutations 而是直接修改 state 也是可以的,控制台并没有给出什么警告

NPM Scripts

在 package.json 文件对应的 scripts 处新增命令

package.json

{
 "scripts": {
 "dev": "webpack-dev-server",
 "build": "webpack"
 }
}

到此这篇关于使用Webpack 搭建 Vue3 开发环境过程详解的文章就介绍到这了,更多相关Webpack 搭建 Vue3 开发环境内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
简单实用的全选反选按钮例子
Oct 18 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
Nov 21 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
Feb 26 Javascript
探寻Javascript执行效率问题
Nov 12 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
Feb 08 Javascript
AngularJS 中ui-view传参的实例详解
Aug 25 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
Mar 02 Javascript
vue.js select下拉框绑定和取值方法
Mar 03 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
Aug 06 Javascript
JavaScript数组去重的几种方法
Apr 07 Javascript
vue+element模态框中新增模态框和删除功能
Jun 11 Javascript
vue select 获取value和lable操作
Aug 28 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 #Javascript
解决vue bus.$emit触发第一次$on监听不到问题
Jul 28 #Javascript
vue+element-ui JYAdmin后台管理系统模板解析
Jul 28 #Javascript
vue实现虚拟列表功能的代码
Jul 28 #Javascript
vue.js 解决v-model让select默认选中不生效的问题
Jul 28 #Javascript
Vue2.0 $set()的正确使用详解
Jul 28 #Javascript
JavaScript 监听组合按键思路及代码实现
Jul 28 #Javascript
You might like
PHP HTML代码串截取代码
2008/12/29 PHP
php网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
php去掉文件前几行的方法
2015/07/29 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
详解php协程知识点
2018/09/21 PHP
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
jQuery表格排序组件-tablesorter使用示例
2014/05/26 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
浅谈移动端之js touch事件 手势滑动事件
2016/11/07 Javascript
ES6概念 Symbol toString()方法
2016/12/25 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
iscroll.js滚动加载实例详解
2017/07/18 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
Django返回HTML文件的实现方法
2020/09/17 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
Canvas globalCompositeOperation
2018/12/18 HTML / CSS
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
见习期自我鉴定
2013/11/07 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
浅谈Python中的正则表达式
2021/06/28 Python
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android