前端工程化--webpack配置和脚手架的简单应用

前端工程化

也可以叫做前端模块化。首先先了解对比一下传统开发的主要问题:

  • 命名冲突问题:多个js文件之间如果有重名的变量,则会发生覆盖问题
  • 文件依赖问题:js文件之间无法实现相互的引用

为了解决传统开发的问题,所有出现了模块化的方案:

  • 模块化就是把单独的一个功能封装到一个模块(文件)中,模块之间相互隔离,但是可以通过特定的接口公开内部成员,也可以依赖别的模块
  • 模块化开发的好处:方便代码的重用,从而提升开发效率,并且方便后期的维护

webpack

webpack是一个流行的前端项目构建工具(打包工具),可以解决当前web开发中所面临的困境。webpack提供了友好的模块化支持,以及代码压缩混淆,处理js兼容问题,性能优化等强大的功能,从而让程序员把工作的中心放到具体的功能实现上,提高了开发效率和项目的可维护性。

webpack的基本使用

1、创建列表隔行变色项目
  1. 新建项目空白目录,并运行npm init -y命令,初始化包管理配置文件package.json

前端工程化--webpack配置和脚手架的简单应用_第1张图片

  1. 新建src源代码目录

  2. 新建scr中index.html首页

在这里插入图片描述

  1. 初始化首页基本的结构

前端工程化--webpack配置和脚手架的简单应用_第2张图片

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

前端工程化--webpack配置和脚手架的简单应用_第3张图片

  1. 通过模块化的形式,实现列表变色的效果

    //这是ES6模块化的语法
    import $ from 'jquery'
    
    $(function () {
           
        $('li:odd').css('backgroundColor', 'pink')
        $('li:even').css('backgroundColor', 'red')
    })
    

    这样的方式是ES6模块的语法,浏览器支持的不是很好,所以需要用webpack处理一下

2、在项目中安装和配置webpack
  1. 运行npm install webpack webpack-cli -D命令,安装webpack相关的包

前端工程化--webpack配置和脚手架的简单应用_第4张图片

  1. 在项目根目录中,创建webpack.config.js的webpack配置文件

  2. 在webpack的配置文件中,初始化如下基本配置

    module.exports={
           
    	mode:'development'//mode用来指定构建模式
        //development开发期间
        //production上线之后
    }
    
  3. package.json配置文件中的script节点下,新增dev脚本如下:

    "script":{
           
    	"dev":"webpack"//script 节点下的脚本,可以通过npm run执行	
    }
    
  4. 在终端中运行 npm run dev命令,启动webpack进行项目打包

前端工程化--webpack配置和脚手架的简单应用_第5张图片

成功后自动创建了dist文件夹,里面自动创建了main.js

  1. 在index.html文件中,修改

前端工程化--webpack配置和脚手架的简单应用_第6张图片

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文件中,修改

效果如下:

前端工程化--webpack配置和脚手架的简单应用_第7张图片

4、配置webpack的自动打包功能

如果我们需要修改代码的某一个值,那么需要重新打包才能看到效果,这样效率太差就有了自动打包工具

  1. 运行npm install webpack-dev-server -D命令,安装支持项目自动打包的工具

  2. 修改package.json—>scrpit命令中的dev命令如下:

    "script":{
           
    	"dev":"webpack-dev-server"//script节点下的脚本,可以通过npm run执行
    }
    
  3. 将src—>index.html中,script脚本的引用路径,修改为/bundle.js

    <script src="/bundle.js"></script>
    
  4. 运行npm run dev命令,重新进行打包

前端工程化--webpack配置和脚手架的简单应用_第8张图片

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

前端工程化--webpack配置和脚手架的简单应用_第9张图片

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

前端工程化--webpack配置和脚手架的简单应用_第10张图片

  1. 修改webpack.config.js文件头部信息,添加如下配置

    //导入生成预览页面的插件,得到一个构造函数
    const HtmlWebpackPlugin = require('html-webpack-plugin')
    const htmlPlugin = new HtmlWebpackPlugin({
           //创建插件的实例对象
    	template:'./src/index.html',//指定要用到的模板文件
    	filename:'index.html'//指定生成的文件的名称,该文件存在内存中,在目录中不显示
    })
    
  2. 修改webpack.config.js文件中向外暴露的配置对象,新增如下配置节点:

    module.exports = {
           
    	plugins:[htmlPlugin]//plugins数组是webpack打包期间会用到的一些插件列表
    }
    

前端工程化--webpack配置和脚手架的简单应用_第11张图片

这时候打开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文件
  1. 运行npm i style-loader css-loader -D命令,安装处理css的loader

前端工程化--webpack配置和脚手架的简单应用_第12张图片

  1. 在webpack.config.js的module–>rules数组中,添加loader规则如下

    //所有第三方文件模块的匹配规则
    module:{
           
    	rules:[{
           
    	test:/\.css$/,
    	use:['style-loader','css-loader']
    	}]
    }
    

    其中,test表示匹配的文件类型,use表示对应要调用的loader

    注意:use数组中指定的loader顺序是固定的;多个loader的调用顺序是从后往前调用的

打包处理less文件
  1. 运行npm i less-loader less -D命令

前端工程化--webpack配置和脚手架的简单应用_第13张图片

  1. 在webpack.config.js的module—>rules数组中,添加loader规则如下:

    //所有第三方文件模块的匹配规则
    module:{
           
    	rules:[{
           
    	test:/\.less$/,
    	use:['style-loader','css-loader','less-loader']
    	}]
    }
    
打包处理scss文件
  1. 运行npm i sass-loader node-sass -D命令

前端工程化--webpack配置和脚手架的简单应用_第14张图片

  1. 在webpack.config.js的module—>rules数组中,添加loader规则如下:

    //所有第三方文件模块的匹配规则
    module:{
           
    	rules:[{
           
    	test:/\.scss$/,
    	use:['style-loader','css-loader','sass-loader']
    	}]
    }
    
配置postCSS自动添加css的兼容前缀

浏览器存在兼容问题,自己手动加兼容前缀太麻烦了,所有用postCss自动添加css兼容前缀

  1. 运行npm i postcss-loader autoprefixer -D命令

前端工程化--webpack配置和脚手架的简单应用_第15张图片

  1. 在项目根目录中创建postcss的配置文件posrcss.config.js,并初始化如下配置:

    const autoprefixer = require('autoprefixer')//导入自动添加前缀的插件
    module.exports = {
           
    	plugins:[autoprefixer]//挂载插件
    }
    
  2. 在webpack.config.js的module—>rules数组中,修改css的loader规则如下:

    module:{
           
    	rules:[{
           
    		test:/\.css$/,
    		use:['style-loader','css-loader','postcss-loader']
    	}]
    }
    
打包样式表中的图片和字体文件

做到上面的程度为止,如果需要在页面中显示图片还需要做以下处理:

  1. 运行npm i url-loader file-loader -D命令

前端工程化--webpack配置和脚手架的简单应用_第16张图片

  1. 在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);

需要做以下处理:

  1. 安装babel转换器相关的包:npm i babel-loader @babel/core @babel/runtime -D

前端工程化--webpack配置和脚手架的简单应用_第17张图片

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

前端工程化--webpack配置和脚手架的简单应用_第18张图片

  1. 在项目根目录中,创建babel配置文件babel.config.js并初始化基本配置如下:

    module.exports = {
           
        presets: ['@babel/presst-env'],
        plugins: ['@babel/plugin-transform-runtime', '@babel/plugins-proposal-class-properties']
    } 
    
  2. 在webpack.config.js的module—>rules数组中,添加loader规则如下:

    //exclude为排除项,表示babel-loader不需要处理node-modules中的js文件
    {
           test:/\.js$/,use:'babel-loader',exclude:/node_modules/}
    
webpack中配置vue组件的加载器
  1. 运行npm i vue-loader vue-template-compiler -D命令

前端工程化--webpack配置和脚手架的简单应用_第19张图片

  1. 在webpack.config.js配置文件中,添加vue-loader配置项如下:

    {
           test: /\.vue$/,use: 'vue-loader'}
    

Vue单文件组件

传统组件的问题和解决方案

问题

  • 全局定义的组件必须保证组件的名称不重复
  • 字符串模板缺乏语法高亮,在html有多行的时候要用到丑类的\
  • 不支持css意味着当html和JavaScript组件化时,css明显被遗漏
  • 没有构建步骤限制,只能使用html和ES5 JavaScript而不能使用预处理器

解决

针对传统组件的问题,Vue提供了一个解决方案-----使用Vue单文件组件

单文件组件的基本用法

单文件组件的组成结构

  • template:组件的模板区域
  • script:业务逻辑区域
  • style:样式区域

如下所示:






在webpack项目中使用vue

  1. 运行npm i vue -S安装vue

前端工程化--webpack配置和脚手架的简单应用_第20张图片

  1. 在src–index.js入口文件中,通过import Vue from 'vue'来导入vue构造函数

  2. 创建vue的实例对象,并指定要控制的el区域

  3. 通过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

前端工程化--webpack配置和脚手架的简单应用_第21张图片

基于交互式命令行的方式,创建新版vue项目

vue create my-project

之后会出现一个交互式的问答面板,如下:

前端工程化--webpack配置和脚手架的简单应用_第22张图片

然后根据出现的页面选择你要的需要。

基于图形化界面的方式创建新版vue项目

vue ui

在cmd窗口输入以上指定即可

前端工程化--webpack配置和脚手架的简单应用_第23张图片

Element UI

一套为开发者,设计师和产品经理准备的基于Vue 2.0的桌面端组件库

官网为:http://element-cn.eleme.io/#/zh-cn

  1. 安装依赖包npm i element-ui -S

前端工程化--webpack配置和脚手架的简单应用_第24张图片

  1. 导入Element-UI相关资源

    //导入组件库
    import ElementUI from 'element-ui'
    //导入组件相关样式
    import 'element-ui/lib/theme-chalk/index.css'
    //配置Vue插件
    Vue.use(ElementUI)
    

你可能感兴趣的:(vue,js,vue.js,javascript)