从零开始用webpack构建一个vue3.0项目工程的实现


Posted in Javascript onSeptember 24, 2020

前言

入门级别教程,适用于初级工程师
移动端 单页面  Demo

正文

第一步

找一个你认为合适的磁盘。输入mkdir test, cd test , npm init -y

第二步

安装依赖

webpack 系列依赖

webpack webpack-cli

babel 系列依赖

@babel/core @babel/preset-env

移动兼容方案

amfe-flexible autoprefixer

axios

axios

webpack loader

babel-loader

css-loader

file-loader

postcss-loader

pm2rem-loader

style-loader

这个单独说一下,vue3.0 sfc重写了对.vue文件的编译方式,使用parseComponent等方法,必须使用-v16后缀的这个loader,当时找这个loader用了较长的时间

vue-loader-v16
vue-template-complier

webpack plugin

html-webpack-plugin
webpack-dev-server

Vue & Vuex

vue@next

vuex@next

请使用yarn add 或者 npm i 安装上述依赖包

第三步

在当前根目录创建index.html,初始化HTML代码

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

创建.babelrc,初始化babel配置

{
 "presets": ["@babel/preset-env"]
}

创建postcss.config.js初始化postcss配置

module.exports = {
 plugins: [require('autoprefixer')],
}

创建.gitignore

node_modules
.vscode
.idea

创建scripts目录,编写yarn锁定脚本

if (!/yarn\.js$/.test(process.env.npm_execpath || '')) {
 console.warn(
  '\u001b[33mThis repository requires Yarn 1.x for scripts to work properly.\u001b[39m\n'
 )
 process.exit(1)
}

将脚本配置在package.json配置中

{
 "name": "h5-static",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
  "start": "webpack-dev-server",
  "build": "webpack --mode=production",
  "preinstall": "node ./scripts/checkYarn.js"
 },
 "author": "upeartaker",
 "license": "ISC",
 "dependencies": {
  "@babel/core": "^7.11.6",
  "@babel/preset-env": "^7.11.5",
  "@vue/compiler-sfc": "^3.0.0",
  "amfe-flexible": "^2.2.1",
  "autoprefixer": "8.0.0",
  "axios": "^0.20.0",
  "babel-loader": "^8.1.0",
  "css-loader": "^4.3.0",
  "file-loader": "^6.1.0",
  "html-webpack-plugin": "^4.5.0",
  "postcss-loader": "^4.0.2",
  "px2rem-loader": "^0.1.9",
  "style-loader": "^1.2.1",
  "vue": "^3.0.0",
  "vue-loader": "^15.9.3",
  "vue-loader-v16": "^16.0.0-beta.5.4",
  "vue-template-compiler": "^2.6.12",
  "vuex": "^4.0.0-beta.4",
  "webpack": "^4.44.2",
  "webpack-cli": "^3.3.12",
  "webpack-dev-server": "^3.11.0"
 },
 "browserslist": [
  "defaults",
  "not ie < 11",
  "last 2 versions",
  "> 1%",
  "iOS 7",
  "last 3 iOS versions"
 ]
}

其中preinstall 为yarn锁定脚本

  • 创建src目录,在src目录中分别创建services , pages , components , store目录,对应存放ajax , 视图 , 组件  , 全局状态管理。
  • 创建webpack.config.js文件,编写webpack配置
const path = require('path')
const VueLoaderPlugin = require('vue-loader-v16/dist/plugin.js').default
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
 entry: path.resolve(__dirname, './src/main.js'),
 output: {
  path: path.resolve(__dirname, 'dist'),
  filename: 'bundle.js',
 },
 resolve: {
  extensions: ['.js'],
 },
 module: {
  rules: [
   {
    test: /\.js$/,
    use: ['babel-loader'],
    exclude: /node_modules/,
   },
   {
    test: /\.css$/,
    use: [
     'style-loader',
     'css-loader',
     {
      loader: 'px2rem-loader',
      options: {
       remUnit: 37.5,
      },
     },
     {
      loader: 'postcss-loader',
      options: {
       sourceMap: true,
       postcssOptions: {
        path: 'postcss.config.js',
       },
      },
     },
    ],
   },
   {
    test: /\.(png|svg|jpg|gif)$/,
    use: ['file-loader'],
   },
   {
    test: /\.(woff|woff2|eot|ttf|otf)$/,
    use: ['file-loader'],
   },
   {
    test: /\.vue$/,
    loader : 'vue-loader-v16'
   }
  ],
 },
 optimization: {
  minimize: true,
 },
 plugins: [
  new HtmlWebpackPlugin({
   template: path.resolve(__dirname, './index.html'),
   inject: 'body',
  }),
  new VueLoaderPlugin()
 ],
}

第四步

编写Demo,测试工程是否可以使用。

进入src目录下,创建main.js文件,编写以下代码,

import 'amfe-flexible'
import './index.css'
import { createApp } from 'vue'
import App from './App.vue'

const app = createApp(App)

app.mount('#app')

创建App.vue文件,编写一下代码

<template>
 <Fragment>
  {{ message }}
  <button @click="handleClick">点我</button>
 </Fragment>
</template>
<script>
import { Fragment, ref } from 'vue'
export default {
 name: 'root',
 components: [Fragment],
 setup() {
  const message = ref('hello')
  const handleClick = () => {
   message.value = 'hit'
  }

  return {
   message,
   handleClick,
  }
 },
}
</script>

第五步

执行脚本yarn start

总结

  • webpack配置简单易学,声明式的接口规范,开发人员只需关注功能点即可完成配置。此工程webpack配置上没有任何难点,做过Vue-cli2.0项目的同学,可以直接略过。
  • 自己动手搭建项目时,建议大家先梳理项目结构,列出需要扩充的功能点,按照节点向上的方式,完善项目。如果以工程化的视角看这个项目,它只能属于leaf level。

 到此这篇关于从零开始用webpack构建一个vue3.0项目工程的实现的文章就介绍到这了,更多相关webpack构建vue3.0项目工程内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript移除数组元素减少长度的方法
Sep 05 Javascript
js设置组合快捷键/tabindex功能的方法
Nov 21 Javascript
Javascript与jQuery方法的隐藏与显示
Jan 19 Javascript
JavaScript 异常处理 详解
Feb 06 Javascript
基于angularjs实现图片放大镜效果
Aug 31 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
Dec 25 Javascript
js基于myFocus实现轮播图效果
Feb 14 Javascript
JS实现页面内跳转的简单代码
Sep 03 Javascript
vue+vue-validator 表单验证功能的实现代码
Nov 13 Javascript
Vue数据双向绑定原理及简单实现方法
May 18 Javascript
vue实现多个元素或多个组件之间动画效果
Sep 25 Javascript
JS 数组基本用法入门示例解析
Jan 16 Javascript
.netcore+vue 实现压缩文件下载功能
Sep 24 #Javascript
vue-router 控制路由权限的实现
Sep 24 #Javascript
vue+elementUI实现简单日历功能
Sep 24 #Javascript
JavaScript获取时区实现过程解析
Sep 24 #Javascript
小程序点餐界面添加购物车左右摆动动画
Sep 23 #Javascript
原生js实现购物车功能
Sep 23 #Javascript
详解微信小程序动画Animation执行过程
Sep 23 #Javascript
You might like
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
window.print打印指定div实例代码
2013/12/13 Javascript
jQuery自定义事件的简单实现代码
2014/01/27 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
理解javascript中Map代替循环
2016/02/26 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
JS实现的简单图片切换功能示例【测试可用】
2017/02/14 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
vue实现分页组件
2020/06/16 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
Python完全识别验证码自动登录实例详解
2019/11/24 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
python使用matplotlib绘制折线图的示例代码
2020/09/22 Python
怎样比较两个类型为String的字符串
2016/08/17 面试题
软件测试常见笔试题
2012/02/04 面试题
最新创业融资计划书
2014/01/19 职场文书
初一科学教学反思
2014/01/27 职场文书
财经学院自荐信范文
2014/02/02 职场文书
单位委托书范本
2014/04/04 职场文书
讲文明树新风演讲稿
2014/05/12 职场文书
音乐节策划方案
2014/06/09 职场文书
惊天动地观后感
2015/06/10 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
Vue操作Storage本地化存储
2022/04/29 Vue.js
python中使用redis用法详解
2022/12/24 Redis