使用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 相关文章推荐
JavaScript入门之基本函数详解
Oct 21 Javascript
Jquery Validate 正则表达式实用验证代码大全
Aug 23 Javascript
JS创建类和对象的两种不同方式
Aug 08 Javascript
JavaScript前端图片加载管理器imagepool使用详解
Dec 29 Javascript
js动态修改表格行colspan列跨度的方法
Mar 30 Javascript
JavaScript中两个字符串的匹配
Jun 08 Javascript
js判断checkbox是否选中个数的方法(超简单)
Aug 19 Javascript
探索Vue.js component内容实现
Nov 03 Javascript
解析AngularJS中get请求URL出现的跨域问题
Dec 01 Javascript
jQuery模拟窗口抖动效果
Mar 15 Javascript
JavaScript生成一个不重复的ID的方法示例
Sep 16 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
Jan 02 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
天津市收音机工业发展史
2021/03/04 无线电
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
使用php自动备份数据库表的实现方法
2017/07/28 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
js函数调用常用方法详解
2012/12/03 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
微信小程序 网络API Websocket详解
2016/11/09 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
2017/06/19 Javascript
Vue配置marked链接添加target=&quot;_blank&quot;的方法
2019/07/19 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
js判断一个对象是数组(函数)的方法实例
2019/12/19 Javascript
vue 翻页组件vue-flip-page效果
2020/02/05 Javascript
python 调用c语言函数的方法
2017/09/29 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
2017/12/21 Python
python实现多线程网页下载器
2018/04/15 Python
Python二维码生成识别实例详解
2019/07/16 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
美国网上订购鲜花:FTD
2016/09/23 全球购物
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
土木工程专业个人求职信
2013/12/30 职场文书
施工工地安全标语
2014/06/07 职场文书
物业管理专业自荐信
2014/07/01 职场文书
2014年政教处工作总结
2014/12/20 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
党组织结对共建协议书
2016/03/23 职场文书
话题作文之学会尊重
2019/12/16 职场文书
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android
Nginx反向代理学习实例教程
2021/10/24 Servers