Webpack中loader打包各种文件的方法实例


Posted in Javascript onSeptember 03, 2019

前言

使用webpack时,在main.js文件中直接使用如下代码导入了style.css文件,控制台中显示如下错误:You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file.

import './css/style.css';

原因是,webpack中默认只能打包.js类型文件,无法打包其他类型文件。如果要打包非.js类型文件,需要手动安装一些第三方loader加载器。

以下为各种文件类型打包实例:

处理css文件

方式一

在项目中用npm命令本地安装style-loader和css-loader两个包

npm install style-loader css-loader --save--dev

在引用style.css文件时,将import './css/style.css';代码改为以下代码:

import 'style-loader!css-loader!./style.css'")'; //先经过css-loader和style-loader处理

重新用webpack打包

npm run dev

这种方式的缺点是,当需要引入多个css文件,每次引入时都需要加style-loader!css-loader!,比较麻烦,因此推荐使用以下方式:

方式二

在项目中用npm命令本地安装style-loader和css-loader两个包

npm install style-loader css-loader --save--dev

打开webpack.config.js文件,在里面新增一个配置节点module,在module对象中,有一个rules属性,它是一个数组,里面存放了所有第三方文件匹配和处理规则。如下代码匹配处理css文件:

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

注意:此处'style-loader'和'css-loader'顺序不可替换。因为use中处理顺序为从后往前。先用css-loader对css文件进行处理,将处理后的结果交给style-loader作进一步处理,处理为webpack可以进行打包的数据。

引入style.css文件

import './css/style.css';

重新用webpack打包

npm run dev

以下所有其他类型文件的打包同方式二

处理less文件

在项目中用npm命令本地安装style-loader和css-loader和less-loader和less三个包(若已有style-loader和css-loader则不必再安装这两个)

npm install style-loader css-loader less-loader less --save--dev

打开webpack.config.js文件,在节点module中rules属性数组中,新增如下less的规则:

{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] } // 处理 less 文件的 loader

引入style.less文件

import './css/style.less';

重新用webpack打包

npm run dev

处理scss文件

在项目中用npm命令本地安装style-loader和css-loader和sass-loader和node-sass四个包(若已有style-loader和css-loader则不必再安装这两个)

npm install style-loader css-loader sass-loader node-sass --save--dev

打开webpack.config.js文件,在节点module中rules属性数组中,新增如下scss的规则:

{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] } // 处理 less 文件的 loader

引入style.scss文件

import './css/style.lcss';

重新用webpack打包

npm run dev

处理url地址

例如,在css样式中使用background-image:url('...'),webpack默认无法处理url,因此也需要手动安装第三方loader

在项目中用npm命令本地安装url-loader和file-loader两个包

npm install url-loader file-loader --save--dev

打开webpack.config.js文件,在节点module中rules属性数组中,新增如下的规则:

{ test: /\.(jpg|png|gif|bmp|jpeg)$/, use: 'url-loader' }, // 处理 图片路径的 loader
{ test: /\.(ttf|eot|svg|woff|woff2)$/, use: 'url-loader' }, // 处理 字体文件的 loader

重新用webpack打包

npm run dev

处理ES6高级语法

webpack默认只能处理一部分的ES6语法,对于一些更高级的ES6语法,webpack无法处理,如下代码用webpack打包会报错。

class Person {
	static info = {name:'zlx',age:18}
};
console.log(Person.info);

webpack需要借助于第三方的 loader,这里使用Babel,将高级的ES6语法转为低级的语法之后,再将结果进行打包。

用npm命令安装如下包:

npm i babel-core babel-loader babel-plugin-transform-runtime -D
npm i babel-preset-env babel-preset-stage-0 -D

打开webpack.config.js文件,在节点module中rules属性数组中,新增如下的规则:

{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }, // exclude是防止node_modules中的js文件被打包

在项目的 根目录中,新建一个 叫做 .babelrc  的Babel 配置文件,这个配置文件,属于JSON格式。里面写入如下代码:

{
 "presets": ["env", "stage-0"],
 "plugins": ["transform-runtime"]
}

重新用webpack打包

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
Apr 27 Javascript
这些年、我收集的JQuery代码小结
Aug 01 Javascript
jQuery 数据缓存模块进化史详细介绍
Nov 19 Javascript
再谈JavaScript线程
Jul 10 Javascript
JavaScript代码判断点击第几个按钮
Dec 13 Javascript
Bootstrap进度条组件知识详解
May 01 Javascript
将form表单通过ajax实现无刷新提交的简单实例
Oct 12 Javascript
vuex如何重置所有state(可定制)
Jan 17 Javascript
浅谈js闭包理解
Mar 28 Javascript
koa大型web项目中使用路由装饰器的方法示例
Apr 02 Javascript
详解es6新增数组方法简便了哪些操作
May 09 Javascript
微信小程序自定义tabBar在uni-app的适配详解
Sep 30 Javascript
JavaScript 预解析的4种实现方法解析
Sep 03 #Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
Sep 03 #jQuery
js tab栏切换代码实例解析
Sep 03 #Javascript
解决layui 三级联动下拉框更新时回显的问题
Sep 03 #Javascript
Node.js学习教程之Module模块
Sep 03 #Javascript
vue动态绘制四分之三圆环图效果
Sep 03 #Javascript
微信小程序拼接图片链接无底洞深入探究
Sep 03 #Javascript
You might like
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
jQuery中[attribute!=value]选择器用法实例
2014/12/31 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
2016/04/06 Javascript
js流动式效果显示当前系统时间
2016/05/16 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
vue.js+element 默认提示中英文操作
2020/11/11 Javascript
python实现从字符串中找出字符1的位置以及个数的方法
2014/08/25 Python
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
python中MethodType方法介绍与使用示例
2017/08/03 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
2018/06/01 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
10个顶级Python实用库推荐
2021/03/04 Python
法国时尚童装网站:Melijoe
2016/08/10 全球购物
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
国际经济贸易专业推荐信
2013/11/06 职场文书
应届生求职信范文
2014/06/30 职场文书
贫困证明模板(3篇)
2014/09/16 职场文书
财会专业大学生求职信
2014/09/26 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
三严三实心得体会范文
2014/10/13 职场文书
2016新党章学习心得体会
2016/01/15 职场文书
Python进行区间取值案例讲解
2021/08/02 Python
阿里云服务器Ubuntu 20.04上安装Odoo 15
2022/05/20 Servers