从零开始用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事件模拟
Jun 27 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
Jan 22 Javascript
JavaScript中的prototype.bind()方法介绍
Apr 04 Javascript
详解JavaScript数组的操作大全
Oct 19 Javascript
浅谈JavaScript中的对象及Promise对象的实现
Nov 15 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
Dec 02 Javascript
jQuery中的基本选择器用法学习教程
Apr 14 Javascript
jQuery之简单的表单验证实例
Jul 07 Javascript
js 获取当前web应用的上下文路径实现方法
Aug 19 Javascript
微信小程序滚动Tab实现左右可滑动切换
Aug 17 Javascript
详谈js原型继承的一些问题
Sep 06 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
Feb 09 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 current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
2018/04/09 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
php结合imgareaselect实现图片裁剪
2015/07/05 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
js微信扫描二维码登录网站技术原理
2016/12/01 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
使用Python对MySQL数据操作
2017/04/06 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
浅析HTML5的WebSocket与服务器推送事件
2016/02/19 HTML / CSS
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
青年创业培训欢迎词
2014/01/10 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
遗失说明具结保证书
2015/02/26 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB
python获取带有返回值的多线程
2022/05/02 Python
基于Python实现nc批量转tif格式
2022/08/14 Python