关于webpack的一些东西
项目初始
创建一个目录
我是在macos系统下做的开发,所以通过命令直接创建,一个新目录.
mkdir webpack
cd webpack
初始化项目配置
采用的yarn
- 在命令行输入
yarn init -y
- 在命令行输入
git init
此步操作为了记录该过程,所以将项目一并上传至github
下载webpack
- 在命令行输入
yarn add webpack webpack-cli -D
在src文件夹下添加文件src/index.js
添加完成后输入代码
1 | class Animal { |
打包文件
- 在命令行输入
npx webpack -mode=development
总结
- 此时就可以看到dist目录下的 main.js 文件了, 该文件就是webpack默认配置下对 src/index.js 文件打包的结果.
- 默认配置文件在 node_modules/webpack/lib/WebpackOptionsDefaulter.js
- 此时发现index.js使用的语法是es6,而一般我们都需要将高级语法转换为es5语法,来达到兼容性的问题,所以此时的webpack不足以支撑整个项目.
添加babel转义
配置webpack
添加
webpack.config.js
文件填入如下配置
1
2
3
4
5
6
7
8
9module.exports = {
rules:[
{
test:/\.jsx$/,
use:'babel-loader',
exclude:/node_modules/
}
]
}
下载babel
- 命令行输入
yarn add babel-loader -D
- 安装babel依赖
yarn add @babel/core @babel/preset-env @babel/plugin-transform-runtime -D
- 命令行输入
yarn add @babel/runtime @babel/runtime-corejs3
webpack的mode
development:将
process.env.NODE_ENV
的值设置为development
,启用NamedChunksPlugin
和NamedModulesPlugin
production:将
process.env.NODE_ENV
的值设置为production
,启用FlagDependencyUsagePlugin
,FlagIncludedChunksPlugin
,ModuleConcatenationPlugin
,NoEmitOnErrorsPlugin
,OccurrenceOrderPlugin
,SideEffectsFlagPlugin
和UglifyJsPlugin
总结
- 上图为webpack 4 的配置, webpack 5 下节更新
- 语法降级需要使用 babel-loader.
- webpack.config.js文件中的use语法,有三种,详细注释在本项目的文件内
- mode中还有一个为
node
模式
在浏览器中查看打包后的页面
下载 html-webpack-plugin
- 命令行输入
yarn add html-webpack-plugin -D
修改 webpack.config.js 配置 添加插件
修改如下配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
// ...
plugins: [
new HtmlWebpackPlugin({
// 入口文件
template: './public/index.html',
// 打包后的文件名称
filename: 'index.html',
minify: {
// 是否删除属性的双引号
removeAttributeQuotes: false,
// 是否折叠空白
collapseWhitespace: false
},
// 是否加上hash,默认是false
// hash:true
})
]
}此时执行
npx webpack
就可以看到dist
目录下的index.html
文件了
__END__