21_webpack_DDL
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的更多相关文章
随机推荐
- 【RocketMQ】DLedger选主源码分析
RocketMQ 4.5版本之前,可以采用主从架构进行集群部署,但是如果master节点挂掉,不能自动在集群中选举出新的Master节点,需要人工介入,在4.5版本之后提供了DLedger模式,使用R ...
- 2023 年 dotnet 仓库社区年度调查已经开始
准备好今年对 dotnet 指手画脚了吗,平常在群里我忍气吞声,今天我必须重拳出击,快来参与吧. 我直接一个参的加 .NET 是一个跨平台的开发框架,支持多种语言和应用场景,如 C#.F#.VB.NE ...
- 多线程并发(二):聊聊AQS中的共享锁实现原理
在上一篇文章多线程并发(一)中我们通过acquire()详细地分析了AQS中的独占锁的获取流程,提到独占锁,自然少不了共享锁,所以我们这边文章就以AQS中的acquireShared()方法为例,来分 ...
- 用ChatGPT,快速设计一个真实的账号系统
hi,我是熵减,见字如面. 用ChatGPT,可以尝试做很多的事情. 今天我们就来让ChatGPT做为架构师,来帮我们设计一个账号系统吧. 我的实验过程记录如下,与你分享. 用户故事 首先,我们从用户 ...
- .Net NPOI 简单Demo,一看就会
#region 文件输出 public class BasicInfodsa { public string name; public string phone; } List zyData = ...
- Windows 注册表是什么
注册表的概念 历史发展 在 Windows 3.x 操作系统中,注册表是一个极小文件,其文件名为 Reg.dat,里面只存放了某些文件类型的应用程序关联,大部分的设置是被放在 win.ini.syst ...
- vue中如何在子组件添加类似于watch属性监听父组件数据,数据变化时子组件做出相应的动作
首先:我们需要在父组件中标签中定义一个 ref="parentObjVue" 其次:我们在子组件中,通过 var tmp=this.$refs.parentObjVue找到父组件 ...
- DataGridView添加新一行数据可添加到最后一行或第一行
整体代码如下: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data; ...
- linux中进程和线程简单介绍
进程和线程的简单知识 进程是用来申请内核资源的,只有资源到位,进程才会进行,进程包含线程,线程是进程内部的调度单位,所以在业内有这样一句话,进程是资源分配最基本单位,线程是系统调度的最基本的单位,进程 ...
- switch和if
#include<stdio.h> int main() { char ch1='A'; char ch2='B'; switch(ch1) { case'A': switch(ch2) ...