从一个新手的角度去想象webpack
我们知道的主流框架是vue,react,a…那啥
好吧,现在一般都是vue和react
所以,如果是前端三项之力的话,我们会说
就是感觉webpack其实挺重要的
Webpack so easy
作为一个javascript前端开发者,肯定都知道webpack这个东西,也知道各种各样的module。webpack作为一个打包工具,就是将各种各样的模块捆绑(打包)在一起。支持的module有:
CommonJS
AMD
CSS import
Images url
Es module
webpack将所有模块捆绑在一起,使其运行。
webpack工作开始的地方,就是一个js文件
可以收集其他模块文件
最后将所有模块文件打包到一起,形成一个可运行的代码
入口文件默认是src/index.js
outout
就是webpack通过build过程打包后形成的文件。
loaders
是一些第三方扩展包
可以帮助webpack处理加载各种类型的文件。
plugins
也是第三方插件,它可以改变webpack的工作方式
webpack有两种工作方式
主要的区别就是在production
模式下
所以,这里有一个小问题,就是loaders和plugins有区别吗?
看到这里,大家也了解到了为什么webpack的地位如此之高!
package.json
包添加一条start
脚本
"scripts": {
"test": "echo "Error: no test specified" && exit 1",
"start":"webpack"
},
安装相应的依赖
webpack webpack-cli webpack-dev-serve
三个依赖yarn add webpack webpack-cli webpack-dev-serve
然后就可以运行刚才编写的start
命令了
yarn start
和你想的一样,啥也没有打包会报错的
src/index.js创建一个index.js文件
console.log("hello webpack!");
吧再次运行yarn start
会有一个warning
webpack
正常运行并生成了一个dist
文件夹
dist
就是webpack
的输出文件
但是有warning
,是因为没有指定模式
production
模式"start": "webpack --mode development"
前面提到,我们可以更改webpack的配置的。为了配置webpack,我们需要一个webpack.config.js
文件。
首先更改入口文件和出口文件:
// webpack.config.js
const path = require("path");
module.exports = {
// 将入口文件指定为main.js
entry: {index: path.resolve(__dirname, "src", "main.js")},
// 将输出文件目录改为build/
output: {
path: path.resolve(__dirname, "build")
}
};
src/main.js
。build/
。index.js
文件重命名为main.js
,运行start命令,可以看到webpack输出目录build。为了将webpack打包后的文件,用script标签嵌入到html文档中,我们需要借助第三方plugins扩展html-webpack-plugin
上面介绍过plugin,是改变webpack工作方式的第三方扩展
html-webpack-plugin的作用就是改变webpack的工作方式
使webpack打包后的js文件,添加到html页面的script标签中,这样打开html就可以运行我们的js脚本了
yarn add html-webpack-plugin --dev
config文件
中使用插件// webpack.config.js
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
// 将入口文件指定为main.js
entry: { index: path.resolve(__dirname, "src", "main.js") },
// 将输出文件目录改为build/
output: {
path: path.resolve(__dirname, "build"),
},
plugins: [
new HtmlWebpackPlugin({
template: path.resolve(__dirname, "public", "index.html"),
}),
],
};
public/index.html
,所以创建public目录,并添加index.html
文件,内容如下:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div>hello webpack!</div>
</body>
</html>
看一下打包后的html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script defer src="index.js"></script>
</head>
<body>
<div>hello webpack!</div>
</body>
</html>
script标签
加到了html中作为开发者,肯定会用到本地服务,webpack提供了development server
,可以很方便的启动一个本地服务,方便开发者进行开发工作
yarn add webpack-dev-server --dev
package.json
中的命令如下: "scripts": {
"test": "echo "Error: no test specified" && exit 1",
"buildDev": "webpack --mode development",
"start":"webpack serve --mode development"
},
打包命令为buildDev
本地运行为start
执行yarn start
,会在本地8080端口
启动一个本地服务。
index.html
页面在前面我们提到了plugin的实践
以css文件为例
npm install css-loader style-loader --save-dev
module: {
rules: [
{
test: /.css$/,
use: ["style-loader", "css-loader"],
},
],
},
是不是也很简单
为什么有的安装使用了-dev
有的没有呢?
因篇幅问题不能全部显示,请点此查看更多更全内容