webpack本身只能打包Javascript文件,对于其他资源例如 css,图片,或者其他的语法集比如jsx,是没有办法加载的。 这就需要对应的loader将资源转化,加载进来。
比如
你的工程中,样式文件都使用了less语法,是不能被浏览器识别的,这时候我们就需要使用对应的loader,来把less语法转换成浏览器可以识别的css语法。
例如一个简单的less文件:
转换前:
.demo {
width: 200px;
height: 100px;
margin: auto;
border: 1px solid;
p {
font-weight:bold;
padding-left: 30px;
}
}
转换后:
.demo {
width: 200px;
height: 100px;
margin: auto;
border: 1px solid;
}
.demo p {
font-weight: bold;
padding-left: 30px;
}
后面的案例也是拿这个less文件来做演示的。
先来看一下官方对loader的一个解释:
A loader is a node module exporting a function
翻译过来:loader就是一个export出来的function。
既然是 node module,所以如果你自己要自定义一个loader,完全可以这么写:
module.exports = function (source) {
// todo
}
解释
其中source参数是这个loader 要处理的源文件的字符串
返回经过**"翻译"**后的webpack 能够处理的有效模块
如果你所写的 loader 需要依赖其他模块的话,那么同样以 module 的写法,将依赖放在文件的顶部引进来即可:
var fs = require("fs")
module.exports = function (source) {
// todo
}
如果你希望将处理后的结果(不止一个)返回给下一个 loader,那么就需要调用 webpack 所提供的 api。
在看了前面的介绍后,接下来给大家介绍一下怎么使用loader。
有三种使用方式,如下:
配置(推荐):在 webpack.config.js 文件中指定 loader。
内联:在每个 import 语句中显式指定 loader。
CLI:在 shell 命令中指定它们。
以上三种方式,我们在开发过程中推荐使用第一种方式:
比如你想使用webpack来打包样式文件,则可以在webpack.config.js里添加如下代码:
module: {
rules: [
{
test: /\.css$/, // 正则匹配所有.css后缀的样式文件
use: ['style-loader', 'css-loader'] // 使用这两个loader来加载样式文件
}
]
}
module.rules 允许你在 webpack 配置中指定多个 loader。 这是展示 loader 的一种简明方式,并且有助于使代码变得简洁。
上述rules的作用:
webpack在打包过程中,凡是遇到后缀为css的文件,就会使用style-loader和css-loader去加载这个文件。
在对loader有了一个大概的认识后,来做一个小案例,需求如下:
将上一篇(webpack系列之基本概念和使用)的demo输出文字居中并用黑框圈起来
代码目录结构如下:
├── node_modules
├── app
│ ├── bundle.js
│ └── index.html
├── package-lock.json
├── package.json
├── src
│ ├── index.js
│ └── main.less
└── webpack.config.js
我们必须使用 loader 告诉 webpack 加载 less 文件,为此,需要首先安装相对应的 loader:
npm install --save-dev less
npm install --save-dev less-loader
npm install --save-dev css-loader
npm install --save-dev style-loader
这些loader的作用如下:
安装less-loader后可以在js中使用require的方式来加载less文件了;
安装css-loader后可以在js中加载css文件;
安装style-loader的目的是为了让加载的css作为style标签内容插入到html中。
webpack.config.js代码如下:
module.exports = {
devtool: 'eval-source-map',
entry: __dirname + "/src/index.js", //入口文件
output: {
path: __dirname + "/app", //打包后的文件存放的地方
filename: "bundle.js" //打包后输出文件的文件名
},
module: {
rules: [
{
test: /\.less$/,
use: ['style-loader','css-loader', 'less-loader']
}
]
}
}
main.less代码如下:
.demo {
width: 200px;
height: 100px;
margin: auto;
border: 1px solid;
p {
font-weight:bold;
padding-left: 30px;
}
}
在入口文件index.js里引入我们的样式文件
require ('./main.less');
var element = document.createElement('div');
element.className = 'demo';
var p = document.createElement('p');
p.innerText = 'webpack系列之loader的基本使用!';
element.appendChild(p);
document.body.appendChild(element);
在项目根目录(webpack-demo)下执行打包命令:
➜ webpack-demo webpack
打包成功,会输出如下:
Hash: 1bb51c6a348686a223db
Version: webpack 3.10.0
Time: 1077ms
Asset Size Chunks Chunk Names
bundle.js 53.8 kB 0 [emitted] main
[0] ./src/index.js 273 bytes {0} [built]
[2] ./src/main.less 1.19 kB {0} [built]
[2] ./node_modules/css-loader!./node_modules/less-loader/dist/cjs.js!./src/main.less 304 bytes {0} [built]
在浏览器里刷新index.html:
你会发现输出的文字被一个黑框给圈了起来,并且加粗显示,这就表明我们的样式文件已经生效了,而且从截图当中也可以看见样式文件也插入到了html中。
css-loader : 解析css文件中代码
style-loader : 将css模块作为样式导出到dom中
less-loader : 加载和转义less文件
sass-loader : 加载和转义sass/scss文件
script-loader : 在全局上下文中执行一次javascript文件,不需要解析
babel-loader : 加载ES6 代码后使用babel转义为ES5后浏览器才能解析
url-loader : 多数用于加载图片资源,超过文件大小显示则返回data URL
raw-loader : 加载文件原始内容(utf-8格式)
vue-loader : 加载和转义vue组件
react-hot-loader : 动态刷新和转义react组件中修改的部分
来自:https://www.cnblogs.com/itdream/archive/2020/08/15/13511046.html
webpack 在前端工程中随处可见,当前流行的 vue, react, weex 等解决方案都推崇 webpack 作为打包工具。前端工具云集的时代,这是你值得选择的之一。
webpack是前端工程构建的一套工具,为什么一个程序称之为一套呢,是因为webpack其实是npm的一个模块,使用起来的话,这期间还需要很多其它模块来进行支持,所以我称之为一套工具。
本文从一个小Demo开始,通过不断增加功能来说明webpack的基本配置,只针对新手。webpack基本的配置就可以熟悉了,会引入loader,配置loader选项,会设置alias,会用plugins差不多。
Plugins是webpack的基础,我们都知道webpage的plugin是基于事件机制工作的,这样最大的好处是易于扩展。讲解如果扩展内置插件和其他插件,以及我们常用的Plugins插件
webpack技巧的总结:进度汇报、压缩、复数文件打包、分离app文件与第三方库文件、资源映射、输出css文件、开发模式、分析包的大小、更小的react项目、更小的Lodash、引入文件夹中所有文件、清除extract-text-webpack-plugin日志。
Webpack 作为目前最流行的前端构建工具之一,在 vue/react 等 Framework 的生态圈中都占据重要地位。在开发现代 Web 应用的过程中,Webpack 和我们的开发过程和发布过程都息息相关,如何改善 Webpack 构建打包的性能也关系到我们开发和发布部署的效率。
新版 Webpack 中我们所做的每一个更新目的都在于此,为了当大家在使用 Webpack 的时候敏捷连续毫无顿挫感。 webpack 4 进行构建性能测试,得出的结果非常有趣。结果很惊人,构建时间降低了 60%-98%!
Webpack 是一个现代 JavaScript 应用程序的模块打包器 (module bundler) 。当 Webpack 处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块
Tobias Koppers是一位自由软件开发者,家住德国纽伦堡。他因写出webpack这个已有数百万开发者使用的开源软件而名噪一时。他目前专注于JavaScript和开源项目。以下是我对他个人的专访,希望对大家有所启发。
本文讲述css-loader开启css模块功能之后,如何与引用的npm包中样式文件不产生冲突。比如antd-mobilenpm包的引入。在不做特殊处理的前提下,样式文件将会被转译成css module。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!