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实现网站超链接和图片提示效果
Mar 21 Javascript
jquery的clone方法应用于textarea和select的bug修复
Jun 26 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
Sep 24 Javascript
js实现文字滚动效果
Mar 03 Javascript
ES6的新特性概览
Mar 10 Javascript
jquery插件bootstrapValidator表单验证详解
Dec 15 Javascript
JS中如何实现Laravel的route函数详解
Feb 12 Javascript
es6学习之解构时应该注意的点
Aug 29 Javascript
基于vue实现一个神奇的动态按钮效果
May 15 Javascript
vue动态渲染svg、添加点击事件的实现
Mar 13 Javascript
Element Steps步骤条的使用方法
Jul 26 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
Sep 21 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实例教程
2006/11/19 PHP
php实现mysql数据库备份类
2008/03/20 PHP
php常用文件操作函数汇总
2014/11/22 PHP
微信自定义菜单的创建/查询/取消php示例代码
2016/08/05 PHP
一个实用的php验证码类
2017/07/06 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
2019/07/20 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
JS 统计时间
2021/03/09 Javascript
jQuery示例收集
2010/11/05 Javascript
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
JavaScript中的私有/静态属性介绍
2012/07/26 Javascript
js Array对象的扩展函数代码
2013/04/24 Javascript
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
jQuery中:checkbox选择器用法实例
2015/01/03 Javascript
jQuery动态效果显示人物结构关系图的方法
2015/05/07 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
Vue.js组件tree实现省市多级联动
2016/12/02 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
Pycharm设置界面全黑的方法
2018/05/23 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
python如何实现视频转代码视频
2019/06/17 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
中学生获奖感言
2014/02/04 职场文书
安全标兵事迹材料
2014/08/17 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
感恩老师主题班会
2015/08/12 职场文书
会计入职心得体会
2016/01/22 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python
【TED出品】天梯非主流开心游1700 划水骑士
2022/03/31 魔兽争霸