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严格模式禁用With语句的原因
Oct 20 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
Sep 02 Javascript
JavaScript实现的微信二维码图片生成器的示例
Oct 26 Javascript
js中new一个对象的过程
Feb 20 Javascript
vue2.0中click点击当前li实现动态切换class
Jun 21 Javascript
JS作用域链详解
Jun 26 Javascript
Angular通过angular-cli来搭建web前端项目的方法
Jul 27 Javascript
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
Jul 31 Javascript
如何从零开始手写Koa2框架
Mar 22 Javascript
Echarts实现单条折线可拖拽效果
Dec 19 Javascript
ES2020 已定稿,真实场景案例分析
May 25 Javascript
openlayers实现地图弹窗
Sep 25 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注入实例
2006/10/09 PHP
php+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
php模板函数 正则实现代码
2012/10/15 PHP
ThinkPHP调用百度翻译类实现在线翻译
2014/06/26 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
jquery validation验证身份证号,护照,电话号码,email(实例代码)
2013/11/06 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
2015/07/05 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
angularjs 页面自适应高度的方法
2018/01/17 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
JavaScript实现京东快递单号查询
2020/11/30 Javascript
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
浅谈django orm 优化
2018/08/18 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
某公司.Net方向面试题
2014/04/24 面试题
几道Java和数据库的面试题
2013/05/30 面试题
上班上网检讨书
2014/01/29 职场文书
财产公证书格式
2014/04/10 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
幼师个人总结范文
2015/02/28 职场文书
2015年禁毒工作总结
2015/04/30 职场文书
入党培养人考察意见
2015/06/08 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技