DLL库(不再使用)

DLL全称是动态链接库(Dynamic Link Library),是为软件在Windows中实现共享函数库的一种实现方式

webpack中也有内置DLL的功能,它指的是我们可以将可以共享,并且不经常改变的代码,抽取到一个共享的库

整个库在之后编译的过程中,会被引入到其他项目的代码中

DLL库的使用分成两步
  第一步:打包一个DLL库
  第二步:项目中引入DLL库

在升级到webpack4之后,React和Vue脚手架移除了DLL库

打包DLL库

const webpack = require("webpack");
const path = require("path");
// 主要代码
const TerserPlugin = require("terser-webpack-plugin"); module.exports = {
// 主要代码
entry: {
vue: "vue",
},
// 主要代码
output: {
path: path.resolve(__dirname, "./dll"),
filename: "dll_[name].js",
// 暴露出的全局变量名
// 主要是给DllPlugin中的name使用,这里要和DllPlugin的name保持一致
library: "dll_[name]",
},
optimization: {
minimizer: [
new TerserPlugin({
extractComments: false,
}),
],
},
plugins: [
// 主要代码
new webpack.DllPlugin({
// //必填,不然在web网页中找不到 'dll_[name]',会报错
context: __dirname,
name: "dll_[name]",
path: path.resolve(__dirname, "./dll/[name].manifest.json"),
}),
],
}; /*
const VueLoaderPlugin = require("vue-loader/lib/plugin");
module: {
rules: [
{
test: /\.vue/,
use: "vue-loader",
},
],
}, */

DLL使用

新建一个项目,在项目中还需要npm i vue 因为不下载vue包,你在js文件import引入会有问题

如果我们在代码中使用了Vue,我们有配置splitChunks的情况下,它会进行分包,打包到一个独立的chunk文件中

但是现在我们有了dll_vue,不需要单独去打包他们,可以直接去引用dll_vue即可

第一步:通过DllReferencePlugin插件告知要使用的Dll库

  plugins: [
new webpack.DllReferencePlugin({
manifest: resolveApp("./dll/vue.manifest.json"),
// // AutoDllPlugin 的 context 必须和 package.json 的同级目录,要不然会链接失败,和DllPlugin的context路径对应起来
context: resolveApp("./"),
}),
],

第二步:通过AddAssetHtmlWebpackPlugin插件,将我们打包的Dll库引入到Html模板中

npm i add-asset-html-webpack-plugin -D

// 复制文件资源,并且在index.html中对资源进行引入
const AddAssetHtmlWebpackPlugin = require("add-asset-html-webpack-plugin");

new AddAssetHtmlWebpackPlugin({
filepath: resolveApp("./dll/dll_vue.js"),
outputPath: "auto",
}),

21_webpack_DDL的更多相关文章

随机推荐

  1. 线程基础知识09-JAVA的可见性和有序性问题

    1 CPU中的三级缓存及可见性问题 1.1 简介 1.2 缓存行Cacheline 1.3 可见性问题-缓存一致性协议 2 JAVA中的有序性问题 2.1 指令重排简介 2.2 as-if-seria ...

  2. vscode + vim 快捷键

    多行编辑 按V选中行,按大写I即可进入编辑模式 撤销恢复 CTRL + z 撤销 CTRL + shift + z 恢复 代码自动对齐 Alt + shift + f

  3. 学习Java Day25

    今天学习了类路径和如何设置类路径 其中需要创建JAR后面才会介绍如何创建JAR,类路径可以节省空间并改善性能,设置类路径可以用-classpath选项指定路径

  4. 【源码】RapidJSON 源码剖析(0.1):调试工具 GDB 的使用

    [源码]RapidJSON 源码剖析(0.1):调试工具 GDB 的使用 正式开始源码阅读之前,有必要了解一下源码阅读中用到的调试工具 GDB. GDB(GNU Debugger) 是一种可以运行在多 ...

  5. js的map、filter的用法

    filter() 创建新数组,新数组放指定数组中符合条件的元素,满足条件的留下,是对原数组的过滤. map()    返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值,是对原数组的加工,映 ...

  6. BUUCTF—CRYPTO 1—10

    BUUCTF-CRYPTO 1-10 1.MD5 题目:e00cf25ad42683b3df678c61f42c6bda 解析:看题目就知道是MD5加密,直接上在线解码网站解码,答案是:flag 2. ...

  7. 世界UTC时间时区对照图

  8. C++ cannot bind non-const lvalue reference of type ‘Dog&’ to an rvalue of type ‘Dog’

    void function(Dog & d){ /************** } 调用这个函数,如果传参一个右值对象,临时对象,则会出现这个问题 一个临时对象的引用,这怎么想都不合理 从该函 ...

  9. CF207C

    前言 学习 zzd 博客( 这题超级没有素质. 连个题解都搜不到. 好不容易搜到一个. 看了一下是 pascal. 不过还好我有办法. 树剖做 \(k\) 级祖先. 十万的俩老哥飘过. 三百毫秒优异成 ...

  10. Django models.py 表的参数选择

    from django.db import models # Create your models here. class Department(models.Model):    # 以后可以新增, ...