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的功能

相关推荐
学习使我快乐012 小时前
JS进阶 3——深入面向对象、原型
开发语言·前端·javascript
bobostudio19952 小时前
TypeScript 设计模式之【策略模式】
前端·javascript·设计模式·typescript·策略模式
黄尚圈圈3 小时前
Vue 中引入 ECharts 的详细步骤与示例
前端·vue.js·echarts
浮华似水4 小时前
简洁之道 - React Hook Form
前端
正小安6 小时前
如何在微信小程序中实现分包加载和预下载
前端·微信小程序·小程序
_.Switch7 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
一路向前的月光7 小时前
Vue2中的监听和计算属性的区别
前端·javascript·vue.js
长路 ㅤ   7 小时前
vite学习教程06、vite.config.js配置
前端·vite配置·端口设置·本地开发
长路 ㅤ   7 小时前
vue-live2d看板娘集成方案设计使用教程
前端·javascript·vue.js·live2d
Fan_web8 小时前
jQuery——事件委托
开发语言·前端·javascript·css·jquery