webpack的配置

231 阅读4分钟

一、介绍

模块打包器

支持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