当前位置: 首页 > news >正文

webpack4项目中,使用@zip.js/zip.js(2.7.72版本)解析zip包 报错 unexpected token import.meta.url

背景

原本是使用jszip去解压zip包,获取文件内容的,但是jszip是直接解压到内存里,有大小限制,太大的包没法解析,所以改用@zip.js/zip.js

解压代码实现示例

<template><div><input type="file" ref="file" @change="handleZip"></div>
</template><script>
// 导入必要的类和核心模块
import { ZipReader, BlobReader, TextWriter } from '@zip.js/zip.js'export default {name: 'ZipTest',data () {return {msg: 'ZipTest'}},methods: {async handleZip (e) {const file = e.target.files[0]if (!file) {return console.log('请选择文件')}try {console.log('开始解析zip包...')// 直接使用导入的类const zipReader = new ZipReader(new BlobReader(file))const entries = await zipReader.getEntries()console.log('zip包中的文件列表:', entries, '文件大小:', file.size)for (const entry of entries) {if (entry.directory) continueconsole.log('文件名称:', entry.filename)// 使用TextWriter(非流方式)读取内容try {const content = await entry.getData(new TextWriter())console.log('文件内容:', content)} catch (error) {console.log('文件内容读取失败', error)}}await zipReader.close()console.log('解析完成')} catch (error) {console.log('解析失败', error)}}}
}
</script><style scoped></style>

报错

image
这个是因为webpack4里不支持import.meta.url

解决办法

法一:升级webpack4到webpack5

法二:@zip.js/zip.js使用2.0.12版本,这个版本没有import.meta.url

会报webworker相关的错,因为它默认会使用webworker,需要设置useWebWorkers为false

const zipReader = new ZipReader(new BlobReader(file), {useWebWorkers: false})

法三:自定义webpack的loader,把import.meta.url转为空字符串

因为是用@vue/vli 4.x创建的项目,新增vue.config.js, 如下配置:

const path = require('path')module.exports = {// 自定义loader,把import.meta.url转为空字符串// 这个loader在所有的loader之前执行// 把node_modules/@zip.js/zip.js目录的js文件都应用这个loader// 并且这个是在所有的loader之前执行chainWebpack: config => {config.module.rule('import-meta-url').enforce('pre').test(/\.js$/).include.add(path.resolve(__dirname, 'node_modules/@zip.js/zip.js')).end().use('import-meta-url-loader').loader(path.resolve(__dirname, 'loaders/import-meta-url-loader.js'))}
}

loaders/import-meta-url-loader文件:

module.exports = function (source) {
// 这里的打印是为了测试,可以删除console.log('执行自定义import-meta-url-loader。。。')return source.replace(/import.meta.url/g, '""')
}
http://www.sczhlp.com/news/13840/

相关文章:

  • Manacher 做题记录
  • 5.7 文件的修改
  • 2025年8月17日15:31:09
  • 家庭配电箱内的开关有多种类型,每种开关的作用、分类及常见用途都不尽相同。下面是详细的分类说明以及表格化的展示:
  • HS_fu3的语录
  • 在K8S中,外部如何访问集群内的服务?
  • CSP-S模拟13
  • 你好, 再见 ! 董小姐
  • CSP-S2025模拟7-13
  • 模拟费用流入门
  • 合页作为一种常见的连接元件,其发展历程与建筑、家具、机械等领域的需求密切相关。以下是合页发展的时间线,详细说明了其主要的发展阶段:
  • ROS2 学习(一)——节点的概念
  • 关于柜门铰链的发展时间线,它经历了多个阶段的创新与进步,从最早的简单支撑结构到现代智能调节功能的集成。以下是详细的时间线和各阶段的发展说明:
  • Manacher算法实现
  • 题解:P11323 【MX-S7-T1】「SMOI-R2」Happy Card
  • day29大模型程序开发day04-多智能体编排实操(张飞诸葛亮转移智能体)
  • Luogu P13685 【MX-X16-T3】「DLESS-3」XOR and Impossible Problem 题解 [ 黄 ] [ Ad-hoc ] [ 值域分治 ]
  • 在K8S中,镜像下载策略有哪些?
  • 一道题
  • 八代凯美瑞中控usb连接carplay盒子音响有电流滋滋声的解决方案
  • 读书笔记: 数据仓库同步的陷阱与Oracle读一致性的奥秘
  • SDFZ contest 444 题解
  • 设计表 Design table _2 获取单元格内容
  • 最小二乘法计算触摸事件速度
  • Font Awesome 一个基于CSS和LESS的免费图标库工具包 【下载与使用教程】
  • 铝5052、铝6061、铝7075、铝2A12的主要区别表格:
  • 揭秘ChatGPT共享功能重大隐私漏洞的发现与报告过程
  • 红日靶场01
  • ABC 419 E(滑窗同余 + dp)
  • 与配置相关的设计表 Design table