Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在Node.js中处理Zip文件

在Node.js中处理Zip文件

作者头像
疯狂的技术宅
发布于 2020-08-10 07:49:37
发布于 2020-08-10 07:49:37
5.7K00
代码可运行
举报
文章被收录于专栏:京程一灯京程一灯
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 每日前端夜话 第372篇
// 正文共:1200 字
// 预计阅读时间:6 分钟

Zip 文件是常用的压缩文件格式。在本文中,我将演示如何用 adm-zip npm 模块[1]创建和提取 zip 文件。

创建一个 Zip 文件

从 adm-zip 的 npm 模块中导出一个 AdmZip 类。`AdmZip`的实例对应于一个 zip 文件[2]。如果想要创建一个新的 zip 文件,在调用 new AdmZip() 时不应带任何参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const AdmZip = require('adm-zip');

const file = new AdmZip();

可以通过多种方式将文件和目录添加到 file。可以用 file.addLocalFile()file.addLocalFolder() 通过文件名从文件系统添加文件和目录。例如下面的代码演示了怎样把 package.json 文件和 node_modules 目录添加到 zip 文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const AdmZip = require('adm-zip');

const file = new AdmZip();

file.addLocalFile('./package.json');
//第二个 node_modules 参数是 zip 中目录的路径。
//如果没有第二个参数,则`./node_modules`中的每个目录都将是压缩文件中的顶级目录
file.addLocalFolder('./node_modules', 'node_modules');

然后,你可以使用下面两种方法中的一个写入文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//写入zip文件的第一种方法:将其转换为缓冲区并使用`fs`
const fs = require('fs');

fs.writeFileSync('output.zip', file.toBuffer());

// 另一种写入 zip 文件的方法:writeZip()
file.writeZip('output.zip');

写入output.zip 文件后,你应该能够在制定的 zip 解压缩程序中打开它。下面是在 Xubuntu 的默认存档管理器 engrampa[3] 中打开的文件。

addLocalFile()addLocalFolder() 的第二个参数是将文件或目录内容放入 zip 的路径。例如,如果要将 package.jsonnode_modules 都放在 project 目录下,则可以运行以下脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const AdmZip = require('adm-zip');

const file = new AdmZip();

file.addLocalFile('./package.json', 'project');
file.addLocalFolder('./node_modules', 'project/node_modules');

const fs = require('fs');

fs.writeFileSync('output.zip', file.toBuffer());

可以用 file.addFile() 方法从原始 Node.js 缓冲区添加文件。以下是不在文件系统上创建文件的情况下,将包含字符串 Hello,World 的文本文件添加到 zip 文件中的方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const AdmZip = require('adm-zip');

const file = new AdmZip();

file.addFile('hello.txt', Buffer.fromString('Hello, World'));

const fs = require('fs');

fs.writeFileSync('output.zip', file.toBuffer());

使用现有文件

如果你将参数传递给 AdmZip 构造函数,则 adm-zip 将在给定路径下解析文件。下面是将所有内容从 output.zip 文件提取到目录 output 的方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const AdmZip = require('adm-zip');

const file = new AdmZip('./output.zip');

file.extractAllTo('./output');

也可以用 file.extractEntryTo() 从 zip 文件中提取单个文件。例如,下面是从 zip 文件中拉出 hello.txt 文件并将其写入当前目录的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const AdmZip = require('adm-zip');

const file = new AdmZip('./output.zip');

file.extractEntryTo('hello.txt', './');

你也可以对现有文件使用 addLocalFile()addLocalFolder()addFile()

总结

zip 文件通常用于压缩。某些服务(例如 AWS Lambda)要求你使用 zip 文件。幸运的是,adm-zip npm 模块使直接从 Node.js 创建和提取 zip 文件变得容易。


作者:Valeri Karpov 翻译:疯狂的技术宅 原文:http://thecodebarbarian.com/working-with-zip-files-in-node-js.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端先锋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Node.js学习笔记(二)——Node.js模块化、文件读写、环境变量
(1)、在浏览器端使用var或不使用关键字定义的变量属于全局作用域,也就是可以使用window对象访问。
张果
2022/09/28
6.5K0
Node.js学习笔记(二)——Node.js模块化、文件读写、环境变量
Node.js
主要学习:JavaScript+Node.js内置API模块(fs、path、http等)+第三方API模块(express、mysql等)
岳泽以
2022/11/21
8.3K0
Node.js
Node.js 是怎么找到模块的?
需要注意的是,"a/b" 这种不属于路径写法,它属于前两种,比如 "fs/promises"、"@babel/core"。
前端西瓜哥
2022/12/21
2.3K0
Node.js 是怎么找到模块的?
使用 Node.js 开发简单的脚手架工具
像我们熟悉的 vue-cli,react-native-cli 等脚手架,只需要输入简单的命令 vue init webpack project,即可快速帮我们生成一个初始项目。在实际工作中,我们可以定制一个属于自己的脚手架,来提高自己的工作效率。
前端教程
2018/07/27
1.4K0
使用 Node.js 开发简单的脚手架工具
Node.js核心API的使用
Node.js=HTML+"JS":性能好,适合于服务器端IO密集型项目,不适合CPU密集型项目
越陌度阡
2020/11/26
3.8K0
构建工具篇 - react 的 yarn eject 构建命令都做了什么
前段时间,一直在研究 react 技术栈,对于项目的构建方面,又有一定的特殊需求,通过 npx create-react-app [filename] 安装以后,发现没有 webpack 相关的配置的目录,在读了 react 官方文档后,发现通过 yarn eject 可以弹出相关的配置,进行自定义配置。
胡哥有话说
2019/07/25
2K0
构建工具篇 - react 的 yarn eject 构建命令都做了什么
关于使用 Node.js 来辅助进行 CI/CD 的一些想法
  由于使用到的 CI/CD 工具可能会更换,对应的学习成本也相应增加,但是 Node.js 其实可以帮助我们实现这些工具的大部分功能,包括操作文件、执行 cmd 等等。   所以我们如果把大部分的打包或集成操作使用 Node.js 去实现,那么无论工具如何更换,我们只需学习如何使用该工具执行 npm 即可,从而大大降低迁移与学习成本。   当然这只是我最近迁移时的一些解决方案与想法,如果有大佬指教一些其他的方式,那自然是更好啦哈哈哈~
老猫-Leo
2023/12/11
3800
Node.js 基础入门
Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境
王秀龙
2021/08/23
1.6K0
Node.js 基础入门
搭建webpack项目框架
随着业务发展和前端人员的增加,搭建一个通用框架以及制定统一规范就成了必然。对于选型这方面,一开始好像就没考虑其他框架,直接选了webpack。webpack的优点就不多说了,可扩展性,强大的npm插件库,说干就干。
jojo
2019/03/12
2.4K0
搭建webpack项目框架
创建发布一个cli工具
执行kun create hellow,打印name: hellow。 现在支持 kun create <name>,kun -V,而且action中可以执行一下操作,并且能得到用户传入的参数。 6.安装 chalk.js 控制台粉笔工具,方便改变打印的颜色
刘嘿哈
2022/10/25
2.3K0
node.js笔记
4、语法: 1)加载 path 模块 2)使用 path.join 方法,拼接路径
打不着的大喇叭
2024/03/11
2480
node.js笔记
看了就会的 Node.js 三大基础模块常用 API
在日常使用 Node 进行开发的时候,会使用到一些文件系统、路径操作等基础 API,这里整理一下,方便大家理解和直接使用。
山月
2021/06/16
9690
前端要了解的Node.js
Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。 Node采用Google开发的V8引擎运行js代码,使用事件驱动、非阻塞和异步I/O模型等技术来提高性能,可优化应用程序的传输量和规模。 Node大部分基本模块都用JavaScript编写。在Node出现之前,JS通常作为客户端程序设计语言使用,以JS写出的程序常在用 户的浏览器上运行。 目前,Node已被IBM、Microsoft、Yahoo!、Walmart、 Groupon、SAP、 LinkedIn、Rakuten、PayPal、Voxer和 GoDaddy等企业采用。 Node主要用于编写像Web服务器一样的网络应用,这和PHP 和Python是类似的。 Node.js允许通过JS和一系列模块来编写服务器端应用和网络相关的应用。 核心模块包括文件系统I/O、网络(HTTP、TCP、UDP、DNS、TLS/SSL等)、二进制数据流、加密算法、数据流等。Node 模块的API形式简单,降低了编程的复杂度。
zhouzhouya
2023/10/27
4060
前端要了解的Node.js
03_Node.js模块化开发
NPM的全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。
张哥编程
2024/12/13
3300
03_Node.js模块化开发
Node.js笔记
Node.js 是一个开源和跨平台的 JavaScript 运行时环境。Node.js 在浏览器之外运行 V8 JavaScript 引擎(Google Chrome 的内核)
赤蓝紫
2023/01/02
1.2K0
Node.js笔记
使用Node.js构建命令行工具
需要注意的是,需要添加片段标识符“!/usr/bin/env node”,告知脚本使用Node执行。 第三步:在package.json文件中补充bin部分
奋飛
2019/08/15
1.6K0
node.js基础入门
node.js是一个基于Google V8引擎的、跨平台的JavaScript运行环境,不是一个语言
黄啊码
2022/06/20
8390
Node.js脚手架开发完全指南「TypeScript版」
在koa入门系列中,我们介绍了koa2的最佳实践,并提供了一个koa2+TypeScript的最佳实践模版。但是每次拷贝模版再去修改,总是麻烦的,不如来开发一个脚手架,用命令行生成koa2项目。
luciozhang
2023/04/22
2.2K0
Node.js脚手架开发完全指南「TypeScript版」
前端构建系统-《node.js实战》
node有npm,npm能运行脚本。在package.json文件中,scripts 属性可以指定npm 的命令:
用户3258338
2019/07/19
2.1K0
前端构建系统-《node.js实战》
Node.JS 学习记录(01)
64 位安装包下载地址 : https://nodejs.org/dist/v4.4.3/node-v4.4.3-x64.msi
王也518
2022/10/26
9470
相关推荐
Node.js学习笔记(二)——Node.js模块化、文件读写、环境变量
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验