webpack 和 vite 的打包和部署流程

94 阅读1分钟

webpack 是一个静态模块打包工具,从入口开始构建依赖关系,打包有关文件,最后展示所输出的内容

作用 把静态模块内容,压缩,转译,打包等

常用plugin

  1. html-webpakc-plugin 自动生成html文件,并引入打包后的其他资源
  2. mini-css-minimizer-webpack-plugin 压缩单独css文件代码
  3. clean-webpack-plugin 清除打包输出的包
  4. webpack.definePlugin 定义变量 打包时候
  5. Uglify-js-plugin || TerserPlugin(更好处理es6) 压缩js
  6. optimization.splitChunks 提取公共文件不打包
optimization: { 
splitChunks: { 
chunks: 'all', cacheGroups: 
{ vendor: { test: /node_modules/, name: 'vendor', minChunks: 1, } } } }

    new webpack.DefinePlugin({ ISPRO: true })
  1. webpack.providePlugin 配置全局模块 可以不用引入
  2. BundleAnalyzerPlugin 用于分析资源打包的依赖及大小分析
  3. imageminPlugin 压缩图片

常用loader

  1. style-loader/css-loader 解析css-loader
  2. mini-css-extract-plugin 提取到独立的css文件,从而css被浏览器缓存,减少js文件体积,css和js并行加载
  3. babel-loader 将js转换兼容低版本浏览器
  4. postcss-loader css 单位像素转换
  5. url-loader 将图片转换为编码
  6. markdown-loader 本地导入md文件渲染,通过打包处理
  7. file-loader 与 url-loader 相似,url-loader包括file-loader
    module: { // 加载器
        rules: [ // 规则列表
          {
            test: /\.css$/i, // 匹配 .css 结 尾的文件
            //use: ['style-loader', 'css-loader'], // 使用从后到前的加载器来解析 css 代码和插入到 DOM
            use:[MiniCssExtractPlugin.loader,'css-loader']
          }
        ]
  }

webpack 插件开发

在插件函数的prototype 上定义apply方法,apply的compiler 为参数 常用的 compiler 编译器,可以获取webpack主环境 和 compilation 对象提供多关键点回调供插件做自定义处理时选择

vite 插件开发

服务器启动阶段 options,buildStart 请求响应阶段 resolveId,load,transform 服务器关闭阶段 buildEnd closeBundle 钩子

`const exmaplePlugin = () => { let config

return { name: 'read-config',

configResolved(resolvedConfig) {
  // 记录最终配置
  config = resolvedConfig
},

// 在其他钩子中可以访问到配置
transform(code, id) {
  console.log(config)
}

} } `

部署流程

  1. 静态文件托管(nginx,apache)简单高效适用单页面应用
  2. 云服务器
  3. 容器化部署
  4. 混合部署,静态托管+云或传统后端

框架打包处理了很多缓存的问题, 灰度部署,nginx 通过 upstream 配置 通过 weight=10 控制分流量 map

map $cookie_user_group $backend_group { default backend_old; v2 backend_new; } upstream backend_old { server 192.168.0.1:8081; } upstream backend_new { server 192.168.0.1:8082; } server { listen 80; location / { proxy_pass http://$backend_group; } }