webpack 官网
https://webpack.docschina.org/concepts/
一.webpack3.x版本安装
webpack是什么?
- webpack构建工具
- 自带模块化(commonjs规范)
- 编译:es6=》es5,jsx=》es5,ts(typescript)=》js
- gulp所做的事情,webpack都可以做dao
- 自带服务器,服务器也是基于Node(webpack-dev-server)
- 哪些环境经常使用到webpack:react,vue
- webpack版本:1.x,2.x,3.x,4.x版本
安装webpack3.x:
安装全局webpack
npm install -g webpack@3.x
npm install -g webpack-cli@2.x(使用webpack-cli2.x版本,目前最新版本3.x版本)(webpack4以上用到脚手架)
到项目根目录,项目初始化package.json
npm init -y
安装项目依赖的webpack
npm install -D webpack@3.x
项目根目录创建两个文件夹src和dist
src:源码文件
dist:编译之后的文件
编写代码
app.js
1
document.write('hello webpack');
执行webpack
webpack 路径/入口文件 路径/出口文件
1
webpack src/app.js dist/bundle.js
编写代码
hello.js:
1
2
3
4
5module.export = function(){
var hello = document.createElement('div');
hello.textContent = 'hello Webpack3.x';
return hello;
}
二.webpack.config配置文件
生成webpack.config.js文件
配置入口和出口
1
2
3
4
5
6
7module.exports = {
entry:__dirname + '/src/app.js',
output:{
path:__dirname + '/dist',
filename:'bundle.js'
}
}webpack执行的快捷方案
在package.json文件中代替webpack执行
1
2
3"script":{
"build":"webpack"
}执行:npm run build
调试
生成错误信息文件
在配置文件webpack.config.js文件中添加:
devtool:”eval-source-map”
(devtool:”eval-source-map/eval/source-map/hidden-source-map/inline-source-map/eval-source-map/cheap-source-map/cheap-moudle-source-map”)
三.webpack服务器搭建
服务器
全局安装服务器
npm install -g webpack-dev-server@2.x
安装项目依赖
npm install -D webpack-dev-server@2.x
运行webpack服务器
webpack-dev-server
配置服务器的快捷执行方案
1
2
3
4"script":{
"build":"webpack",
"dev":"webpack-dev-server"
}执行:npm run dev
修改服务器根路径
1
2
3
4"script":{
"build":"webpack",
"dev":"webpack-dev-server --content-base dist"
}热更新
1
2
3
4"script":{
"build":"webpack",
"dev":"webpack-dev-server --content-base dist --inline --hot"
}服务器配置
–content-base: 指定服务器运行目录
–inline:在线更新
–port:修改端口
四.loaders配置
module
loader(use)
loader是webpack可以通过配置脚本,或者外部依赖执行一些功能
例如:es6 -》es5,jsx-》js,less-》css
配置loaders
- test:一个匹配loader要操作的文件的一个正则表达式(必须)
- loader:loader要执行的任务的名字(必须)
- options:为loader提供一些外部选项配置(可选项)
json格式的数据转化成js对象
注意:当前的json-loader只是为了测试,当前安装的webpack3.x已经集成了json-loader,不需要单独安装了
安装json-loader
npm install -D json-loader
编写配置文件代码
1
2
3rules: [
{ test: /\.json$/, use: 'json-loader' }
]
es6 -> es5
安装依赖
npm install -D babel-core babel-loader babel-preset-es2015
配置webpack.config.js文件
1
2
3
4
5
6
7rules: [
{ test: /\.js$/, use: 'babel-loader',
// webpack2.0的方案,3.0以后用 .babelrc 文件
options:{
presets:['es2015']
} }
]
五.React环境搭建
构建react环境(webpack+ES6+React)
安装react
npm install –save react react-dom
npm install –save-dev babel-preset-react
编写配置文件
1
2
3
4
5
6
7
8module.exports = {
module: {
rules: [
{ test: /\.js|jsx$/, use: 'babel-loader' },
]
}
};增加 .babelrc 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17{
"presets":["react","es2015"],
//针对于react环境配置
"env":{
"dev":{
"plugins":[
["react-transform",{
"transforms":[{
"transform":"react-transform-hmr",
"imports":["react"],
"locals":["module"]
}]
}]
]
}
}
}编写代码
1
2
3
4
5
6
7
8
9
10
11import React from "react"
import ReactDOM from "react-dom"
class App extends React.Component{
render(){
return(
<div>hello</div>
)
}
}
ReactDOM.render(<App/>,document.getElementById("root"))
六.webpack处理css和图片
CSS处理
安装css相关依赖
npm install -D css-loader style-loader
添加配置
1
2
3
4
5
6
7
8
9module.exports = {
module: {
rules: [
{ test: /\.js|jsx$/, use: 'babel-loader' },
{test:/\.css$/, use:["style-loader","css-loader"]}
]
}
};
图片配置
安装依赖
npm install -D file-loader url-loader
添加配置
1
2
3
4{
test:/\.(png|jpj|gif|jpeg|svg)$/,
use:"url-loader?limit=2048" //大于2m进行压缩
}
七.webpack less-loader添加
Less和Sass
安装
npm install –save-dev less less-loader
添加配置
1
2
3
4
5
6test:/\.less$/,
use:[
"style-loader",
"css-loader",
"less-loader"
]
八.webpack插件添加
插件(plugins)
打开浏览器
安装:
npm install -D open-browser-webpack-plugin
配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23const openBrowserWebpackPlugin = require('open-browser-webpack-plugin'); //通过 npm 安装
const webpack = require('webpack'); //访问内置的插件
const path = require('path');
module.exports = {
entry: './path/to/my/entry/file.js',
output: {
filename: 'my-first-webpack.bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
use: 'babel-loader'
}
]
},
plugins: [
//自动打开浏览器插件
new openBrowserWebpackPlugin({url:'http://localhost:8080'})
]
};HTML模板
安装:
npm install -D html-webpack-plugin
配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23const HtmlWebpackPlugin = require('html-webpack-plugin'); //通过 npm 安装
const webpack = require('webpack'); //访问内置的插件
const path = require('path');
module.exports = {
entry: './path/to/my/entry/file.js',
output: {
filename: 'my-first-webpack.bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
use: 'babel-loader'
}
]
},
plugins: [
//HTML模板
new HtmlWebpackPlugin({template: __dirname +'/src/index.html'})
]
};内置插件(省略导入文件的后缀名)
1
2
3resolve:{
extensions:['.js','jsx']
}
九.webpack生产环境
webpack.config.js
1 | const webpack = require('webpack'); |
webpack.production.config.js
1 | const pkg = require('./package.json') |
生产环境的搭建
安装:
npm install -D cross-env
npm install -D babel-plugin-react-transform
npm install -D react-transform-hmr
十.webpack4.x版本升级
更新版本
npm install -g webpack
npm install -g webpack-cli@2.x
写代码
执行:
webpack –mode=development ./src/index.js
–mode 模式(必选,不然会报错),是4.x 新增的参数,默认是production
新的命令行
webpack-cli init:自动生成webpack.config.js