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中的函数
Jan 22 Javascript
javascript 拖放效果实现代码
Jan 22 Javascript
SWFObject 2.1以上版本语法介绍
Jul 10 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
Feb 05 Javascript
jQuery实现html元素拖拽
Jul 21 Javascript
探寻JavaScript中this指针指向
Apr 23 Javascript
js代码延迟一定时间后执行一个函数的实例
Feb 15 Javascript
jQuery实用密码强度检测
Mar 02 Javascript
Kindeditor单独调用多图上传实例
Jul 31 Javascript
vue组件表单数据回显验证及提交的实例代码
Aug 30 Javascript
用vue-cli开发vue时的代理设置方法
Sep 20 Javascript
JavaScript实现网页下拉菜单效果
Nov 20 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+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
php四种基础算法代码实例
2013/10/29 PHP
浅谈PHP中的
2016/04/23 PHP
PHP微信支付实例解析
2016/07/22 PHP
PHP共享内存使用与信号控制实例分析
2018/05/09 PHP
javascript读取RSS数据
2007/01/20 Javascript
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
2015/03/14 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
详解vue 命名视图
2019/08/14 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
Python多进程编程技术实例分析
2014/09/16 Python
Python素数检测实例分析
2015/06/15 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
基于numpy.random.randn()与rand()的区别详解
2018/04/17 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
python爬虫 urllib模块反爬虫机制UA详解
2019/08/20 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
Python 根据数据模板创建shapefile的实现
2019/11/26 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
水果花束:Fruit Bouquets
2017/12/20 全球购物
创建精神文明单位实施方案
2014/03/08 职场文书
职工代表大会主持词
2014/04/01 职场文书
python小程序之飘落的银杏
2021/04/17 Python
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
深入理解redis中multi与pipeline
2021/06/02 Redis