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 相关文章推荐
JavaScript高级程序设计 XML、Ajax 学习笔记
Sep 10 Javascript
什么是DOM(Document Object Model)文档对象模型
Mar 05 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
Aug 30 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
Jun 11 Javascript
jquery手风琴特效插件
Feb 04 Javascript
基于OL2实现百度地图ABCD marker的效果
Oct 01 Javascript
JS返回只包含数字类型的数组实例分析
Dec 16 Javascript
JS实现的Unicode编码转换操作示例
Apr 28 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
Dec 29 Javascript
微信小程序实现选择地址省市区三级联动
Jun 21 Javascript
JavaScript 中判断变量是否为数字的示例代码
Oct 22 Javascript
JavaScript实现筛选数组
Mar 02 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
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
php密码生成类实例
2014/09/24 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
Javascript 更新 JavaScript 数组的 uniq 方法
2008/01/23 Javascript
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
2010/11/16 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
jquery实现倒计时小应用
2017/09/19 jQuery
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
python制作小说爬虫实录
2017/08/14 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
Python延时操作实现方法示例
2018/08/14 Python
使用python Fabric动态修改远程机器hosts的方法
2018/10/26 Python
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
pytorch 模拟关系拟合——回归实例
2020/01/14 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
python如何查看网页代码
2020/06/07 Python
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
腾讯公司的一个sql题
2013/01/22 面试题
网上快餐厅创业计划书
2014/02/01 职场文书
学习雷锋月活动总结
2014/07/03 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
python执行js代码的方法
2021/05/13 Python
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
asyncio异步编程之Task对象详解
2022/03/13 Python