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的滑动样例代码
Nov 20 Javascript
JS解决url传值出现中文乱码的另类办法
Apr 08 Javascript
xmlhttp缓存清除的2种解决方法
Dec 13 Javascript
深入剖析JavaScript:Object类型
May 10 Javascript
遍历js中对象的属性和值的实例
Nov 21 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
Dec 18 Javascript
使用JavaScript触发过渡效果的方法
Jan 19 Javascript
Angular.js跨controller实现参数传递的两种方法
Feb 20 Javascript
解决vue同一slot在组件中渲染多次的问题
Sep 06 Javascript
Vue props 单向数据流的实现
Nov 06 Javascript
基于Proxy的小程序状态管理实现
Jun 14 Javascript
JS控制下拉列表左右选择实例代码
May 08 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中var_export与var_dump的区别分析
2010/08/21 PHP
PHP高级对象构建 工厂模式的使用
2012/02/05 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
2013/01/29 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
2013/06/20 PHP
php的XML文件解释类应用实例
2014/09/22 PHP
解决PHP里大量数据循环时内存耗尽的方法
2015/10/10 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
prototype1.4中文手册
2006/09/22 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
深入探讨前端框架react
2015/12/09 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
Jquery EasyUI $.Parser
2017/06/02 jQuery
vue 中自定义指令改变data中的值
2017/06/02 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
Python中turtle作图示例
2017/11/15 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
python 成功引入包但无法正常调用的解决
2020/03/09 Python
python的flask框架难学吗
2020/07/31 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
python 30行代码实现蚂蚁森林自动偷能量
2021/02/08 Python
招聘单位介绍信
2014/01/14 职场文书
小学毕业感言500字
2014/02/28 职场文书
求职信结尾怎么写
2014/05/26 职场文书
食品安全演讲稿
2014/09/01 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书
收入证明范本
2015/06/12 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
JavaScript如何利用Promise控制并发请求个数
2021/05/14 Javascript