webpack笔记

Webpack

1.静态模块打包工具,将.scss .ts 打包成浏览器识别的文件

2.模块化有 ESModule CommonJS AMD CMD

3.webpack和gulp rollup vite

4.loader处理文件的转换,plugin用于打包优化,资源管理,环境变量注入

5.browserslistrc //筛选浏览器

Loader:

Css-loader

Style-loader

Postcss-loader postcss-preset-env

plugin:

clean-webpack-plugin

html-webpack-plugin

const { DefinePlugin } = require("webpack"); //定义全局变量

copy-webpack-plugin //复制静态文件到打包文件中

5.source-map打包文件会生成一个映射文件,方便运行中出现错误,快速定位出问题代码的位置

[inline-|hidden-|eval-][nosources-][cheap-[module-]]source-map

Inline 会生成source-map以Dateurl添加到bundle文件后面

hidden 会生成source-map 但是删除bundle文件的source-map的引入

eval 会生成source-map 以Dateurl添加到eval函数里

nosources会生成source-map不会生成的source-map的源文件,但是有错误提示

cheap 会生成source-map但是更高效(不会生成列的映射)

module 会生成source-map对loader编译后的代码处理更好

开发,测试阶段最好是cheap-module-source-map

发布阶段 不写或false

6.babel是什么?,开发中的ES6和TS浏览器不能识别,所以需要babel帮我们语法转换,源代码转换,Polyfill实现目标缓解的功能。

代码的编译过程 ES6->AST->bateCode->字节码

和postcss一样可以直接使用,postcss src/word.css -o css/demo.css

npx babel src --out-dir dist --plugins=@babel/plugin-transform-arrow-functions

Babel的使用需要配合其他的插件使用

比如转换尖头函数需要使用@babel/plugin-transform-arrow-functions

如果需要插件很多我们就需要使用预设presets,他会根据我们的browserslistrc过滤的浏览器自动适配

presets: [

@babel/preset-env"

]

7.polyfill填充物 帮我处理浏览器不兼容的语法糖(promise,generator,symbol),帮我们添加

function promise() {}

使用配合presets

presets: [

[

"@babel/preset-env",

{

useBuiltIns: "usage",

corejs: "3",

},

],

],

8.ts的打包处理

第一种ts-loader

第二种babel-loader @babel/preset-typescript

presets: [

[

"@babel/preset-env",

{

useBuiltIns: "usage",

corejs: "3",

},

],

["@babel/preset-typescript"]

],

9.vue文件的打包处理

vue-loader

vue-template-compiler

10.ESlint eslint-loader打包的时候校验eslint

11.webpack的 package.json的命令加 ---watch

webpack.config.js 的选项 watch:true

12.webpack-dev-server

是否开启热更新

server:{

hot: true

}

对js文件需要监听变化

if (module.hot) {

module.hot.accept("./js/math.js", () => {

console.log("文件更新了");

});

}

vue文件的vue-loader支持vue组件的HMR

热更新的原理:socket的长链接

13.服务运行优化,这个设置是默认打开

compress是否为静态文件开启gzip

14.跨域代理proxy

15.historyApiFallback 跳转路由子后刷新页面就会404,historyApiFallback会帮我们映射到首页

16.resolve alias地址代理, extensions匹配运行文件的后缀

resolve: {

extensions: [".js", ".json", ".wasm", ".vue", ".ts", ".jsx"],

alias: {

"@": path.resolve(__dirname, "./src")

}

},

  1. 配置文件分离---env 添加环境变量

"build": "webpack --config ./config/webpack.common.js --env production",

"dev": "webpack server --config ./config/webpack.common.js --env development",

module.exports = function (env) {

process.env.production = env.production; // 把环境变量放到node的process

const config = env.production ? prodConfig : devConfig;

const mergeConfig = merge(common, config);

return mergeConfig;

};

18.代码分离

多入口

optimization

splitChunks

runtimeChunk

19.代码的预获取和预加载

Prefetch和preload

/* webpackPrefetch: true */

20.cdn的使用

externals:{

Vue: "vue"

}

21.css的代码打包到文件mini-css-extract-plugin

帮我们把css文件打包到一个文件

22,hash

hash值的生成和整个项目有关系

chunkhash可以有效的解决上面的问题,它会根据不同的入口进行借来解析来生成hash值

contenthash表示生成的文件hash名称,只和内容有关系

23,terser

Terser是一个JavaScript的解释(Parser)、Mangler(绞肉机)/Compressor(压缩机)的工具集;

配置链接:https://github.com/terser/terser#minify-options

24,css的压缩工具css-minimizer-webpack-plugin

25.sideEffects删除引用但是没有使用的代码,一般直接是false

26,CSS的Tree Shaking:PurgeCSS

27,作用域提升webpack已经内置

new webpack.optimize.ModuleConcatenationPlugin()

28,webpack对文件压缩 compression-webpack-plugin

29.InlineChunkHtmlPlugin

将打包好的文件注入到html中,减少http请求

new InlineChunkHtmlPlugin(HtmlWebpackPlugin, [/runtime.+[.]js/])

30,自定义loader,就是一个函数,接受content就是文件进行处理,最后通过我们的函数处理

31,loader的执行顺序从后往前,原理:1,2,3存到pitch-loader的时候,从上往下执行,

变成3,2,1,取得时候normer-loader从上往下执行就是先运行3

如何修改loader的执行顺序,通过enforce修改pre,post

32.loader函数同步执行和异步执行

module.exports = function (content) {

content+='123';

console.log(123)

}

同步

直接return content 或者callback(null, content)

异步

const callback = this.async()

callback(null, content)

33.自定义loader函数传参并校验

我们可以通过一个webpack官方提供的一个解析库 loader-utils,安装对应的库

我们可以通过一个webpack官方提供的校验库 schema-utils,安装对应的库

34,自定义plugin添加webpack的功能

相关推荐
Aileen_0v014 分钟前
【AI驱动的数据结构:包装类的艺术与科学】
linux·数据结构·人工智能·笔记·网络协议·tcp/ip·whisper
m0_7482550218 分钟前
前端常用算法集合
前端·算法
真的很上进32 分钟前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
web1309332039838 分钟前
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
前端·vue.js·elementui
NiNg_1_2341 小时前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts
如若1232 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python
Rinai_R2 小时前
计算机组成原理的学习笔记(7)-- 存储器·其二 容量扩展/多模块存储系统/外存/Cache/虚拟存储器
笔记·物联网·学习
吃着火锅x唱着歌2 小时前
PHP7内核剖析 学习笔记 第四章 内存管理(1)
android·笔记·学习
ragnwang2 小时前
C++ Eigen常见的高级用法 [学习笔记]
c++·笔记·学习
滚雪球~2 小时前
npm error code ETIMEDOUT
前端·npm·node.js