从零开始用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 相关文章推荐
google 搜索框添加关键字实现代码
Apr 24 Javascript
详谈JavaScript内存泄漏
Nov 14 Javascript
node.js中的fs.readSync方法使用说明
Dec 17 Javascript
JavaScript实现定时隐藏与显示图片的方法
Aug 06 Javascript
用NODE.JS中的流编写工具是要注意的事项
Mar 01 Javascript
Javascript中prototype的使用详解
Jun 18 Javascript
关于js原型的面试题讲解
Sep 25 Javascript
JavaScript 闭包详细介绍
Sep 28 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
Apr 22 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
Jan 03 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
Dec 11 Javascript
Vue实现兄弟组件间的联动效果
Jan 21 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自动获取目录下的模板的代码
2010/08/08 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
jquery移动点击的项目到列表最顶端的方法
2015/06/24 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
购物车前端开发(jQuery和bootstrap3)
2016/08/27 Javascript
微信小程序开发经验总结(推荐)
2017/01/11 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
更改Ubuntu默认python版本的两种方法python-&gt; Anaconda
2016/12/18 Python
Python中的正则表达式与JSON数据交换格式
2019/07/03 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
利用python实现平稳时间序列的建模方式
2020/06/03 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
护士优质服务演讲稿
2014/08/26 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
违章停车检讨书
2014/10/21 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
opencv 分类白天与夜景视频的方法
2021/06/05 Python
压缩Redis里的字符串大对象操作
2021/06/23 Redis
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js
浅谈Redis缓冲区机制
2022/06/05 Redis