使用DllPlugin 提取公用库

原文链接: 使用DllPlugin 提取公用库

上一篇: css 保持宽高比缩放

下一篇: 在webstorm中使用 cmder (暂未成功...)

不使用dll的时候, vue是直接和应用一起打包的, 每次更新应用, 用户端需要下载所有新的js

up-9585926bbf8f9d529df197277a5fa06eee5.png

up-ca487f02d6e216046329fda089916bca476.png

优化后, 大小会大一点, 但是每次更新时用户不需要重新下载vue的js, 只需要更新app相关的js

up-3a61086ac166eb168b28fd337257e95003b.png

up-e30b28ca3698a608397ffc384fa44c17ac6.png

去除map和core-js, 反正唯一的用户是我, 而我只用chrome ~

up-dcfc6da0087b227456d04e765b767017956.png

up-660f11ba6cf9dfc79a8da6b2d3cea5e3b55.png

up-82004017a3c9e6f090569d29841deabd7fc.png

安装所需模块

npm i clean-webpack-plugin add-asset-html-webpack-plugin webpack-bundle-analyzer -D

新建配置文件 webpack.dll.config.js

const path = require("path");
const webpack = require("webpack");
const { CleanWebpackPlugin } = require("clean-webpack-plugin");

// dll文件存放的目录
const dllPath = "public/dll";

module.exports = {
  entry: {
    // 需要提取的库文件
    vue: [
      "vue"
      // "element-ui" // 这种方式element会被全部打包进去
    ]
  },
  output: {
    path: path.join(__dirname, dllPath),
    filename: "[name].dll.js",
    // vendor.dll.js中暴露出的全局变量名
    // 保持与 webpack.DllPlugin 中名称一致
    library: "[name]_[hash]"
  },
  plugins: [
    // 设置环境变量
    new webpack.DefinePlugin({
      "process.env": {
        NODE_ENV: "production"
      }
    }),
    // 清除之前的dll文件
    new CleanWebpackPlugin({
      cleanOnceBeforeBuildPatterns: [path.join(__dirname, dllPath), "**/*"]
    }),
    // manifest.json 描述动态链接库包含了哪些内容
    new webpack.DllPlugin({
      path: path.join(__dirname, dllPath, "[name]-manifest.json"),
      // 保持与 output.library 中名称一致
      name: "[name]_[hash]",
      context: process.cwd()
    })
  ]
};

修改vue.config.js文件,  使用插件注入dll并将dll的script脚本加到index.html中

const webpack = require("webpack");
const AddAssetHtmlPlugin = require("add-asset-html-webpack-plugin");
const path = require("path");
const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer");

module.exports = {
  lintOnSave: false,
  // 基本路径
  publicPath: "",
  assetsDir: "./",
  outputDir: "docs",
  productionSourceMap: false, // 去除生产环境的source map

  configureWebpack: {
    plugins: [
      // 将 dll 注入到 生成的 html 模板中
      new AddAssetHtmlPlugin({
        // dll文件位置
        filepath: path.resolve(__dirname, "./public/dll/*.js"),
        // dll 引用路径
        publicPath: "dll",
        // dll最终输出的目录
        outputPath: "./dll"
      }),
      new webpack.DllReferencePlugin({
        context: process.cwd(),
        manifest: require("./public/dll/vue-manifest.json")
      }),
      new BundleAnalyzerPlugin()
    ]
  }
};

本地使用serve可以达到效果, 但是git doc的方式不行, 更新后依然会全部请求.....

up-1c938046fbac33a11620664a02b6245efd3.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值