一、介绍
模块打包器
支持es6模块化、amd、common
二、不同
代码分割
loader
热更新
插件
三、安装和命令行
mkdir webpack-text
进入文件夹,npm init ,npm install webpack --save-dev
打包:webpack hello.js hello.bundle.js
打包过程会生成自己所需的一些内置的函数,管理依赖关系然后根据依赖关系对模块进行编号
四、loader
npm install css-loader style-loader --save-dev
require('style-loader!css-loader!./style.css')
这样我们写的css就会包含在style标签里,插入文档顶部
还可以在命令行里指定:webpack hello.js hello.bundle.js --module-bind 'css=style-loader!css-loader'
这是给模块绑定loader,
文件改变的时候,使用--watch可以使webpack自动更新自动打包
--progress可以看到打包过程
--display-modules 看打包模块
--display-reasons为什么打包模块的原因
五、建立webpack的配置文件
从零开始新建一个项目
mkdir webpack-demo
cd webpack-demo
npm init
npm install webpack --save-dev
mkdir src
src目录下script和style等文件
mkdir dist
新建初始化页面index.html
引入打包后的js文件bundle.js
项目根目录下新建webpack.config.js
,webpack自动寻找这个文件执行,
使用common。js的模块化输出
module.exports = { entry: './src/script/main.js',//项目的入口文件
output: {
path: './dist/js',//打包后文件存放路径,如果没有js文件夹,就会自动创建
filename: 'bundle.js'//生成的文件名
}
在高版本的webpack里,需要这样写:
const path = require('path')
module.exports = {
entry : './src/scripts/main.js',
output : {
path: path.resolve(__dirname,'./dist/js'),
filename: 'bundle.js'
}
}
新建main.js文件
function hello (){}然后执行打包,直接运行webpack
可以用命令行运行 webpack --config webpack.dev.config.js来运行指定js文件
配置npm脚本,在package.js里的scripts里,
'webpack':'webpack --config webpack.config.js --progress -dsiplay-module --colors --
display-reason'
然后在命令行里运行npm run webpack,就会运行这段脚本
webpack单页面,entry里是一个入口文件,如果是多个页面,得用对象的形式传入多个入口文件
{
entry: {
app:'./src/app.js',
search: './src/search.js'
},
output: {
filename:'{name}.js',//'[name]-[hash].js'//[chunkhash]
path:__dirname+'./built',
publicPath: 'http://cdn.com/'//js连接前就会加上这个地址,线上地址
}
}webpack插件
上下文概念:在module.exports里会有一个默认属性:context为整个运行环境上下文,默认值为根目录
npm install html-webpack-plugin --save-dev
var htmlWebpackPlugin = require('html-webpack-plugin')
mudule.exports = {
plugins:【
new htmlWebpackPlugin({
template:'index.html',
filename:'index-[index-[hash].html'//这里可以指定生成index文件
inject:'head'//制定脚本放在head还是body标签里
title:'webpack is good'//文件标题
date: new Date(),
minify:{//压缩属性
removeComments:true,//删除注释
collapseWhiteSpace: true,//删除空格
})
output:{
path:'./dist',
filename:'js/[name]-[chunkhash].js'
这个插件会让index.html自动引用打包好的js文件,如app.-dnjnfjs.js
webpack环境下的index.html默认支持ejs语法,可以利用这点往html里传入参数
<title><% htmlWebpackPlugin.options.title %></title>
htmlWebpackPlugin有files和opations两个属性
用这个插件可以用来做多页面,传入模板和输出的html,在chunk里指定需要导入的代码块,就可以了,这个插件还有excludechunk参数,可以指定除了某个参数外包含其余所有参数

loader的学习,对js、css以及图片的处理

需要安装babel和lastest,通过query传入参数,lastest告诉babel可以转换es2015、es2016、es2017的js文件
也可以在package》json里直接写入babel的配置
出入参数exclude可以指定某个目录下的文件,不让babel进行处理,因为babel转换是非常耗时的操作,这样可以提高效率,include可以指定转换范围
导入了path,使用绝对路径path.resolve,解析的意思

cssloader
postscss-loader可以自动补齐浏览器厂商前缀

对于@export引入的css文件,可以通过loader:;'style-loader!css-loader?importLoaders=1!postcss-loader'传参这样的方法来补齐export进来的css文件的浏览器厂商前缀
使用less和sass


html-loader可以把模板文件当作字符串来进行处理

传参

配置信息

处理项目中的图片
安装file-loader

如果根据当前结构的相对路径去查找一个图片,就会找不到
解决办法

传参指定图片名称

urlloader可以处理文件或图片,当图片或文件的大小超过了limit指定的大小之后,就会丢给fileloader去处理,小于这个值的时候,就会把图片或者文件转为base64编码的形式

限制大小为20kb,这样做可以减少网络请求,但是会增加文件大小
网络请求可以使浏览器缓存资源,下次访问会更快
图片压缩image-loader


来源慕课网:webpack工程化https://www.imooc.com/video/14200