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 相关文章推荐
动态的绑定事件addEventListener方法的使用
Jan 24 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
Mar 07 Javascript
很棒的Bootstrap选项卡切换效果
Jul 01 Javascript
JS动态加载脚本并执行回调操作
Aug 24 Javascript
微信小程序 require机制详解及实例代码
Dec 14 Javascript
详解node HTTP请求客户端 - Request
May 05 Javascript
Angular在模板驱动表单中自定义校验器的方法
Aug 09 Javascript
3种vue组件的书写形式
Nov 29 Javascript
浅谈React组件之性能优化
Mar 02 Javascript
node.js之基础加密算法模块crypto详解
Sep 11 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
Dec 09 Javascript
在layui.use 中自定义 function 的正确方法
Sep 16 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
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
php按字符无乱码截取中文的方法
2015/03/27 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
juqery 学习之四 筛选查找
2010/11/30 Javascript
Chrome中JSON.parse的特殊实现
2011/01/12 Javascript
用dtree实现树形菜单 dtree使用说明
2011/10/17 Javascript
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
javascript实现设置、获取和删除Cookie的方法
2015/06/01 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
纯jQuery实现前端分页功能
2017/03/23 jQuery
详解Vue打包优化之code spliting
2018/04/09 Javascript
React中的render何时执行过程
2018/04/13 Javascript
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
jQuery实现二级导航菜单的示例
2020/09/30 jQuery
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
记录Django开发心得
2014/07/16 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
Django values()和value_list()的使用
2020/03/31 Python
django实现日志按日期分割
2020/05/21 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
金融专业个人求职信
2013/09/22 职场文书
财务管理专业推荐信
2013/11/19 职场文书
元旦晚会策划方案
2014/02/18 职场文书
作文评语怎么写
2014/12/25 职场文书
24年收藏2000多部退役军用电台
2022/02/18 无线电