webpack基础入门

作用:对于scss文件进行模板翻译,翻译的时候需要三个loader,从左到右分别为style-loader, css-loader ,sass-loader,表示的含义:先进行scss文件翻译,然后是css文件翻译,最后是渲染到页面上。与之类似的还有less-loader

css-loader中的importLoadersd与modules


  • importLoadersd,该参数的参数值为2时,表示允许scss文件中的import导入

  • modules,该属性的表现方式该文件为局部样式而不是全局样式,在这时导入的样式文件名为style

loader中涉及到的webpack.config.js中配置文件的形式如下


对于loader的使用如同下面配置文件,在rules下增加loader,rules中存放的是数组,数组中存放的就是需要一个个对象,对象中test属性用于匹配文件,use表示使用何种规则

const path = require(‘path’);

module.exports = {

mode: “production”,

entry: {

main: “./src/index.js”

},

module: {

rules: [

{

test: /.(png|jpg)$/,

use: [

{

loader: ‘url-loader’,

options: {

name: ‘[name]_[hash].[ext]’,

outputPath: ‘images’,

limit: 40210 }

}

]

},{

test: /.scss$/,

use: [

‘style-loader’,

{

loader: ‘css-loader’,

// options: {

// importLoaders: 2,

// modules: true

// }

},

‘sass-loader’

]

},{

test: /.(eot|ttf|woff|woff2)$/,

use:{

loader: ‘file-loader’

}

}

]

},

output: {

filename: “[name].js”,

path: path.resolve(__dirname, “dist”)

}

}

plugin的含义


对于plugin可以这样来理解,webpack在运行到某个时候,帮你做的一些事情。这就好比在vue或者是react中的生命周期函数一样,在组件加载在某个时刻就执行对应的生命周期函数

html-webpack-plugin


  • 在使用之前需要引入依赖包,引入依赖包可以通过npm或者是yarn来引入。

  • 插件作用,会帮助生成一个html文件,并将打包好的js文件自动添加到这个html文件中,但是默认生成的html模板里面没有任何的结构,因此在使用时,需要引入自己定义好的html文件模板,此时只需要在实例中,传入一个实例对象,对象的属性名为template,属性值为文件的路径。需要注意的是,该插件运行的时间是在webpack打包完成之后才进行

clean-webpack-plugin


  • 插件引入方式,在使用之前需要引入依赖包,引入依赖包可以通过npm或者是yarn来引入

  • 插件作用,会在打包之前,去清除掉之前打包好的文件,在官方引入中引入的方式的方式是通过import {} from ‘’;的方式,在实例化的过程中也不需要去传入文件名的参数

output与entry基础配置


关于output与entry在上面已经说过了,在这里需要对entry的两个配置参数做说明

对于entry这个参数,其对应的的属性值有两种传入参数的方式

  1. 如果传入的是单个文件,此时该参数可以是字符串,如果output中的传入的对象没有配置时,此时输出打包后的文件名为main.js;如果使用了filename这个属性,那么最后打包输出的名称为filename的属性值。

  2. 如果入口文件是两个及其以上,那么配置entry的参数的属性值,为一个对象,在该对象的内部传入的属性,与属性值分别代表的意思就是打包后生成的文件的文件名,以及打包的入口地址,那么与此对应的output中,filename的属性值,就可以写成[name].js或者用[hash]_[name].js等方式,来说明有多个文件的引入

publicPath参数说明

该参数表示生成的打包好的文件,可以在一个相同域名下的文件中,如: ‘http://cdn.com.cn’,则此时就需要在output中新增publicPath: ‘http://cdn.com.cn’,在这里需要注意下,使用该参数时不能乱用,否则会出现路径错误

sourceMap使用


  • sourceMap的作用,用于去检测打包生成后的bug检测,其表示一种映射关系,用于指出产生错误的源文件的位值

  • devtool参数的说明

  • none:能够指出打包生成后的文件的错误代码的位置,但是不能指出源文件出错代码的错误

  • source-map: 能够找出源文件错误,但是会生成.map的文件

  • inline会将.map文件嵌入到打包生成的文件

  • module能够映射出模块、插件等这些依赖包中的问题

  • cheap 不会精确到列中的错误

  • eval 包裹模块代码

  • 通常情况下各环境中推荐的参数

  • production下使用devtool: ‘cheap-module-eval-source-map’

  • development下使用devtool: ‘cheap-module-source-map’

webpack自动启动服务方式


对于webpack自动启动服务的方式有三种方式,如下所示

  • 在webpack中的script下配置webpack --watch参数,但是这样做的不能实现自动刷新

  • 使用devServer,能够启动界面,并且能完成自动刷新,并且启动时是在http协议下,即本地的服务器启动,此时需要在script下配置webpack-dev-server,同时还需要安装webpack-dev-server这个依赖。devserver的参数说明

  • contentBase用于指明打包生成的文件的位置

  • port用于说明启动端口的位置,默认指的是8080

  • proxy用于指明,当转到某个路由时,自动跳转到某个地址

  • 使用node手动配置devserver,使用webpack-dev-middleware中间件启动

Hot Module Replacement使用


  • 作用:当重新刷新界面时,可以使得刷新后的界面,保存之前的一些操作,只更改某些操作
  1. 对于css而言,当使用Hot Module Replacement后,可以更新其所有的内容,但是对于js的操作,会保存前一次的更新

  2. 对于js而言,可以一些操作,去检测到某个模块改变之后的状态

  • 配置方式
  1. 首先需要在devServer中去配置hot参数设置为true,hotOnly参数设置为true

  2. 引入webpack,然后plugins中新增webpack.HotModuleReplacement()实例

plugin所涉及到webpack.config.js中的配置内容


const path = require(‘path’);

const htmlWebpackPlugin = require(‘html-webpack-plugin’);

const { CleanWebpackPlugin } = require(‘clean-webpack-plugin’);

const webapck = require(‘webpack’);

module.exports = {

mode: ‘development’,

devtool: ‘cheap-module-eval-source-map’,

entry: {

main: ‘./src/index.js’

},

devServer: {

// contentBase: path.join(__dirname, ‘dist’),

contentBase: ‘./dist’,

open: true,

proxy: {

‘/api’: “http://localhost:3000”

},

hot: true,

hotOnly: true

},

module: {

rules: [{

test: /.css$/,

use:[‘style-loader’,‘css-loader’]

}]

},

plugins: [

new webapck.HotModuleReplacementPlugin(),

new CleanWebpackPlugin(),

new htmlWebpackPlugin({

template: ‘src/index.html’

})],

output: {

publicPath: ‘/’,

filename: ‘[name].js’,

path: path.resolve(__dirname, ‘dist/’)

}

}

bebel


对于babel只需要知道的就是其能够将高级的es6及其es6以上的语法,转换为es5或者是es5一下的语法,这样做的原因是因为的一些浏览器对于这些高级语法不支持,只能支持低版本的语法

babel-loader的作用


作为一个桥梁,将本地的js文件与babel库连接起来

@babel/core


是一个babel的核心库,里面是关于所有的js中es6部分转为es5中的核心内容

@babel/preset-env


如果只是这种默认情况的话,用于es6转为es5的语法,对于es5中的有一些语法还是不能够被低版本的浏览器识别,如果要使得低版本的浏览器也能够识别就得使用Babel中的polyfill

@babel/polyfill


  • 作用:对于一些低版本的浏览器,其不支持es5的语法,这时就使该库,将es5转为浏览器能够识别的语法规则,在这里使用可以使用useBuiltIns,其目的是为了实现按需加载的要求,不必要将所有的代码都进行转化,这样就能在性能上做到极大的优化

  • 缺点:这种方式来实现转义会造成全局污染,当遇到类库或者是组件库的开发时,应该换另外的方式来实现,target参数作用,设置需要进行转义的浏览器的版本信息

其具体的使用方式如下:

  1. 安装@babel/polyfill与@babel/preset-env这两个依赖

  2. 在optios中配置presets参数,其参数值为 [[’@babel/preset-env’,{ targets: {chrome: “67”}useBuiltIns: ‘usage’}]]

  3. 最后在需要转义的js文件中全局引入@babel/polyfill,具体为import ‘@babel/polyfill’

  4. 注意:当在preset-env中设置了useBuiltIns时,是可以不用在js中引入import ‘@babel/polyfill’

@babel/plugin-transform-runtime


该插件的作用与polyfill的作用类似,但其弥补了polyfill的缺点,当遇到类库或者是组件库的开发时,就可以使用这种方式来对项目进行开发,具体的使用方式如下:

  1. 首先安装@babel/plugin-transform-runtime和@babel/runtime两个库

  2. 然后对其进行配置配置参数如webpack.config.js文件中所示

  3. 当"corejs"的值为2时,还需要安装依赖@babel/runtime-corejs2

  4. 最后对其进行打包即可完成所需要的配置

当babel中options的配置参数非常多时的处理方式


  1. 在根目录下去创建.babelrc文件夹

  2. 将options的文件夹中的配置内容放入到该文件中,并采用json配置的格式

  3. 删除掉在webpack.config.js文件中的optios参数即可

使用react代码如何实现打包


  1. 首先安装react与react-dom的依赖包

  2. 其次是安装@babel/preset-react,用于去解析jsx语法

  3. 在babelrc中配置参数,增加@babel/preset-react依赖包

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

React

  • 介绍一下react

  • React单项数据流

  • react生命周期函数和react组件的生命周期

  • react和Vue的原理,区别,亮点,作用

  • reactJs的组件交流

  • 有了解过react的虚拟DOM吗,虚拟DOM是怎么对比的呢

  • 项目里用到了react,为什么要选择react,react有哪些好处

  • 怎么获取真正的dom

  • 选择react的原因

  • react的生命周期函数

  • setState之后的流程

  • react高阶组件知道吗?

  • React的jsx,函数式编程

  • react的组件是通过什么去判断是否刷新的

  • 如何配置React-Router

  • 路由的动态加载模块

  • Redux中间件是什么东西,接受几个参数

  • redux请求中间件如何处理并发

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

是怎么对比的呢

  • 项目里用到了react,为什么要选择react,react有哪些好处

  • 怎么获取真正的dom

  • 选择react的原因

  • react的生命周期函数

  • setState之后的流程

  • react高阶组件知道吗?

  • React的jsx,函数式编程

  • react的组件是通过什么去判断是否刷新的

  • 如何配置React-Router

  • 路由的动态加载模块

  • Redux中间件是什么东西,接受几个参数

  • redux请求中间件如何处理并发

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-kj2Tgx22-1712871480274)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值