前端工程化
也可以叫做前端模块化。首先先了解对比一下传统开发的主要问题:
- 命名冲突问题:多个js文件之间如果有重名的变量,则会发生覆盖问题
- 文件依赖问题:js文件之间无法实现相互的引用
为了解决传统开发的问题,所有出现了模块化的方案:
- 模块化就是把单独的一个功能封装到一个模块(文件)中,模块之间相互隔离,但是可以通过特定的接口公开内部成员,也可以依赖别的模块
- 模块化开发的好处:方便代码的重用,从而提升开发效率,并且方便后期的维护
webpack
webpack是一个流行的前端项目构建工具(打包工具),可以解决当前web开发中所面临的困境。webpack提供了友好的模块化支持,以及代码压缩混淆,处理js兼容问题,性能优化等强大的功能,从而让程序员把工作的中心放到具体的功能实现上,提高了开发效率和项目的可维护性。
webpack的基本使用
1、创建列表隔行变色项目
- 新建项目空白目录,并运行
npm init -y命令,初始化包管理配置文件package.json

-
新建
src源代码目录 -
新建
scr中index.html首页

- 初始化首页基本的结构

- 运行
npm install jquery -s命令,安装jQuery

-
通过模块化的形式,实现列表变色的效果
//这是ES6模块化的语法 import $ from 'jquery' $(function () { $('li:odd').css('backgroundColor', 'pink') $('li:even').css('backgroundColor', 'red') })这样的方式是ES6模块的语法,浏览器支持的不是很好,所以需要用webpack处理一下
2、在项目中安装和配置webpack
- 运行
npm install webpack webpack-cli -D命令,安装webpack相关的包

-
在项目根目录中,创建
webpack.config.js的webpack配置文件 -
在webpack的配置文件中,初始化如下基本配置
module.exports={ mode:'development'//mode用来指定构建模式 //development开发期间 //production上线之后 } -
在
package.json配置文件中的script节点下,新增dev脚本如下:"script":{ "dev":"webpack"//script 节点下的脚本,可以通过npm run执行 } -
在终端中运行
npm run dev命令,启动webpack进行项目打包

成功后自动创建了dist文件夹,里面自动创建了main.js
- 在index.html文件中,修改
<script src="../dist/main.js"></script>

3、webpack配置打包的入口与出口
webpack的4.x版本中默认约定:
- 打包的入口文件为src–>index.js
- 打包的输出文件为dist–>main.js
如果要修改打包的入口与出口,可以在webpack.config.js中新增如下配置信息:
const path = require('path')
module.exports = {
mode: 'development',
entry: path.join(__dirname, './src/index.js'), //入口
output: {
path: path.join(__dirname, './dist'), //这个表示输出文件的存放路径
filename: "bundle.js" //输出文件的名称
} //出口
}
在index.html文件中,修改<script src="../dist/bundle.js"></script>
效果如下:

4、配置webpack的自动打包功能
如果我们需要修改代码的某一个值,那么需要重新打包才能看到效果,这样效率太差就有了自动打包工具
-
运行
npm install webpack-dev-server -D命令,安装支持项目自动打包的工具 -
修改package.json—>scrpit命令中的dev命令如下:
"script":{ "dev":"webpack-dev-server"//script节点下的脚本,可以通过npm run执行 } -
将src—>index.html中,script脚本的引用路径,修改为
/bundle.js<script src="/bundle.js"></script> -
运行
npm run dev命令,重新进行打包

- 在浏览器中访问http://localhost:8080地址,查看重新打包效果

5.配置html-webpack-plugin生成预览画面
- 运行
npm install html-webpack-plugin -D命令,安装生产预览页面的插件

-
修改webpack.config.js文件头部信息,添加如下配置
//导入生成预览页面的插件,得到一个构造函数 const HtmlWebpackPlugin = require('html-webpack-plugin') const htmlPlugin = new HtmlWebpackPlugin({//创建插件的实例对象 template:'./src/index.html',//指定要用到的模板文件 filename:'index.html'//指定生成的文件的名称,该文件存在内存中,在目录中不显示 }) -
修改webpack.config.js文件中向外暴露的配置对象,新增如下配置节点:
module.exports = { plugins:[htmlPlugin]//plugins数组是webpack打包期间会用到的一些插件列表 }

这时候打开127.0.0.1:8080就不在是之前的那个页面了,就是我们想要看到的index.html页面了
6.配置自动打包相关参数
//package.json中的配置
//--open 打包完成后自动打开浏览器
//--host 配置ip地址
//--port 配置端口
"scripts": {
"dev": "webpack-dev-server --open --host 127.0.0.1 --port 8080"
}
这样就能打包完成后自动打开浏览器显示页面
webpack中的加载器
通过loader打包非js模块
在实际开发过程中,webpack默认只能打包处理以.js后缀名结尾的模块,其他非.js后缀名结尾的模块,webpack默认处理不了,需要调用loader加载器才能正常打包,否则会报错
loader加载器可以协助webpack打包处理特定的文件模块,比如:
- less-loader可以打包处理.less相关的文件
- sass-loader可以打包处理.scss相关的文件
- url-loader可以打包处理css中与url路径相关的文件
打包处理css文件
- 运行
npm i style-loader css-loader -D命令,安装处理css的loader

-
在webpack.config.js的module–>rules数组中,添加loader规则如下
//所有第三方文件模块的匹配规则 module:{ rules:[{ test:/\.css$/, use:['style-loader','css-loader'] }] }其中,test表示匹配的文件类型,use表示对应要调用的loader
注意:use数组中指定的loader顺序是固定的;多个loader的调用顺序是从后往前调用的
打包处理less文件
- 运行
npm i less-loader less -D命令

-
在webpack.config.js的module—>rules数组中,添加loader规则如下:
//所有第三方文件模块的匹配规则 module:{ rules:[{ test:/\.less$/, use:['style-loader','css-loader','less-loader'] }] }
打包处理scss文件
- 运行
npm i sass-loader node-sass -D命令

-
在webpack.config.js的module—>rules数组中,添加loader规则如下:
//所有第三方文件模块的匹配规则 module:{ rules:[{ test:/\.scss$/, use:['style-loader','css-loader','sass-loader'] }] }
配置postCSS自动添加css的兼容前缀
浏览器存在兼容问题,自己手动加兼容前缀太麻烦了,所有用postCss自动添加css兼容前缀
- 运行
npm i postcss-loader autoprefixer -D命令

-
在项目根目录中创建postcss的配置文件posrcss.config.js,并初始化如下配置:
const autoprefixer = require('autoprefixer')//导入自动添加前缀的插件 module.exports = { plugins:[autoprefixer]//挂载插件 } -
在webpack.config.js的module—>rules数组中,修改css的loader规则如下:
module:{ rules:[{ test:/\.css$/, use:['style-loader','css-loader','postcss-loader'] }] }
打包样式表中的图片和字体文件
做到上面的程度为止,如果需要在页面中显示图片还需要做以下处理:
- 运行
npm i url-loader file-loader -D命令

-
在webpack.config.js的module—>rules数组中,添加loader规则如下:
module:{ rules:[{ test:/\.jpg|png|gif|bmp|ttf|eot|svg|woff|wpff2$/, use:'url-loader?limit=16940' }] }其中?之后的是loader的参数项,limit用来指定图片的大小,单位是字节(type),只有小于limit大小的图片,才会被转为base64图片
打包处理js中的高级语法
默认webpack打包处理不了js的高级语法,例如:
class Person {
static info = 'aaa'
}
console.log(Person.info);
需要做以下处理:
- 安装babel转换器相关的包:
npm i babel-loader @babel/core @babel/runtime -D

- 安装babel语法插件相关的包:
npm i @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D

-
在项目根目录中,创建babel配置文件babel.config.js并初始化基本配置如下:
module.exports = { presets: ['@babel/presst-env'], plugins: ['@babel/plugin-transform-runtime', '@babel/plugins-proposal-class-properties'] } -
在webpack.config.js的module—>rules数组中,添加loader规则如下:
//exclude为排除项,表示babel-loader不需要处理node-modules中的js文件 {test:/\.js$/,use:'babel-loader',exclude:/node_modules/}
webpack中配置vue组件的加载器
- 运行
npm i vue-loader vue-template-compiler -D命令

-
在webpack.config.js配置文件中,添加vue-loader配置项如下:
{test: /\.vue$/,use: 'vue-loader'}
Vue单文件组件
传统组件的问题和解决方案
问题
- 全局定义的组件必须保证组件的名称不重复
- 字符串模板缺乏语法高亮,在html有多行的时候要用到丑类的\
- 不支持css意味着当html和JavaScript组件化时,css明显被遗漏
- 没有构建步骤限制,只能使用html和ES5 JavaScript而不能使用预处理器
解决
针对传统组件的问题,Vue提供了一个解决方案-----使用Vue单文件组件
单文件组件的基本用法
单文件组件的组成结构
- template:组件的模板区域
- script:业务逻辑区域
- style:样式区域
如下所示:
<template>
<div>
<h1>这是app根组件</h1>
</div>
</template>
<script>
export default {
data() {
return {};
},
methods: {},
};
</script>
<style scoped>
h1 {
color: red;
}
</style>
在webpack项目中使用vue
- 运行
npm i vue -S安装vue

-
在src–index.js入口文件中,通过
import Vue from 'vue'来导入vue构造函数 -
创建vue的实例对象,并指定要控制的el区域
-
通过render函数渲染app根组件
//导入vue构造函数 import Vue from 'vue' //导入app根组件 import App from './components/app.vue' const vue = new Vue({ el:'#app', //通过render函数把指定的组件渲染到el区域中 render:h=>h(App) })
Vue脚手架
Vue脚手架的基本用法
Vue脚手架用于快速生产Vue项目基础架构,其官网地址为:https://cli.vuejs.org/zh/
安装Vue脚手架
npm install -g @veu/cli

基于交互式命令行的方式,创建新版vue项目
vue create my-project
之后会出现一个交互式的问答面板,如下:

然后根据出现的页面选择你要的需要。
基于图形化界面的方式创建新版vue项目
vue ui
在cmd窗口输入以上指定即可

Element UI
一套为开发者,设计师和产品经理准备的基于Vue 2.0的桌面端组件库
官网为:http://element-cn.eleme.io/#/zh-cn
- 安装依赖包
npm i element-ui -S

-
导入Element-UI相关资源
//导入组件库 import ElementUI from 'element-ui' //导入组件相关样式 import 'element-ui/lib/theme-chalk/index.css' //配置Vue插件 Vue.use(ElementUI)
本文介绍了前端工程化的概念,详细阐述了Webpack的基本使用,包括创建项目、配置打包入口与出口、自动打包以及配置html-webpack-plugin生成预览页面。同时,讨论了Webpack中的加载器,如处理CSS、LESS、SCSS文件,以及如何配置Vue组件的加载器。此外,文章还涵盖了Vue单文件组件的优势和在Webpack项目中的应用,以及Vue CLI的两种创建项目的方法。
2521

被折叠的 条评论
为什么被折叠?



