Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >webpack实战——预处理器(loader)【下篇】

webpack实战——预处理器(loader)【下篇】

作者头像
流眸
发布于 2020-08-06 12:07:19
发布于 2020-08-06 12:07:19
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

写在前面

这是webpack实战系列笔记的第6篇记录,前几篇记录如下:

  • 打包第一个应用
  • 模块化与模块打包
  • 资源输入与输出
  • 一切皆模块
  • 预处理器【上篇】

在上一篇中根据一切皆模块的思想,学习了解了loader:概述、引入、配置及使用。本篇接着上篇的话题,讲述常用loader。

在我们项目开发中,尤其是目前流行的单页面应用,一些新手经常会在loader配置中有一些疑问,比如:

  • 对于xx资源应该使用哪个loader?
  • 实现xx功能配置哪个loader?
  • ...

常用loader介绍

其实,在社区上每天都会有很多loader发布,开发者在选择loader的时候要多读一下loader文档,了解loader用法,优缺点,然后根据需求去挑选。接下来介绍几种常用loader。

1. babel-loader

作用

“babel-loader是用来处理ES6+并将其编译为ES5

安装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install babel-loader @babel/core @babel/preset-env

看这条安装指令,有几个参数,代表着什么呢?

  • babel-loader:它是使Babel与Webpack协同工作的模块
  • @babel/core:Babel编译器的核心模块
  • @babel/preset-env:Babel官方推荐的预置器,可根据用户设置的目标环境自动添加所需要的插件和补丁来编译ES6+代码
示例

当然,知道了参数,也需要根据loader文档注意一些小细节,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rules: [
    {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
            loader: 'babel-loader',
            options: {
                cacheDirectory: true,
                presets: [
                    [
                        'env', {
                            modules: false
                        }
                    ]
                ]
            }
        }
    }
]
说明
  1. babel-loader一般对于js后缀文件生效, 而在node_modules中所有插件有大量的js后缀文件,因此需要使用exclude将其排除,避免打包时速度过慢;
  2. 可以看到上面配置中添加了cacheDirectory: true的配置,意味着会启用缓存机制,在多次打包时,如果没有做过改变的模块不会二次编译,打包时只重新编译更改的模块,以此来加快打包速度;
  3. 另外可以看到@babel/presets-env中配置为modules: false,原因是 @babel/presets-env会自动将ES6 Module转化为CommonJS形式,会导致Webpack中的tree-shaking特性失效,而将modules配置为false后会禁用模块化语句的转化,将Module的语法交给Webpack本身去处理,来避免这一问题的发生。
  4. babel-loader支持从.babelrc文件读取Babel配置,因此也可以将presets和plugins从Webpack配置文件中提取出来,也能达到相同效果。

2. ts-loader

作用

“用于连接Webpack与TypeScript的模块

安装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install ts-loader typescript
配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rules: [
    {
        test: /\.ts$/,
        use: 'ts-loader'
    }
]
说明

学习或使用过typescript的开发者都知道,typescript的配置信息在工程目录下的tsconfig.jsson中,因此在ts-loader中不配置,直接对tsconfig.json进行配置即可。如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "compilerOptions": {
        "target": "es5",
        "sourceMap": true
    }
}

3. html-loader

作用

“用于将HTML文件转化为字符串并进行格式化,这使得我们可以把一个HTML片段通过JS加载进来

安装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install html-loader
配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rules: [
    {
        test: /\.html$/,
        use: 'html-loader'
    }
]
使用示例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- header.html -->
<header>
    <h1>This is a Header.</h1>
</header>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// index.js
import Header from './header.html'
document.write(Header)

4. vue-loader

作用

“vue-loader用于处理.vue组件,类似如下示例形式,常与vue-template-compiler、css-loader配合使用。

安装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install vue-loader vue vue-template-compiler css-loader

包含有:

  • vue
  • vue-loader
  • vue-template-compiler
  • css-loader
vue组件示例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// App.vue
<template>
    <h1>{{ msg }}</h1>
</template>

<script>
export default {
    name: 'vue-loader',
    data() {
        return {
            msg: 'vue-loader'
        }
    }
}
</script>

<style lang="css">
h1{
    color: #f00;
}
</style>
配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rules: [
    {
        test: /\.vue$/,
        use: 'vue-loader'
    }
]

此处展示基础vue-loader示例,更多配置可以参考vue-loader官网文档

5. file-loader

作用

“用于打包文件类型的资源,并返回其PublicPath

安装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install file-loader
配置

以对图片(png、jpg、jepg、gif)为例来配置file-loader:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// webpack.config.js
const path = require('path');

module.exports = {
    entry: './index.js',
    output" {
        path: path.join(__dirname, 'dist'),
        filename: 'bundle.js'
    },
    module: {
        rules: [
            {
                test: /\.(png|jpg|jepg|gif)$/,
                use: 'file-loader'
            }
        ]
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// index.js  测试
import testPng from './test.png'
console.log(testPng);   // caj15a1123d2asf132c123cx132.jpg

6. url-loader

作用

“与file-loader类似,不同之处在于用户可以设置一个文件大小的阈值,小于该阈值时,返回的文件以base64形式编码,大于该阈值时返回publicPath

安装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install url-loader
配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rules: [
    {
        test: /\.(png|jpg|jepg|gif)$/,
        use: {
            loader: 'url-loader',
            options: {
                limit: 10240,
                name: '[name].[ext]',
                publicPath: './assets-path/'
            }
        }
    }
]

如此,如果目标文件资源大小小于设置的阈值,那么目标资源将会转化为base64形式编码。

小结

本篇着重接上一篇的loader配置,介绍了几种常用的loader及其作用和意义,如babel-loader、html-loader、vue-loader等,并配有简单的配置介绍,目的是对loader有基础的使用来促进更深的了解。回归本质,loader就是一个函数,能够处理相应功能的函数。第一个loader是源文件,之后所有loader是上一个loader的输出,最后一个loader则是输出给webpack。

除了JavaScript外,在打包方面另外一个重要工作就是样式处理。下一篇介绍webpack中对样式处理的模块。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 流眸 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Webpack(二):使用 loader
Webpack 提倡一切皆模块,所有类型的文件(css、图片等)都可以经过 loader 处理变成我们可加载的模块。
Chor
2019/11/07
1K0
从零搭建一个 webpack 脚手架工具(一)
webpack 是一个现代 JavaScript 应用程序的静态模块打包器,已经成为前端开发不可获取的工具。特别是在开发大型项目时,项目太大,文件过多导致难以维护,或者是优化网络请求时,webpack 都是不可获取的利器。但是 webpack 配置并没有那么容易,webpack 配置项繁多,繁多的背后是配置的灵活性。许多的框架都是由 webpack 搭建而成,因此学会使用 webpack 可以让自己更好的理解脚手架搭建过程,甚至自己写一个灵活高效的脚手架工具。
多云转晴
2019/12/05
1.7K0
webpack5构建一个小型简单vue项目 (练习)
webpack5构建vue 必要环境 安装ndejs 我们需要安装node 如果没有安装则安装 安装过则跳过 下载安装nodejs 执行 node -v npm -v [在这里插入图片描述] 初始化项目文件夹 新建一个空的项目 执行 npm init -y 初始化 npm init -y 会生成一个package.json [在这里插入图片描述] 安装webpack以及 html-webpack-plugin 控制台执行 npm i webpack webpack-cli webpack-dev-serv
代码哈士奇
2022/01/31
1K1
webpack快速构建项目
webpack是什么我在这里就不多说了,实在不知道的可以直接在去搜一下,都一大堆答案。关于用webpack怎么构建项目,方法也是多种多样,五花八门。今天,我就写下我平常构建项目的方式,这个方式我觉得比较便捷和简单粗暴,如果有什么要指出的,也欢迎大家评论,毕竟我也只是一个前端新人。
守候i
2018/08/22
8500
webpack快速构建项目
webpack从零搭建开发环境
为了方便也可以这么写,使用 npm run 命令这个命令执行的时候默认会把 node_modules 的.bin 文件放到全局上,执行之后销毁npm run buildnpm run dev
小丑同学
2020/09/21
1.3K0
读书笔记之webpack实战
1.commonjs只会对require的代码执行一次 之后的require只会直接取其导出值 2.es6 Module动态映射,CommonJs是值拷贝,前者可以支持一定程度的循环依赖,需要由开发保证导入时,已经设置好正确的导出值 3.通过单独加载包内的单独文件,从而减小打包体积 4.当第三方依赖较多时,我们可以用提取vendor的方法将这些模块打包到一个单独的bundle中,以更有效地利用客户端缓存,加快页面渲染速度。 5.webpack指定生成目录: webpack.config.js:配置output的path 6.与loader相关的配置都在module对象中,其中module.rules代表了模块的处理规则 7.两个一般一起使用: css-loader:处理css的加载语法 style-loader:将css插入页面 8.在Webpack中,我们认为被加载模块是resource,而加载者是issuer,可以配置哪个js可以加载css rules: [ { test: /.cssKaTeX parse error: Can't use function '\.' in math mode at position 119: … test: /\̲.̲js/, include: /src/pages/, }, } ], 9.enforce可以强制指定loader的执行顺序,分四种: normal:直接定义的默认 pre:代表它将在所有正常loader之前执行 post:和pre相反,代表它需要在所有loader之后执行 inline :webpack不推荐使用
kiki.
2022/09/29
2620
四大维度解锁webpack3笔记
在命令行输入webpack -h,成功就出现下图,有很多webpack命令可以看一看
FinGet
2019/06/28
1.1K0
四大维度解锁webpack3笔记
正确的Webpack配置姿势,快速启动各式框架!
在去年的这个时候,本骚年还在被Grunt和Gulp以及各种Requirejs、Seajs团团围住攻击,狼狈不堪。后面认识了Webpack之后,基本所有项目框架都拿它来构建了。
腾讯NEXT学位
2019/02/15
1.7K0
webpack 从入门到放弃
Webpack + ES6 已经成为目前最流行的前端解决方案,本文是 Webpack2 学习教程。
李振
2021/11/26
6170
怎么用webpack搭建前端环境?
一、前端构建工具 grunt gulp webpack(主流,https://webpack.js.org/) Fis3(百度) 二、webpack是什么 webpack 是一个现代 JavaScript 应用程序的静态模块打包器 webpack稳定版本:v4.44 三、如何使用webpack搭建前端环境 安装node.js( v12.x) 注意:如果npm安装一些包由于网速原因,安装慢切换一下镜像源 改成淘宝镜像: npm config set registry https://registry.np
江一铭
2022/06/16
1.2K0
Vue+Webpack打造todo应用 原
B.vue-loader需要安装15版本以下(参考官方文档 https://vue-loader.vuejs.org/migrating.html#a-plugin-is-now-required . Vue-loader在15.*之后的版本都是 vue-loader的使用都是需要伴生 VueLoaderPlugin的)
晓歌
2018/08/15
1.3K0
Vue+Webpack打造todo应用
                                                                            原
【初学者笔记】前端工程化必须要掌握的 webpack
现在学习的是 webpack4 的最新版,新建文件夹,npm init -y 初始化一下,然后执行下面命令进行安装,需要同时安装 webpack 和 webpack-cli。
一尾流莺
2022/12/10
6580
【初学者笔记】前端工程化必须要掌握的 webpack
Vue学习-Webpack
从本质上来讲,webpack是一个现代的JavaScript应用的静态模块打包工具。
花猪
2022/02/17
1.3K0
Vue学习-Webpack
使用Webpack5创建Vue2项目及优化
之前我们大多都是用Vue-Cli来创建项目,但是Vue-Cli已经停止更新了,并且Vue-Cli相当于一堆插件的集合体,我们想替换以下,或者想根据我们的项目优化以下,提升编译的性能,这时候可以自己用Webpack来配置项目。
码客说
2022/09/27
3.1K0
使用Webpack5创建Vue2项目及优化
webpack+vue项目实战(一,搭建运行环境和相关配置)
现在正在开发一个公司的后台管理项目,项目是一个单页面应用。功能上就是管理销售订单的各个环节,包括物流管理,回款管理,订单管理等等的功能。这些就不多说了。项目是,基于webpack3,vue2.2.6,element2.2.9。js语法是使用es6,还有使用到的一些资源比如,vue-router,vue-resource,webpack-dev-server等。运行环境是node6.10.0,npm3.10.10,其它版本的小小伙伴要注意版本兼容的问题喔!
守候i
2018/08/22
1.2K0
webpack+vue项目实战(一,搭建运行环境和相关配置)
webpack3.x文件配置
webpack3.x 主配置webpack.config.js文件,每个模块的详细信息都有一定的注释,如果有不对的地方,还请指教!
White feathe
2021/12/08
9430
Webpack 学习整理
Webpack是一个前端资源加载以及打包工具,只需要简单的配置即可实现前端各种工程化的操作。 配置 webpack 说难不难,说简单也不简单,现在几大框架都配备了全家桶,quick-start 项目基本上都已经配置好了基础的 webpack 配置。 虽然能够正常使用,但是,对于各个配置项,并不是很清楚。这几天利用空余时间,理一下几个 loader 和 插件的使用。
epoos
2022/06/06
5840
​(非软文)Webpack从入门到实战搭建Vue脚手架(一万字总结)
安装依赖包 (-D 将依赖记录成开发依赖, 只是开发中需要用的依赖, 实际上线不需要的)
Vam的金豆之路
2021/12/01
1.3K0
webpack入门级 - 从0开始搭建单页项目配置
webpack 作为前端最知名的打包工具,能够把散落的模块打包成一个完整的应用,大多数的知名框架 cli 都是基于 webpack 来编写。这些 cli 为使用者预设好各种处理配置,使用多了就会觉得理所当然,也就不在意是内部是如何配置。如果脱离 cli 开发,可能就无从下手了。
WahFung
2020/12/21
1.6K0
webpack入门级 - 从0开始搭建单页项目配置
Webpack4 搭建 Vue 项目
由于 Parcel 打包工具的影响,webpack4 也追求零配置搭建项目。而前阵子出现的 vue-cli 3.0也是基于 webpack4 零配置的思想创建的。对于一些习惯webpack3 的开发者难免有些不习惯。本文就带你绕过 vue-cli,用 webpack4 一步步搭建 vue 项目。
小皮咖
2019/11/05
1.1K0
相关推荐
Webpack(二):使用 loader
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验