我们竟也平凡到自命不凡。
只要我们使用到了 npm,就无法避免会使用到 webpack,当然,gulp 也行,但我主要用的是 webpack。
这里主要参考的是 v4.43.0 版本
基本配置
1 | // webpack.config.js |
loader
loader 用于对模块的源代码进行转换。loader 可以使你在 import 或“加载”模块时预处理文件。
loader 可以将文件从不同的语言(typescript)转换成 javascript,或者将内联图像转换成 data URL。
loader 甚至允许你直接在 javascript 模块中 import CSS 文件。
拿 css-loaer 和 ts-loader 举例:
首相安装相对应的 loader:
1 | yarn add -D css-loader |
然后指示 webpack 对每个 .css 使用 css-loader,以及对所有 .ts 文件使用 ts-loader:
1 | module.exports = { |
test 属性用于匹配文件,use 告知 webpack 需要用到哪些 loader。
上面例子中,我们是对两种不同类型的文件进行一次处理,但如果我们想要对一种类型的文件多次处理呢?总不能写很多次匹配叭,太不直观了。
在配置 loader 时,如果我们只做一次处理,那么 use 的值则可以为字符串。需要多次处理时,use 变为一个数组,可以匹配多个 loader。
安装 style-loader:
1 | yarn add -D style-loader |
修改 module.rules
1 | module: { |
loader 的执行顺序是有后往前执行的,所以先执行的是 css-loader,然后执行的才是 style-loader。
部分 loader
image-webpack-loader
less-loader
css-loader
ts-loader
style-loader
plugin 插件
从热心网友那边抄来的解释:plugin 是一个扩展器,它丰富了 webpack 本身,针对是的 loader 结束后,webpack 打包的整个过程,它并不直接操作文件,而是基于事件机制工作,会监听 webpack 打包过程中的某些节点,执行广泛的任务。
官网上的剖析(原理):webpack 插件是一个具有 apply 属性的 JavaScript 对象。apply 属性会被 webpack compiler 调用,并且 compiler 对象可在整个编译生命周期访问。
用法:由于插件可以携带参数/选项,正常情况下在 webpack 配置中,需要向 plugins 属性中传入的是 new 实例对象。
1 | const HtmlWebpackPlugin = require("html-webpack-plugin"); //通过 npm 安装 |
部分插件
这里先只讲基础作用,至于配置需要看文档,可以上官网,也可以去 npm 上看。
esbuild 用于构建时加快构建速度,减少内存消耗。
鉴于当前的版本以及稳定性来说,我还没有使用过。
compression-webpack-plugin 预先准备的资源压缩版本
uglifyjs-webpack-plugin
html-webpack-plugin
clean-webpack-plugin 自动清理构建目录
1 | const CleanWebpackPlugin = require("clean-webpack-plugin"); |
- postCSS 自动补齐 CSS3 前缀
1 | module.exports = { |
插播一个关于 Babel 的知识
Before we start telling Babel what to do. We need to create a configuration file. All you need to do is create a .babelrc
file at the root of your project.
这是一个基础的 .bablerc
文件
1 | { |
我们需要安装 babel-preset-2015
来将 ES6 编译成 ES5
1 | npm i --save-dev babel-preset-2015 |
将 bable-preset-2015
写入 presets。
注意这里是不需要写 babel-reset-
只需要写 es2015
,编译器会自动识别。
1 | { |
你看到那个 plugins 了吗,那个是用来写插件的,就是那些以 babel-plugin-
开头的插件。
先来说说这个按需加载叭 babel-plugin-import
其实写法都是一样的,但是插件需要配置一些东西。
1 | npm i --save-dev babel-plugin-import |
修改 .babelrc 文件
1 | { |
我们还可以安装更多的 babel 预设,大部分预设都是以 babel-preset- 开头。
当然我们可以把 .babelrc 配置写在 webpack.config.js 中,但是写在 .babelrc 还是一个最佳的选择。
基于 vue-cli 的 webpack 配置
这个是我使用在鼎坚仓储管理系统的配置。
vue.config.js 是一个可选的配置文件,如果项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载。
1 | // vue.config.js |
TODO
用自己的项目打包呀