webpack之Loader加载器

来源:互联网 发布:php与java工资 编辑:程序博客网 时间:2024/05/22 17:27
         webpack 的目标是,让 webpack 聚焦于项目中的所有资源(asset),而浏览器不需要关注考虑这些(明确的说,这并不意味着所有资源(asset)都必须打包在一起)。webpack 把每个文件(.css, .html, .scss, .jpg, etc.) 都作为模块处理。然而 webpack 自身只理解 JavaScript

webpack loader 在文件被添加到依赖图中时,其转换为模块


一.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.0modules: {  rules: {  test:/\.scss$/,use:'style!css!sass'  }}
2.重要的是要记得,在 webpack 配置中定义 loader 时,要定义在 module.rules 中,而不是 rules。然而,在定义错误时 webpack 会给出严重的警告。

二.Loader加载的文件

1.模板:

 (1)html-loader:将HTML文件导出编译为字符串,可供js识别的其中一个模块
 (2)pug-loader : 加载pug模板
 (3)jade-loader : 加载jade模板(是pug的前身,由于商标问题改名为pug)
 (4)ejs-loader : 加载ejs模板
 (5)handlebars-loader : 将Handlebars模板转移为HTML

2.样式:

 (1)css-loader : 解析css文件中代码
 (2)style-loader : 将css模块作为样式导出到DOM中
 (3)less-loader : 加载和转义less文件
 (4)sass-loader : 加载和转义sass/scss文件
 (5)postcss-loader : 使用postcss加载和转义css/sss文件


3.脚本转换编译:

 (1)script-loader : 在全局上下文中执行一次javascript文件,不需要解析
 (2)babel-loader : 加载ES6+ 代码后使用Babel转义为ES5后浏览器才能解析
 (3)typescript-loader : 加载Typescript脚本文件
 (4)coffee-loader : 加载Coffeescript脚本文件


4.JSON加载:

 (1)json-loader : 加载json文件(默认包含)
 (2)json5-loader : 加载和转义JSON5文件


5.Files文件

 (1)raw-loader : 加载文件原始内容(utf-8格式)
 (2)file-loader : 将文件发送到输出的文件夹并返回URL(相对路径)
 (3)jshint-loader : 检查代码格式错误


6.图片加载

   (1).url-loader :多数用于加载图片资源,超过文件大小显示则返回data URL


7.加载框架:

 (1)vue-loader : 加载和转义vue组件
 (2)angualr2-template--loader : 加载和转义angular组件
 (3)react-hot-loader : 动态刷新和转义react组件中修改的部分,基于webpack-dev-server插件需先安装,然后在webpack.config.js中引用react-hot-loader


三.使用loader的方法有三种

使用loader之前必须运行安装 : npm install  xxx-loader    --save-dev


(1)通过CLI(通过命令行来绑定加载器

命令行中运行 webpack --module-bind jade  --module-bind 'css=style!css'   
  //使用loader'jade'来加载'.jade'的文件 ,使用loaders 'style'和'css'加载'.css'文件

(2)明确的require声明(在想要试用的js文件夹里直接加载) 

通过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和浏览器)使用约定配置文件来配置


(3)通过配置文件webpack.config.js 

通过正则在配置文件里绑定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文件]}


原创粉丝点击