webpack
https://www.webpackjs.com/concepts/
webpack 优点:
- 专注于处理模块化的项目,能做到开箱即用,一步到位;
- 通过Plugin扩展,完整好用又不失灵活;
- 使用场景不限于web开发;
- 社区庞大,大部分开源;
- 良好的开发体验
webpack缺点:
- 采用模块化的项目
安装
全局安装(不建议,防止不同的项目版本不一形成冲突)
npm install webpack -g
本地安装
- 4.0
npm install webpack webpack-cli --save-dev
- 安装指定版本
npm install webpack@<version> --save-dev
基本使用
npm init -y
npm install webpack webpack-cli --save-dev
新建webpack.config.js
之后新建
index.html main.js show.js
webpack.config.js
const path = require('path')
module.exports = {
entry:'./main.js', //入口文件
output:{
filename:'bundle.js', //出口文件名
path:path.resolve(__dirname,"./dist"), //地址绝对
}
}
index,html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
</div>
<script src="./dist/bundle.js"></script> //之后编译的文件
</body>
</html>
show.js
function show(context){
document.getElementById("app").innerText = "hello " + context;
}
module.exports = show;
main.js
const show = require('./show.js')
show('webpack')
编译
webpack --config ./webpack.config.js
会出现dist文件夹
打开index.html
hello webpack 了解一下
loader
webpack 可以编译js 但其他要依赖 对应的loader编译
现在在当前项目位置:添加一个main.css文件
main.js
require('./main.css')
const show = require('./show.js')
show('webpack')
直接编译
webpack --config ./webpack.config.js
报错,对应css文件有自己的loader机制
webpack.config.js
const path = require('path')
module.exports = {
entry:'./main.js',
output:{
filename:'bundle.js',
path:path.resolve(__dirname,"./dist"),
},
module:{
rules:[
{
test:/\.css$/, // \转义 $结尾
use:['style-loader','css-loader‘] //style-loader 将css注入js css-loader 读取css // 执行顺序 从后到前
}
]
}
}
编译
缺少style-loader css-loader Loader Loader机制
npm i -D style-loader css-loader
再编译
未指定开发,生产模式
const path = require('path')
module.exports = {
mode:'none', // 指定
entry:'./main.js',
output:{
filename:'bundle.js',
path:path.resolve(__dirname,"./dist"),
},
...
}
编译
现在时css加载到js,也可以抽离单独css文件
Plugin
扩展webpack功能 比如接着上面,我们把css单独抽离文件中
安装插件
npm i -D extract-text-webpack-plugin
或者
npm install extract-text-webpack-plugin@next
webpack.config.js
const path = require('path')
const ExtracTextPlugin = require('extract-text-webpack-plugin')
module.exports = {
mode:'none',
entry:'./main.js',
output:{
filename:'bundle.js',
path:path.resolve(__dirname,"./dist"),
},
module:{
rules:[
{
test:/\.css$/, // \转义 $结尾
loaders:ExtracTextPlugin.extract({
use:['css-loader'],
})
}
]
},
plugins:[
new ExtracTextPlugin({
filename:`[name].css`,
})
]
}
DevServe
- 实际开发中,我们需要在服务器中打开,而不是本地
- 监听文件变化,可以实时预览
npm i -D webpack-dev-server
package.json
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "webpack-dev-server --open"
},
webpack.config.js
output:{}
+ devServer: {
+ contentBase: './dist'
+ },
开发环境 开启服务起始位置 /dist 注意index.html文件
npm run start
实时预览 webpack --watch
模块热替换 webpack --hot