webpack 基础使用配置

title: webpack 基础使用配置 + 版本5的报错 id: 1670d01d52e92b15f9f7e66570a9593f tags: [] date: 2000/01/01 00:00:00 updated: 2023/03/04 19:29:12 isPublic: true --#|[分隔]|#--

webpack 基础使用配置 + 版本5的报错

webpack官网

前言

现代前端开发,都已经开始基于各种框架来开发,比如 vue、react 等等,即使不使用框架,我们写原始的 htm + css + js,也会经常想使用便捷的开发语法,比如使用 scss 或 less 开发css,使用 ES6+ 版本的 js 语法。

要知道,无论是框架的文件目录结构,还是 scss、less、ES6等,浏览器要么是无法支持,要么是有严重的兼容性问题,需要进一步处理后,生成常规的静态的原始的,且浏览器能兼容的 html + css + js。

这就需要一个用来编译的工具,webpack 就是当前最流行的前端编译工具,和他类似的工具还有 gulp、vite 等等,但 webpack 统治前端编译界时间最长,口碑也相当不错。

我现在就来整理一下 webpack 的一些基本使用。

webpack 基于 nodejs,使用是需要用 npm 安装。

最基本的 webpack

这是 webpack 的本体,不安装就没有 webpack,无法使用。

依赖:

  • webpack

  • webpack-cli

npm install -D webpack webpack-cli

再创建一个文件 webpack.config.js,作为 webpack 编译的配置文件,一下给了注释说明:

安装完成后,在 package.json 写下 build 指令:

之后就可以使用 npm run build ,来使用 webpack 编译 js 了。

这一条编译指令中:

  • webpack-cli:执行 webpack-cli。

  • --mode production :使用 production 模式来编译,支持的值:development | production | none,具体配置区别请查阅 mode 配置,这一项必写,但可以不写在这里,可以写在 webpack 配置文件中,写作 key value。

  • --config ./webpack.config.js:使用的编译配置文件,如果不写,默认为 ./webpack.config.js

这个配置文件,因为没有任何有实际意义的配置,比如使用插件啦、使用loader啦,所以编译完成的文件,看上去内容和源文件可能不一样,但其实执行效果是一模一样的。

ES6+ 转译工具 babel

依赖:

  • babel-loader:允许使用 Babel 和 webpack 传输 JavaScript 文件。

  • @babel/core:Babel 的核心,必须的。

  • @babel/preset-env:用来编译语法和js新api的插件。

  • core-js:配置 corejs: 3 需要的,编译新api时需要使用的库。

  • babel-preset-es2015:已被取代

  • babel-preset-stage-2:已被取代

指令指令安装依赖。

修改 webpack.config.js,添加 babel 配置:

添加 .babelrc 文件:

启动 webpack 开发服务器 devServer

开发时,不希望每次改了代码,都要重新打包,这个依赖可以启动一个 webpack 服务器,实时编译,保存编译更新。

依赖:

  • webpack-dev-server:服务开启

添加完成后,可以修改 package.json 中的指令了:

修改 webpack.config.js

而且,由于开发环境和正式打包时,配置可能不同,我们可以给测试环境和正式环境设置不同的 webpack 配置文件,来差异化处理。

设置 js 引用文件时的路径别名 resolve

设置完 resolve 后,内部 js 引入文件时,就可以使用了,比如:

启动服务或打包时,插入常量

有种情况,比如网站部署后,我们想知道这个网站被打包生成的具体时间,这就需要我们在打包时,把当前打包的时间提供给网站,供网站读取。

且无论何时打开网站,读取到的都是我们打包时塞入的那个时间。

此时就可以使用 webpack.DefinePlugin 这个插件配置一下了:

然后,在项目中任何一个文件中,都可以读取这些常量:

使用 source-map

使用webpack打包项目,当我们调试时,会发现在浏览器中看到的源码,是已经被 webpack 打包编译过的、一个文件只有一行的代码,根本不能清晰的调试。

这时就需要 source-map 登场了,它能在编译时,同时生成编译后和编译前的代码对应关系,当我们使用浏览器调试时,他们展示我们实际的代码。

需要使用 devtool 字段,默认情况无 source-map,可以给他赋值不同的值,来生成不同的 source-map,有的 source-map 编译快,有的体积小。。。值很多。

推荐开发时设置 eval-cheap-module-source-map,打包时设置值为 source-map

Last updated

Was this helpful?