webpack loader 在文件被添加到依赖图中时,其转换为模块。
在 webpack 的配置中 loader 有两个目标:
a.识别出(identify)应该被对应的 loader 进行转换(transform)的那些文件。(test 属性)
b.转换这些文件,从而使其能够被添加到依赖图中(并且最终添加到 bundle 中)(use 属性)
webpack.config.js:
const path = require('path');
const config = {
entry: './path/to/my/entry/file.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'my-first-webpack.bundle.js'
},
module: {
rules: [
{ test: /\.txt$/, use: 'raw-loader' }
]
}
};
module.exports = config;
以上配置中,对一个单独的 module 对象定义了 rules 属性,里面包含两个必须属性:test 和 use。这告诉 webpack 编译器(compiler) 如下信息:
“嘿,webpack compiler,当你碰到「在 require()/import 语句中被解析为 ‘.js’ 或 ‘.jsx’ 的路径」时,在你把它们添加并打包之前,要先使用 babel-loader 去转换”。
注意:1.在webpack2.0版本已经将 module.loaders 改为 module.rules 为了兼容性考虑以前的声明方法任然可用,同时链式loader(用!连接)只适用于module.loader,同时-loader不可省略
// webpack2.0之前
modules: {
loaders: {
test:/\.scss$/,
loader:'style!css!sass'
}
}
// webpack2.0
modules: {
rules: {
test:/\.scss$/,
use:'style!css!sass'
}
}
2.重要的是要记得,在 webpack 配置中定义 loader 时,要定义在 module.rules 中,而不是 rules。然而,在定义错误时 webpack 会给出严重的警告。
(1).url-loader :多数用于加载图片资源,超过文件大小显示则返回data URL
使用loader之前必须运行安装 : npm install xxx-loader --save-dev
命令行中运行 webpack --module-bind jade --module-bind 'css=style!css'
//使用loader'jade'来加载'.jade'的文件 ,使用loaders 'style'和'css'加载'.css'文件
通过require声明(define,require.ensure,等等)来加载指定的loaders ,使用!来分割资源loaders,每一部分会被解析到当前的文件,可以在配置文件里通过加!前缀这种规则重写任意的loader
require("./loader!./dir/file.txt");
require("jade!./template.jade");
require("!style!css!less!bootstrap/less/bootstrap.less");
注意:提示:如果可以的话尽量不要使用require ,如果你想让你的脚本可运行在服务端和客户端(nodejs和浏览器)使用约定配置文件来配置
通过正则在配置文件里绑定loaders
//在webpack.config.js插入modules属性;(1)rules中包含对象数组,每个对象中{test,use}test对应正则表达式,use包含多个所需loader,如只需一个loader可省去use,格式如:loader : 'xxx-loader'
modules: {
rules: [
{test: /\.js$/, use: "babel"},//加载ES6+代码
{test: /\.css$/, use: "style!css"},//加载css
{test: /\.(png|jpg)$/, use: "url-loader?limit=8192"},//加载图片
{test: /\.scss$/, use: "style!css!sass"}//加载和转义sass/scss文件
]
}