Webpack的加载器
一、什么是加载器(loaders)
loaders 用于转换应用程序的资源文件,他们是运行在nodejs下的函数 使用参数来获取一个资源的来源并且返回一个新的来源(资源的位置),例如:你可以使用loader来告诉webpack去加载less文件、sass文件、es的js文件等
二、loaders 特性
loaders可以串联,他们应用于管道资源,最后的loader将返回javascript,其它的可返回任意格式(传递给下一个loader)
loaders 可以同步也可以异步
loaders在nodejs下运行并且可以做一切可能的事
loader接受参数,可用于配置里
loaders可以绑定到extension/RegExps 配置
loaders 可以通过npm发布和安装
正常的模块儿可以到处一个loader除了
loaders 可以访问配置
插件可以给loaders更多的特性
loaders可以释放任意额外的文件
三、loaders的执行顺序
loaders的执行顺序分为三部分:preLoaders - loaders - postLoaders,针对每一个阶段可以这对不同的操作,preLoaders可以进行代码的时候检查,只有检测通过才可以进行loaders。loaders阶段主要进行css、js、 images等文件的处理。postLoaders阶段没有用到过
四、css-loader和style-loader添加CSS样式
现在来添加一些样式,webpack使用loader的方式来处理各种各样的资源,比如说样式文件,我们需要两种loader,css-loader 和 style-loader,css-loader会遍历css文件,找到所有的url(...)并且处理。style-loader会把所有的样式插入到你页面的一个style tag中。
安装我们的loader
npm install css-loader style-loader --save-dev
配置loader,在webpack.config.js中
var webpack = require('webpack');
var WebpackDevServer = require("webpack-dev-server");
var path = require('path');
var CURRENT_PATH = path.resolve(__dirname);
// 获取到当前目录
var ROOT_PATH = path.join(__dirname, '../');
// 项目根目录
var MODULES_PATH = path.join(ROOT_PATH, './node_modules');
// node包目录
var BUILD_PATH = path.join(ROOT_PATH, './dist');
// 最后输出放置公共资源的目录
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {
//项目的文件夹 可以直接用文件夹名称 默认会找index.js ,也可以确定是哪个文件名字
entry: {
app: ['./src/js/index.js'],
vendors: ['jquery', 'moment'] //需要打包的第三方插件
},
//输出的文件名,合并以后的js会命名为bundle.js
output: {
path: path.join(__dirname, "dist/"),
publicPath: "http://localhost:8088/dist/",
filename: "bundle_[name].js"
},
module: {
loaders: [
// 把之前的style loader改为
{
test: /\.css$/,
loader: ExtractTextPlugin.extract('style-loader', 'css-loader'),
exclude: /node_modules/
}
]
}
}
;
看loaders的书写方式,test里面包含一个正则,包含需要匹配的文件,loaders是一个数组,包含要处理这些程序的loaders,这里我们用了css和style,注意loaders的处理顺序是从右到左的,这里就是先运行css-loader然后是style-loader.
我们在webpackDemo项目里面创建一个css文件夹,然后 创建 index.css文件,内容如下:
body{
font-size: 16px;
}
然后在index.js引用 css文件
var login=require('./login');
var data = require('data');
require('./../css/index.css');
$("#welcome").html(data);
这样就能实现样式引用了。还可以结合ExtractTextPlugin进行样式提取。
var webpack = require('webpack');
var WebpackDevServer = require("webpack-dev-server");
var path = require('path');
var CURRENT_PATH = path.resolve(__dirname);
// 获取到当前目录
var ROOT_PATH = path.join(__dirname, '../');
// 项目根目录
var MODULES_PATH = path.join(ROOT_PATH, './node_modules');
// node包目录
var BUILD_PATH = path.join(ROOT_PATH, './dist');
// 最后输出放置公共资源的目录
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {
//项目的文件夹 可以直接用文件夹名称 默认会找index.js ,也可以确定是哪个文件名字
entry: {
app: ['./src/js/index.js'],
vendors: ['jquery', 'moment']
//需要打包的第三方插件
},
//输出的文件名,合并以后的js会命名为bundle.js
output: {
path: path.join(__dirname, "dist/"),
publicPath: "http://localhost:8088/dist/",
filename: "bundle_[name].js"
},
module: {
loaders: [
// 把之前的style&css&less loader改为
{
test: /\.css$/,
loader: ExtractTextPlugin.extract('style-loader', 'css-loader'),
exclude: /node_modules/
}, {
test: /\.less$/,
loader: ExtractTextPlugin.extract('style', 'css!less'),
exclude: /node_modules/
},
]
},
plugins: [
// 分离css
new ExtractTextPlugin('[name].bundle.css', {
allChunks: true
})
],
externals: {
// require('data') is external and available
// on the global var data
'data': 'data',
devtool: 'source-map'
}
};
五、autoprefixer-loader和less-loader处理less文件
项目中如果用到less,就需要对less进行转换,通过less-loader就能进行转换。autoprefixer-loader是针对css3的前缀进行自动 填充,例如:border-radius,autoprefixer-loader通过他就能把各个浏览器的前缀添加上去。
安装
npm install less autoprefixer-loader less-loader postcss-loader --save-dev
添加loader
var webpack = require('webpack');
var WebpackDevServer = require("webpack-dev-server");
var path = require('path');
var CURRENT_PATH = path.resolve(__dirname);
// 获取到当前目录
var ROOT_PATH = path.join(__dirname, '../');
// 项目根目录
var MODULES_PATH = path.join(ROOT_PATH, './node_modules');
// node包目录
var BUILD_PATH = path.join(ROOT_PATH, './dist');
// 最后输出放置公共资源的目录
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {
//项目的文件夹 可以直接用文件夹名称 默认会找index.js ,也可以确定是哪个文件名字
entry: {
app: ['./src/js/index.js'],
vendors: ['jquery', 'moment']
//需要打包的第三方插件
},
//输出的文件名,合并以后的js会命名为bundle.js
output: {
path: path.join(__dirname, "dist/"),
publicPath: "http://localhost:8088/dist/",
filename: "bundle_[name].js"
},
module: {
loaders: [
// 把之前的style&css&less loader改为
{
test: /\.css$/,
loader: ExtractTextPlugin.extract('style-loader', 'css-loader', 'postcss-loader'),
exclude: /node_modules/
}
, {
test: /\.less$/,
exclude: /node_modules/,
loader: ExtractTextPlugin.extract('style', 'css!autoprefixer?{browsers: ["last 2 version", "IE 8", "Android 4.0", "iOS 6"]}!less?strictMath&noIeCompat!postcss')
}
]
},
postcss: function() {
return [require('postcss-fixes')({ preset: 'recommended' })]
},
plugins: [
// 分离css
new ExtractTextPlugin('[name].bundle.css', {
allChunks: false
})
],
};
在webpackDemo 添加login.less文件
.maker-config {
width: 100px;
background-color: red;
border-radius: 50px;
margin-left: -48px;
float: right; a{
font-size: 16px;
display: flex }
}
执行webpack命令生成的css文件为:
body{font-size:16px}
.maker-config{
width:100px;
background-color:red;
border-radius:50px;
margin-left:-48px;
float:right}
.maker-config a{
font-size:16px;
display:-webkit-box;
display:-ms-flexbox;
display:flex}/*# sourceMappingURL=app.bundle.css.map*/
六、url-loader图片处理
这个和其他一样,也许你也已经会玩了。安装loader,处理文件。诸如图片,字体等等,不过有个神奇的地方它可以根据你的需求将一些图片自动转成base64编码的,为你减轻很多的网络请求。
安装url-loader
npm install url-loader --save-dev
配置config文件
{
test: /\.(png|jpg)$/,
loader: 'url?limit=40000'
}
注意后面那个limit的参数,当你图片大小小于这个限制的时候,会自动启用base64编码图片。
我们修改一下login.less文件
.maker-config {
background-color: red;
border-radius: 50px;
height:200px;
background: url('../images/white.png'); a{
font-size: 16px;
display: flex }
}
执行webpack执行命令,查看编译之后的css文件,可以看到 图片被转换为base64编码
body{font-size:16px}.maker-config{width:100px;background-color:red;border-radius:50px;height:200px;margin-left:-48px;float:right;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANcAAADXBAMAAAB7U9mGAAAAGFBMVEXw8PDy8vL09PT29vbt7e3r6+v4+Pj7+/v9bAgbAAAOsUlEQVR42rxaS5cyNRC9VQm4rUqacVuVbsZtukHX6QZ1C+PoGsbHWv3/C8/xddTxNSLfD4ADSe6j7i0AGNe+0AU2gA5Aqh1maZ657w9cNJJPBUHCZxTYEwslk7XjwVTWulgWrnaESqXMaUZ39pF0Z8RzKGXNzBOmXDFsB)}.maker-config a{font-size:16px;display:-webkit-box;display:-ms-flexbox;display:flex}/*# sourceMappingURL=app.bundle.css.map*/
Webpack的加载器的更多相关文章
- webpack常用加载器和插件
css文件加载器: style-loader,css-loader,sass-loader,less-loader //style和css加载器必须放在一起使用,且style必须放前面(style!c ...
- Webpack模块加载器
一.介绍 Webpack是德国开发者 Tobias Koppers 开发的模块加载器,它能把所有的资源文件(JS.JSX.CSS.CoffeeScript.Less.Sass.Image等)都作为模块 ...
- webpack loader加载器
配置loader,通过加载器处理文件,例如css sass less等,告诉webpack每一种文件都需要使用什么来加载器来处理. 1.node.js安装好之后也会自动默认安装好npm,所以cmd c ...
- 使用webpack loader加载器
了解webpack请移步webpack初识! 什么是loader loaders 用于转换应用程序的资源文件,他们是运行在nodejs下的函数 使用参数来获取一个资源的来源并且返回一个新的来源(资源的 ...
- Webpack 常见静态资源处理 - 模块加载器(Loaders)+ExtractTextPlugin插件
Webpack 常见静态资源处理 - 模块加载器(Loaders)+ExtractTextPlugin插件 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二: ...
- webpack进阶构建项目(一):1.理解webpack加载器
1.理解webpack加载器 webpack的设计理念,所有资源都是“模块”,webpack内部实现了一套资源加载机制,这与Requirejs.Sea.js.Browserify等实现有所不同. We ...
- webpack.config.js====CSS相关:postcss-loader加载器,自动添加前缀
1. 在webpack中加载css需要先安装style-loader 和 css-loader cnpm install --save-dev style-loader css-loader 2. 在 ...
- webpack加载器(Loaders)
加载器(Loaders) loader 是对应用程序中资源文件进行转换.它们是(运行在 Node.js 中的)函数,可以将资源文件作为参数的来源,然后返回新的资源文件. 示例 例如,你可以使用 loa ...
- webpack模块加载css文件及图片地址
webpack支持css文件加载并打包,只需安装相应加载器并在配置文件中配置 . 加载的css文件内容会与该模块里的js内容混合封装,这样做的好处是一个js文件包含了所有的css与js内容,有效减少了 ...
随机推荐
- 【Unity3D】Unity3D开发《我的世界》之六、创建地形(视频 + 源码)
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/unity_minecraft_06.html 一.引入LibNoise 虽然Unity3D里也有一个Mathf.P ...
- ubuntu16.04卸载软件
root@test:/# dpkg -l | grep cobbler root@test:/# sudo dpkg --purge cobbler
- python︱Anaconda安装、简介(安装报错问题解决、Jupyter Notebook)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 安装完anaconda,就相当于安装了Pyth ...
- MinnowBoard MAX 硬件开发板
Minnowboard MAX MinnowBoard MAX是一款紧凑型,经济实惠,而且功能强大的开发板为专业人士和制造商.开放式的硬件设计使无尽的定制和集成的潜力.它采用64位英特尔®凌动™E38 ...
- freemarker中的round、floor和ceiling数字的舍入处理(十七)
1.简易说明 (1)round:四舍五入 (2)floor:向下取整 (3)ceiling:向上取整 2.举例说明 <#--freemarker中的round.floor和ceiling数字的舍 ...
- PyTorch官方中文文档:torch.nn
torch.nn Parameters class torch.nn.Parameter() 艾伯特(http://www.aibbt.com/)国内第一家人工智能门户,微信公众号:aibbtcom ...
- Java并发编程-各种锁
安全性和活跃度通常相互牵制.我们使用锁来保证线程安全,但是滥用锁可能引起锁顺序死锁.类似地,我们使用线程池和信号量来约束资源的使用, 但是缺不能知晓哪些管辖范围内的活动可能形成的资源死锁.Java应用 ...
- 【BZOJ4736】温暖会指引我们前行(Link-Cut Tree)
[BZOJ4736]温暖会指引我们前行(Link-Cut Tree) ##题面 神TM题面是UOJ的 题解 LCT傻逼维护最大生成树 不会的可以去做一做魔法森林 #include<iostrea ...
- 【BZOJ3932】任务查询系统(主席树)
[BZOJ3923]任务查询系统(主席树) 题面 Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei ...
- [SCOI2005]王室联邦
分块基本没有限制 所以每次大于等于b就分一块 # include <bits/stdc++.h> # define RG register # define IL inline # def ...