人人都能学会的webpack5搭建vue3项目(二)配置Vue

摘要:
DOCTYPEhtml˃然后我们更改一下根目录下的package.json文件的scripts脚本{"scripts":{"dev":"webpack-dev-server--configwebpack.config.js--inline--progress"}}这样我们就能在命令行中使用yarndev来运行我们的项目了接下来我们在src目录下新建一个App.vue文件我是Vue项目啊{{username}}import{ref}from'vue'exportdefault{setup(){letusername=refreturn{username}}}现在我们打开src目录下的main.js文件import{createApp}from'vue'importAppfrom'./App.vue'constapp=createApp()app.mount这时候我们到根目录下按住shift加鼠标右键,选择在此处打开命令窗口,输入yarndev,敲回车,等待项目启动,这时候不出意外应该会报错。报错信息应该是这样子的。

webpack5 搭建vue3 项目 (二)

  • 安装vue以及vue-loader

    yarn add vue@next
    yarn add vue-loader@next thread-loader -D

    配置webpack.config.js

      const VueLoaderPlugin = require('vue-loader/dist/plugin').default // 需要加default, 详情可查看源码
      module.exports = {
        entry: {
          main: 'main.js'
        },
        output: {
           path: 'dist',
           filename: '[name].js',
      	 publicPath: '/'
        },
        module: {
          rules: [
            {
              test: /.js$/,
              use: [
                'thread-loader', // 因为bable-loader比较耗时, 我们使用thread-loader来开启多线程,加快速度
                'babel-loader'
              ]
            },
            {
              test: /.vue$/,
              loader: 'vue-loader'
            }
          ]
        }
      }
    
  • 配置babel相关
    安装babel相关loader和插件

    yarn add babel-loader @babel/core @babel/preset-env @babel/polyfill @babel/plugin-proposal-class-properties @babel/plugin-proposal-decorators @babel/plugin-proposal-object-rest-spread @babel/plugin-syntax-dynamic-import -D

    babel.config.js

      module.exports = {
        presets: [
          [
            "@babel/preset-env",
            {
              "useBuiltIns": "entry",
              module: false,
              corejs: 3
            }
          ]
        ],
        plugins: [
          ["@babel/plugin-syntax-dynamic-import"]
        ]
      }
    
  • 我们添加一下webpack-dev-server吧, 以便于我们运行,还需要安装一下html-webpack-plugin

yarn add webpack-dev-server html-webpack-plugin -D
修改一下webpack.config.js

  const webpack = require("webpack")
  const path = require('path')
  const VueLoaderPlugin = require('vue-loader/dist/plugin').default // 需要加default, 详情可查看源码
  const HtmlWebpackPlugin = require('html-webpack-plugin')
  const resolve = (filePath) => {
  	return path.resolve(__dirname, filePath)
  }
  module.exports = {
    entry: {
      main: resolve('src/main.js')
    },
    output: {
       path: resolve('dist'),
       filename: '[name].js',
  	 publicPath: '/'
    },
    devServer: {
      host: '0.0.0.0',
      port: 8088,
      hot: true, // 配合 Hmr使用
      historyApiFallback: true, // 设置这个原因是,当我们的vue路由设置为history模式时,如果我们当前页面位于localhost:8088/abc,这时候去刷新页面就会报错404.设置这个就是为了解决这个问题。
    },
    module: {
      rules: [
        {
          test: /.js$/,
          use: [
            'thread-loader', // 因为bable-loader比较耗时, 我们使用thread-loader来开启多线程,加快速度
            'babel-loader'
          ]
        },
        {
          test: /.vue$/,
          loader: 'vue-loader'
        }
      ]
    },
    plugins: [
       new VueLoaderPlugin(),
       new HtmlWebpackPlugin({
  	 	template: resolve('index.html'),
  		filename: 'index.html',
  		title: 'webpack5搭建vue3',
  		// icon: '', // 选择一个自己喜欢的icon添加在这吧。
  		inject: true
  	 }),
       new webpack.HotModuleReplacementPlugin()
    ]
  }

我们还需要加一个index.html的页面, 在根目录下吧

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
  <div id="app"></div>
</body>
</html>

然后我们更改一下根目录下的package.json文件的scripts脚本

 {
    "scripts": {
        "dev": "webpack-dev-server --config webpack.config.js --inline --progress"
     }
  }

这样我们就能在命令行中使用 yarn dev 来运行我们的项目了
接下来我们在src目录下新建一个App.vue文件

  <template>
  	我是Vue项目啊 {{username}}
  </template>
  <script>
  	import {ref} from 'vue'
  	export default {
  		setup () {
  			let username = ref('helloworld')
  			return {
  				username
  			}
  		}
  	}
  </script>

现在我们打开src目录下的main.js文件

  import {createApp} from 'vue'
  import App from './App.vue'
  const app = createApp()
  app.mount('#app')

这时候我们到根目录下按住shift 加鼠标右键, 选择在此处打开命令窗口, 输入 yarn dev,敲回车,等待项目启动,这时候不出意外应该会报错。报错信息应该是这样子的。

sealing module hashing(node:8616) UnhandledPromiseRejectionWarning: TypeErro
r [ERR_INVALID_ARG_TYPE]: The "data" argument must be of type string or an insta
nce of Buffer, TypedArray, or DataView. Received undefined
  at Hash.update (internal/crypto/hash.js:82:11)
  at BulkUpdateDecorator.update (E:studywebfrontWebpackwebpack5_vue3
ode_m
oduleswebpacklibutilcreateHash.js:51:14)
  at NormalModule.updateHash (E:studywebfrontWebpackwebpack5_vue3
ode_modu
leswebpacklibNormalModule.js:1191:8)
  at Compilation._createModuleHash (E:studywebfrontWebpackwebpack5_vue3
od
e_moduleswebpacklibCompilation.js:3097:10)
  at Compilation.createModuleHashes (E:studywebfrontWebpackwebpack5_vue3
o
de_moduleswebpacklibCompilation.js:3069:10)
  at E:studywebfrontWebpackwebpack5_vue3
ode_moduleswebpacklibCompilati
on.js:2346:11
....

这是因为缺少@vue/compiler-sfc, 这时候我们安装一下他。

yarn add @vue/compiler-sfc -D

之所以要安装它,是因为我们的vue-loader现在依赖于他,我们可以发现之前的vue-template-compiler 这个模板编译器不用了,也就是被@vue/compiler-sfc 替代了。
安装完毕我们再次运行 yarn dev ,等待项目启动, 我们在浏览器输入localhost:8088, 就可以看到我们的页面了。

后面肯定还会遇到问题(比如webpack5的热更新,设置了不生效,我们需要在webpack配置中把target的值改为'web'), 如果大家遇到问题,请抛出来我们一起解决。多谢各位乐于分享的兄弟们。

这里分享一下我遇到的问题

Error: Cannot find module 'webpack-cli/bin/config-yargs'
Require stack:
- E:studywebfrontWebpackwebpack5_vue3
ode_moduleswebpack-dev-serverinweb
pack-dev-server.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:966:15)
    at Function.Module._load (internal/modules/cjs/loader.js:842:27)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (E:studywebfrontWebpackwebpack5_vue3
ode_modulesw
ebpack-dev-serverinwebpack-dev-server.js:65:1)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js
:71:12) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    'E:\studywebfront\Webpack\webpack5_vue3\node_modules\webpack-dev-server
\bin\webpack-dev-server.js'
  ]

遇到这个问题, 将webpack-cli 换成低版本即可 webpack-cli@3.3.12

github地址: https://github.com/ComponentTY/webpack5-vue3
webpack5搭建vue3给个星吧,大佬们,github上面的是已经搭建好的,并正应用于自己公司内部项目中。

免责声明:文章转载自《人人都能学会的webpack5搭建vue3项目(二)配置Vue》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何在远程工作中保持企业文化的凝聚力SonarQube和Maven的集成下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue中使用触摸事件,上滑,下滑,等

第一步,下载一个包 npm install kim-vue-touch -s在当前项目中下载包第二部 import vueTouch from 'kim-vue-touch' Vue.use(vueTouch) kim-vue-touch提供了点击、长按、左滑、右滑、上滑、下滑等事件, 当你不需要传参时可以通过v-tap="vueTouch"的形式调用...

vue 时间戳转换

vue 时间戳转换 //显示小时和分钟 {{ new Date( +new Date(new Date(itemC.StartTime).toJSON()) + 8 * 3600 * 1000 ) .toISOString() .replace(/T/g, " ") .replace(/.[d]{3}Z/...

关于vue的页面跳转后,如何每次进入页面时都能获取后台数据

关于vue的页面跳转后,如何每次进入页面时都能获取后台数据 watch+mouted 首先说问题。 一.页面的数据来自后台,即会发起请求从后台取值。 二.子组件的数据刷新的问题,即每次进入父组件的时候,其相关子组件的数据需要重新从后台取值。 1.答: 关于第一个问题。一般来讲我们会在vue的created的生命周期中实现,向后台发起请求获取数据。 但是这样...

vue基于element-ui制作的成绩管理系统(三)主界面 登录后跳转的页面

1.在views文件夹下新建home.vue  介绍下首页应该包含头部。左边菜单导航栏。右面实时加载的内容,整个部分划分为三块。 页面布局如下 <template> <el-row style="height:100%"> <v-header></v-header> //头部组件 <e...

antd vue table 单元格添加样式背景色 customCell属性

拓展使用customRow https://blog.csdn.net/EasonGG/article/details/105687765 https://blog.csdn.net/u012215273/article/details/107907460 https://segmentfault.com/q/1010000021780046 通用方式:...

vue入门 显示数据 操作属性 操作样式 条件渲染

目录 vue.js的快速入门使用 1.1 vue.js库的下载 1.2 vue.js库的基本使用 1.3 vue.js的M-V-VM思想 1.4 显示数据 2. 常用指令 2.1 操作属性实列显示密码效果 2.2 事件绑定例如:完成商城购物车中的商品增加减少数量 2.3 操作样式 2.3.1 控制标签class类名 2.3.2 控制...