Webpack最佳入门实践

一.洪水猛兽webpack?

  • 从一个新手的角度去想象webpack* 我们知道的主流框架是vue,react,a…那啥* 好吧,现在一般都是vue和react* 所以,如果是前端三项之力的话,我们会说* Vue* React* Webpack
  • 就是感觉webpack其实挺重要的* 就会给人一种很难很复杂的感觉,确实,webpack的功能的确很神奇* 但是webpack其实没有那么难* 我们通过简单的实践来告诉大家,不要惧怕webpack* Webpack so easy

  • 言归正传:

作为一个javascript前端开发者,肯定都知道webpack这个东西,也知道各种各样的module。webpack作为一个打包工具,就是将各种各样的模块捆绑(打包)在一起。支持的module有:

  • CommonJS* AMD* CSS import* Images url* Es modulewebpack将所有模块捆绑在一起,使其运行。

二.重要概念

  • webpack其实就是控制五个模块,它们分别是

入口文件(entry point)

  • webpack工作开始的地方,就是一个js文件* 可以收集其他模块文件* 最后将所有模块文件打包到一起,形成一个可运行的代码* 入口文件默认是src/index.js### 输出文件(output)

  • outout就是webpack通过build过程打包后形成的文件。* 默认的输出文件夹为根目录下的dist/文件夹### 加载器(loaders)

  • loaders是一些第三方扩展包* 可以帮助webpack处理加载各种类型的文件。* 如处理css,image文件的loaders* vue,react的loaders* 如果没有loaders,webpack本身是不支持css文件,vue,react文件的

插件(plugins)

  • plugins也是第三方插件,它可以改变webpack的工作方式* 例如有些插件可以设置webpack的环境变量

模式(mode)

  • webpack有两种工作方式* development(开发模式)* production(生产模式)
  • 主要的区别就是在production模式下* 产生的捆绑包文件更小,去掉了在运行下无关的注释,空格等等* 这样可以加快用户加载代码的速度

  • 所以,这里有一个小问题,就是loaders和plugins有区别吗?* 在我看来,loaders是编译时候用一下,plugins则是可以一直使用,我觉得大概是这样吧
  • 看到这里,大家也了解到了为什么webpack的地位如此之高!* 可以统一不同的代码并打包* 而且过程中可以把不必要的代码干掉

webpack实践

初始化项目

  • 首先新建一个目录npm init -y* 你就是看见创建了一个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,我们需要一个`webpack.config.js`文件。

* 首先更改入口文件和出口文件:* ```// webpack.config.jsconst path = require("path");module.exports = {// 将入口文件指定为main.jsentry: {index: path.resolve(__dirname, "src", "main.js")},// 将输出文件目录改为build/output: {path: path.resolve(__dirname, "build")}}; ```* entry字段可以用来修改入口文件,上面的代码将webpack入口文件改为`src/main.js`。* output字段用于修改输出文件位置,我们将输出文件目录改为`build/`。* 将src目录下的`index.js`文件重命名为`main.js`,运行start命令,可以看到webpack输出目录build。

添加html页面
--------

为了将webpack打包后的文件,用script标签嵌入到html文档中,我们需要借助第三方plugins扩展`html-webpack-plugin`

* 上面介绍过plugin,是改变webpack工作方式的第三方扩展* html-webpack-plugin的作用就是改变webpack的工作方式* 使webpack打包后的js文件,添加到html页面的script标签中,这样打开html就可以运行我们的js脚本了* * *

* 1.首先安装插件

yarn add html-webpack-plugin --dev


* 2.然后在`config文件`中使用插件

// webpack.config.js
const path = require(“path”);
const HtmlWebpackPlugin = require(“html-webpack-plugin”);
module.exports = {// 将入口文件指定为main.jsentry: { index: path.resolve(__dirname, “src”, “main.js”) },// 将输出文件目录改为build/output: {path: path.resolve(__dirname, “build”),},plugins: [new HtmlWebpackPlugin({template: path.resolve(__dirname, “public”, “index.html”),}),],
};


* 上面的代码指示webpack加载`public/index.html`,所以创建public目录,并添加`index.html`文件,内容如下:

Document
hello webpack!
```

看一下打包后的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> 
  • 我们可以看到打包后的js文件已经通过script标签加到了html中

通过webpack启动本地服务

作为开发者,肯定会用到本地服务,webpack提供了development server,可以很方便的启动一个本地服务,方便开发者进行开发工作

  • 1.首先我们需要安装webpack-dev-server包
yarn add webpack-dev-server --dev 
  • 2.我们更改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页面

我们再来说说loader

  • 在前面我们提到了plugin的实践* 那和它有些相似的loader如何使用呢?
  • 以css文件为例* 1.我们先安装样式的loader* npm install css-loader style-loader --save-dev * 然后配置loader即可* module: {rules: [{test: /.css$/,use: ["style-loader", "css-loader"],},],}, * 是不是也很简单* 这样配置后,写的css文件也可以被编译打包了* 那么,我们就对webpack的模块都有了一个简单的实践了

提问区域

les: [{test: /.css$/,use: [“style-loader”, “css-loader”],},],}, ```* 是不是也很简单* 这样配置后,写的css文件也可以被编译打包了* 那么,我们就对webpack的模块都有了一个简单的实践了

提问区域

  • 为什么有的安装使用了-dev有的没有呢?* 加了-dev表示这些包只在开发模式中使用,方便开发工作,在生产环境下并没有作用

最后

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Webpack 是一个常用于打包 JavaScript 应用程序的工具,它的主要作用是将多个 JavaScript 文件打包成一个或多个文件,并且可以处理其他资源文件,如 CSS、图片等。在实际开发中,随着项目规模的增大,Webpack 打包速度、体积等问题就会变得越来越重要,因此,Webpack 优化也成为一个不可忽视的问题。 以下是一些常见的 Webpack 优化方法: 1. 减少文件搜索范围 Webpack 会遍历整个项目目录来查找符合要求的文件,这个过程会消耗大量的时间和资源。我们可以通过配置 resolve.modules 和 resolve.extensions 来减少搜索范围,从而提升打包速度。 2. 使用 Tree Shaking Tree Shaking 是指通过静态分析,将代码中用不到的部分去除,只打包项目中实际被使用的代码。这样可以减少打包后的文件体积。在实际开发中,我们可以使用 webpack.optimize.UglifyJsPlugin 和 webpack.optimize.AggressiveMergingPlugin 等插件来实现 Tree Shaking。 3. 使用 Code Splitting Code Splitting 是指将应用程序拆分成多个 bundle,使得每个 bundle 只包含应用程序的一部分功能,从而减少每个 bundle 的体积,提高加载速度。在实际开发中,我们可以使用 Webpack 自带的代码拆分功能,或者使用第三方库如 react-loadable、bundle-loader 等来实现 Code Splitting。 4. 使用缓存 Webpack 默认会将每个文件的 Hash 值作为文件名的一部分,这样可以保证文件内容发生变化时,文件名也会发生变化,从而避免浏览器缓存问题。但是,如果没有改变的文件也每次都重新打包,就会导致打包速度变慢。因此,我们可以使用缓存来提高打包速度。在 Webpack 中,我们可以使用 cache-loader 和 hard-source-webpack-plugin 等插件来实现缓存。 5. 使用 CDN 加速 通过使用 CDN(内容分发网络),可以将静态资源文件分发到全球各地的服务器上,从而提高文件加载速度。在 Webpack 中,我们可以使用 HtmlWebpackPlugin 和 Webpack 自带的 publicPath 配置来实现 CDN 加速。 以上是一些常见的 Webpack 优化方法,当然还有很多其他的优化方法,需要根据具体情况进行选择和实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值