什么是Webpack
WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其转换和打包为合适的格式供浏览器使用。
为什么使用Webpack
- 打包:可以把多个Javascript文件打包成一个文件,减少服务器压力和下载带宽。
- 转换:把拓展语言转换成为普通的JavaScript,让浏览器顺利运行。
- 优化:前端变的越来越复杂后,性能也会遇到问题,而WebPack也开始肩负起了优化和提升性能的责任。
安装
必须先安装node.js
,可以通过 node -v
来查看node安装情况和版本,如果没有安装,要先安装node才可以继续进行。
# 初始化npm
npm init
# 通过npm安装webpack
npm install webpack --save-dev
简单入门
1、新建hello.js
function hello(str) {
alert(str);
}
2、使用webpack打包
# 要打包的文件 打包后文件的名称
webpack hello.js hello.bundle.js
3、新建world.js文件
require('./hello.js')
function world() {
return {
}
}
hello('hello world');
4、新建style.css文件
html, body {
padding: 0;
margin: 0;
}
在world.js引用:
// 经过css-loader处理
require('css-loader!./style.css')
或者通过命令行实现,require(‘./style.css’)
webpack hello.js hello.bundle.js --module-bind 'css=style-loader!css-loader'
需要安装css-loader
npm install css-loader style-loader --save-dev
5、新建index.html文件
<html>
<head>
<meta charset="utf-8">
<title>webpack</title>
</head>
<body>
<script type="text/javascript" src="world.bundle.js">
</script>
</body>
</html>
6、自动打包
使用webpack --watch
命令,可实现文件修改时,自动打包。
webpack配置文件
webpack.config.js文件:
module.exports = {
// 打包入口
entry: './src/script/main.js',
output: {
path: './dist/js',
filename: 'bundle.js'
}
}
直接用webpack
命令打包即可。
如果配置文件名称改动,则通过webpack --config webpack.dev.config.js
命令来打包。
高级使用
module.exports = {
// 打包入口
entry: {
bundle: ["babel-polyfill", path.resolve("src/index.jsx")],
vendor: ['react', 'react-dom']
},
output: {
path: "./static",
filename: "[name].[hash:8].js",
}
}
打包后会产生两个文件:bundle.4544dfe3.js和vendor.4544dfe3.js
package.json文件
通过修改package.json文件,可以配置运行命令。
"scripts": {
"webpack": "webpack --progress --color --config webpack.prod.config.js"
}
运行:
npm run webpack
html-webpack-plugin介绍
可以自动生成HTML,这样自动生成的js文件可以动态添加到HTML文件里。
安装html-webpack-plugin:
npm install html-webpack-plugin --save-dev
在webpack.config.js使用:
var HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
plugins: [
new HtmlWebpackPlugin({
title: '监管平台',// 标题
favicon: path.resolve("./src/static/images/favicon.ico"),
template: './src/index.html', // 模板文件
inject: 'head',//引用放在head标签里
minify: {//压缩文件
removeComments: true,//删除注释
collapseWhitespace: true//删除空格
},
filename: './index.html' // 产出后的文件名称
})
]
}
打包:
npm run webpack