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 相关文章推荐
用jquery ajax获取网站Alexa排名的代码
Dec 12 Javascript
JS判断表单输入是否为空(示例代码)
Dec 23 Javascript
jQuery实现360°全景拖动展示
Mar 18 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
Mar 26 Javascript
jQuery实现选项卡切换效果简单演示
Dec 09 Javascript
js判断radiobuttonlist的选中值显示/隐藏其它模块的实现方法
Aug 25 Javascript
Bootstrop实现多级下拉菜单功能
Nov 24 Javascript
微信小程序商城项目之侧栏分类效果(1)
Apr 17 Javascript
JavaScript中Object基础内部方法图
Feb 05 Javascript
通过实例讲解JS如何防抖动
Jun 15 Javascript
解决vue-cli 打包后自定义动画未执行的问题
Nov 12 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
Jan 18 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
Smarty+QUICKFORM小小演示
2007/02/25 PHP
php 更新数据库中断的解决方法
2009/06/05 PHP
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
YII使用url组件美化管理的方法
2015/12/28 PHP
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
PHP实现的用户注册表单验证功能简单示例
2019/02/25 PHP
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
echarts整合多个类似option的方法实例
2018/07/10 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
[49:35]LGD vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
Python程序设计入门(2)变量类型简介
2014/06/16 Python
Python 点击指定位置验证码破解的实现代码
2019/09/11 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
文明社区申报材料
2014/08/21 职场文书
中秋客户感谢信
2015/01/22 职场文书
导游词之江西赣州
2019/10/15 职场文书
python使用pygame创建精灵Sprite
2021/04/06 Python
用python开发一款操作MySQL的小工具
2021/05/12 Python
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL
如何在python中实现ECDSA你知道吗
2021/11/23 Python
Python利用capstone实现反汇编
2022/04/06 Python
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis