能够访问 这里 查看更多关于大数据平台建设的原创文章。javascript
webpack
自己只能打包Javascript
文件,对于其余资源例如css
,图片,或者其余的语法集好比jsx
,是没有办法加载的。 这就须要对应的loader
将资源转化,加载进来。css
好比
你的工程中,样式文件都使用了less
语法,是不能被浏览器识别的,这时候咱们就须要使用对应的loader
,来把less
语法转换成浏览器能够识别的css
语法。html
例如一个简单的less
文件:
转换前:vue
.demo { width: 200px; height: 100px; margin: auto; border: 1px solid; p { font-weight:bold; padding-left: 30px; } }
转换后:java
.demo { width: 200px; height: 100px; margin: auto; border: 1px solid; } .demo p { font-weight: bold; padding-left: 30px; }
后面的案例也是拿这个less
文件来作演示的。node
先来看一下官方对loader
的一个解释:react
A loader is a node module exporting a functionwebpack
翻译过来:loader
就是一个export
出来的function
。web
既然是 node module
,因此若是你本身要自定义一个loader
,彻底能够这么写:shell
module.exports = function (source) { // todo }
解释
其中source
参数是这个loader
要处理的源文件的字符串
返回通过**"翻译"**后的webpack
可以处理的有效模块
若是你所写的 loader
须要依赖其余模块的话,那么一样以 module
的写法,将依赖放在文件的顶部引进来便可:
var fs = require("fs") module.exports = function (source) { // todo }
若是你但愿将处理后的结果(不止一个)返回给下一个 loader
,那么就须要调用 webpack
所提供的 API
。
因为本篇咱们只讲loader
的基本使用,故这里再也不深刻讲解,有兴趣的能够点击这里学习。
在看了前面的介绍后,接下来给你们介绍一下怎么使用loader
。
有三种使用方式,以下:
以上三种方式,咱们在开发过程当中推荐使用第一种方式:
好比你想使用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中。
![图片描述][3]
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
组件中修改的部分
欢迎你们关注个人微信公众号阅读更多原创文章: