👊拳拳到肉--webpack实战(二)之vue 框架的引入

前言

这是一个系列专栏,将会更新一系列 webpack 的实战内容,主要围绕着旧前端项目现代化,以及现代化前端项目的再优化。

下面开始第二篇:古老项目的 vue 框架的引入

上篇文章写到为古老项目引入 webpack 构建,引入之后,之前的维护 JS 文件顺序,以及不同 JS 文件直接的全局变量冲突的问题都没有了。构建之后文件全部被打包进一个 JS 文件中,这样 html 文件只需要引入一个 JS 文件就可以了。提高了开发成本,维护成本。

不过仅仅使用 webpack 构建是远远不够的,还需要前端框架的引入,这样开发效率才能有飞的提升。

思路分析

还是以 index.html 页面作为例子

现在是原始的 js 文件和样式文件分离状态:

index.js 文件的内容:

引入 vue 的思路:

  • 将 html 中的 tag 标签放在 vue 单文件中的tempalte中,css 样式文件单独引入,或者 copy 出来放在 style 中。
  • 然后创建一个 vue 的入口文件main.js,将上面的单文件引入,并挂载在页面上的#rootdiv 中

实现

先安装必要的依赖:

shell 复制代码
npm i vue@2 vue-template-compiler //vue运行时的依赖
npm i vue-loader@15 // vue编译时的依赖

移植页面内容

创建单文件 App.vue

先移植 DOM 元素以及代码:

index.html 文件中的内容 copy 到 App.vue中,分为 html 内容,以及 css 内容

CSS 内容是 index.css 文件中的内容

然后移植 JS 内容,将原先 index.js 内容放到 script 中,并且其中一段$("#home_slider")的代码需要放在 mounted 中,目的是在页面渲染完成之后,才去执行:

然后修改 public/index.html 内容,删除文件中所有元素,只保留一个#rootdiv 元素,供 vue 挂载元素使用:

html 复制代码
<!DOCTYPE html>
<html>
	<head lang="en">
		<meta charset="utf-8" />
		<title>最家首页</title>
	</head>
	<body>
		<div id="root"></div>
	</body>
</html>

创建 main.js 文件,引入 App.vue

javascript 复制代码
import Vue from "vue";
import App from "./App.vue";
import "../css/public.css";
new Vue({ render: (h) => h(App) }).$mount("#root");

由于 public.css 里面是全局的样式,所以在 main.js里单独引入

编写 webpack.vue.config.js 配置文件

javascript 复制代码
const vueLoaderPlugin = require("vue-loader/lib/plugin");

moduel.exports = {
  entry: resolve("./src/main.js"),
	output: {
		path: resolve("dist"),
		filename: "index.js",
	},
  //省略重复代码
  module:{
    rules:[
      {
            test: /.vue$/,
            use: ["vue-loader"],
    },
    ]
  },
  plugins:[
    new vueLoaderPlugin()
  ]
}

配置文件其他地方和上面的配置一致,只需要关注不一样的地方:

  • 入口路径,入口改成了main.js文件
  • 添加了一个编译 rule,用来解析 vue 后缀的文件
  • 使用 vue-loader 时,需要额外引用对应的vueLoaderPlugin,这个要特别注意

添加一个构建脚本:

json 复制代码
{
  "scripts": {
            "build:vue": "webpack -c webpack.vue.config.js"
   },
}

执行构建脚本:

shell 复制代码
npm run build:vue

得到构建产物:

打开index.html页面:

成功

搭建开发环境

一个良好的开发环境,是修改完代码之后,可以在浏览器中立刻看见效果。好在 webpack 提供了给我们hmr 功能,让我们可以通过配置很简单的实现这一点:

javascript 复制代码
module.exports = {
  mode:'development',// dev server要修改成production
  devServer: {
		static: {
			directory: path.join(__dirname, "public"),
		},
		port: 8090,
		open: true,
		historyApiFallback: true,
	},
}

添加 dev 脚本:

json 复制代码
{
  "scripts": {
		"dev": "webpack-dev-server -c webpack.vue.config.js"
	},
}

执行npm run dev, 浏览器页面会自动打开,并且访问localhost:8090

正常显示

改个代码看看,将 head背景色改成skyblue

vue 复制代码
<style>
.head {
	background: skyblue;
}
</style>

保存代码,页面自动刷新:

配置成功!

第一个页面就这样引入了 vue 框架,如果以后想修改代码,就可以利用 vue 的语法去修改了。

总结

第一个页面 index.html 改造完成,过程比较简单:

  1. 将页面中的 DOM 元素以及样式代码放到 vue 文件中对应的位置
  2. 准备一个 vue 入口元素
  3. 修改配置文件

这个项目不止一个页面,其他页面也改造成 Vue 代码的话,就会面临一个问题,这个 Vue 项目是单页面应用还是多页面应用呢,不同类型的应用有不同的做法,下篇文章就来分享这方面内容吧

相关推荐
mldong1 小时前
你的 Vue3 项目也能有钉钉同款审批流设计器:npm 装包,10 分钟画出第一条审批流
前端·vue.js
2分钟速写快排2 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60612 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角3 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!3 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰4 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
mayaairi5 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen6 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马6 小时前
AI源码分析:拆解模型底层实现逻辑
前端
IT_陈寒7 小时前
React子组件莫名其妙重渲染?你可能漏了这个Hook
前端·人工智能·后端