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

Node.js 新特性 SEA/单文件可执行应用尝鲜

#1 关于 SEA

单文件可执行应用(SEA,Singe Executable Applications),是 Node.js 新版本的特性,最初在 v19.7.0、v18.16.0 加入,并在 v20.x 得到扩展。而上个月发布的全家桶 Bun.js,就自带了 SEA 功能🙃。

此前,若需要把 JS 文件打包,通常会选择下面几种工具:

名称最新版本最新发布说明
pkg5.8.12023-03-08Package your Node.js project into an executable
boxednode2.1.22023-09-27Ship a JS file with Node.js in a box
nexeV32017-08-30create a single executable out of your node.js apps
node-sea0.3.02022-09-22Pack entire packages and application into portable scripts

#2 实战 SEA

#2.1 尝鲜官方 SEA

开始前请先升级到 node v20+,否则后续的命令会报错:bad option --experimental-sea-config

首先我们写一个简单的脚本,实现在控制台用边框包裹参数文本的功能。

/*** @type {String}*/
let name = process.argv[2]
if(!name || name.trim().length == 0){console.error("ERROR: 请输入名字")process.exit(-1)
}console.log(`Hello, ${name}`)

接下来编辑 sea-config.json 文件,内容是

{"main": "index.js","output": "index.blob"
}

执行命令node --experimental-sea-config sea-config.json后生成index.blob文件(可以用文本编辑器查看,其实就是之前的代码前加了一小段内容🙂)

接着执行:

# 将 node 环境包装成 exe 可执行文件(大小约为 68M)
node -e "require('fs').copyFileSync(process.execPath, 'hello.exe')" 
# 此时运行 ./hello.exe 与执行 node 命令效果一致😂# 接下来就是把 blob 文件转载到 hello.exe 内
npx postject hello.exe NODE_SEA_BLOB index.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 --overwrite
# 首次执行时,会提示安装 postject 包;增加 --overwrite 强制覆盖


运行效果

#2.2 PKG方案

# 请先安装 pkg:npm install -g pkg# 执行打包
pkg -t node16-win-x64 index.js -o hello-pkg.exe
# 大概 2 秒即可完成,生成 34M 大小的可执行文件
# 注意:按照官方文档,目前 pkg 最新支持到 node19 的打包,详见 https://github.com/vercel/pkg-fetch/blob/main/patches/patches.json

#2.3 存在的问题

SEA 本质就是把 node 环境与我们自己的 JS 文件一同打包,所以得到的产物体积都偏大。实际情况下,个人首选 pkg。

另外,官方及 pkg 都只支持单文件打包,若存在第三方库、文件的依赖,在运行时就会报 module 找不到的异常。

此时,可以使用诸如 webpack、vite 等构建工具把项目编译成单文件,再进行 SEA 包装😄。

相关文章:

Node.js 新特性 SEA/单文件可执行应用尝鲜

#1 关于 SEA 单文件可执行应用(SEA,Singe Executable Applications),是 Node.js 新版本的特性,最初在 v19.7.0、v18.16.0 加入,并在 v20.x 得到扩展。而上个月发布的全家桶 Bun.js,就自带了 SEA…...

137.只出现一次的数字II

137. 只出现一次的数字 II - 力扣(LeetCode) 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来…...

k8s-15 strogeclass

官网: https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner StorageClass提供了一种描述存储类 (class)的方法,不同的cass可能会映射到不同的服务质量等级和备份策略或其他策略等 每个 StorageClass 都包含 provisioner、parameters 和…...

微信小程序开发实战:利用差异对比显示对象属性变化

前言 在小程序开发中,经常会遇到需要比较两个对象之间的差异并将这些差异可视化展示在界面上的情况。这一过程对于数据管理和用户反馈至关重要。本文将介绍一种实用的方法,可以帮助开发者高效地比较两个对象的属性差异,并将这些差异以直观的方…...

Redis的GEO结构

GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。常见的命令有: GEOADD:添加一个地理空间信息,包含:经度…...

做UI设计师是否需要美术功底?

UI确实需要一定的手绘能力,但是跟画画是有很大不同的。 很多人问:学UI需不需要手绘能力。或者学UI需要什么绘画基础。 所以今天集体回答一下。 我们先来看一下跟绘画有关系的行业: 漫画: 主要的不是绘画能力,更重…...

python txt or 日志等超大文本文件读取

判断文件路径是否存在 要判断一个路径文件是否存在,可以使用Python的os.path模块中的exists()函数。下面是一个示例: import os# 要检查的文件路径 file_path = "path/to/file.txt"# 使用os.path.exists()函数判断文件是否存在 if os.path.exists(file_path):pri…...

Windows:Arduino IDE 开发环境配置【保姆级】

物联网开发学习笔记——目录索引 参考官网:Arduino - Home Arduino是一款简单易学且功能丰富的开源平台,包含硬件部分(各种型号的Arduino开发板)和软件部分(Arduino IDE)以及广大爱好者和专业人员共同搭建和维护的互联…...

【LeetCode 算法专题突破】双指针(⭐)

文章目录 前言1. 移动零题目描述代码 2. 复写零题目描述代码 3. 快乐数题目描述代码 4. 盛最多水的容器题目描述代码 5. 有效三角形的个数题目描述代码 6. 三数之和题目描述代码 7. 四数之和题目描述代码 总结 前言 学算法入门必学的一个章节,双指针算法&#xff0…...

ts知识点——基础积累

第一章 快速入门 1、TypeScript简介 TypeScript是JavaScript的超集。它对JS进行了扩展,向JS中引入了类型的概念,并添加了许多新的特性。TS代码需要通过编译器编译为JS,然后再交由JS解析器执行。TS完全兼容JS,换言之,…...

mybatis plus MetaObjectHandler 不生效

首先要知道,spring boot 只会加载启动类同级和下级的bean 如果把bean放在启动类不同的上级目录,是加载不了bean的 如果把mybatisplus的配置文件放在与启动类不同包,就会扫描不到 例如放在这里,就扫描不到 放到这里,就可以扫描到...

力扣第216 组合总和 ||| c++ 回溯 + 注释

题目 216. 组合总和 III 中等 相关标签 数组 回溯 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺…...

深度学习系列51:hugging face加速库optimum

1. 普通模型 Optimum是huggingface transformers库的一个扩展包,用来提升模型在指定硬件上的训练和推理性能。Optimum支持多种硬件,不同硬件下的安卓方式如下: 如果是国内安装的话,记得加上-i https://pypi.tuna.tsinghua.edu.c…...

【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.6 定时器事件

本章要实现的整体效果如下: QT 中使用定时器,有两种方式: 定时器类:QTimer定时器事件:QEvent::Timer,对应的子类是 QTimerEvent 本节通过一个案例,同时讲解这两种方式 案例:当点击…...

阿里云服务器ECS实例规格族c/g/r等字母说明

阿里云服务器ECS实例命名规则&#xff1a;ecs.<规格族>.large字母含义命名说明&#xff0c;包括x86、ARM架构、GPU异构计算、弹性裸金属、超级计算集群SCC云服务器&#xff0c;c代表计算型、g代表通用型、r代表内存型、u代表通用算力型、e代表经济型e实例&#xff0c;阿里…...

Everything和SVN结合使用-在Everything中显示SVN

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…...

代码随想录算法训练营第五十二天| 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV

今日学习的文章链接和视频链接 123.买卖股票的最佳时机III 视频讲解&#xff1a;https://www.bilibili.com/video/BV1WG411K7AR https://programmercarl.com/0123.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BAIII.html 188.买卖股票的…...

②. GPT错误:图片尺寸写入excel权限错误

꧂问题最初 ꧁ input输入图片路径 print图片尺寸 大小 长宽高 有颜色占比>0.001的按照大小排序将打印信息存储excel表格文件名 表格路径 图片大小 尺寸 颜色类型 占比信息input输入的是文件就处理文件 是文件夹&#x1f4c1;就处理文件。路径下的图片 1. 是处理本路径图片 …...

JQuery、JSON、AJAX、XML、IO流、多线程、反射核心知识点详解

JQuery 一、什么是JQuery JQuery是JavaScript的一个框架&#xff0c;对js的封装&#xff0c;使得js简单易学 优点&#xff1a; 1、不用考虑浏览器兼容性问题 2、jquery拥有强大的选择器&#xff0c;简化了js代码 3、jquery提供了很多系统函数&#xff0c;直接调用 二、版本 1.x…...

基于python的多种图像增强算法实现

基于python的多种图像增强算法实现 引言工具算法增强对比度直方图均衡化锐化图像噪声消除中值滤波均值滤波高斯滤波双边滤波增强对比度直方图均衡化总结全部资源引用引言 本项目使用python实现多种空域增强的图像增强算法,并使用了pyqt编写页面。通过点击不同页面的多种按钮,…...

美国司机监控基础设施复杂,多州出台隐私保护法律应对,你的隐私还好吗?

追踪美国司机监控现状追踪美国司机的监控基础设施如今已发展得远比多数人想象的复杂。最初简单的车牌记录技术&#xff0c;如今已演变成能识别面部、标记异常出行模式并构建详细活动档案的 AI 系统&#xff0c;且这一切都在被监控者毫不知情的情况下进行。据民权组织称&#xf…...

5分钟快速上手:XUnity.AutoTranslator游戏翻译插件完整教程

5分钟快速上手&#xff1a;XUnity.AutoTranslator游戏翻译插件完整教程 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为外语游戏的语言障碍而烦恼吗&#xff1f;XUnity.AutoTranslator是一款强大的…...

Swift 项目集成 MJRefresh 终极指南:SPM包管理与桥接文件配置详解

Swift 项目集成 MJRefresh 终极指南&#xff1a;SPM包管理与桥接文件配置详解 【免费下载链接】MJRefresh An easy way to use pull-to-refresh. 项目地址: https://gitcode.com/gh_mirrors/mj/MJRefresh MJRefresh 是一款简单易用的下拉刷新框架&#xff0c;能帮助 Swi…...

ElevenLabs Starter计划实战指南(新手必看的4步激活+2次配额翻倍技巧)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs Starter计划的核心定位与适用边界 ElevenLabs Starter 计划是面向开发者、内容创作者及小型团队推出的免费语音合成入门方案&#xff0c;旨在以零门槛方式提供高质量、低延迟的文本转语音&…...

资深运维的Helm Chart私藏库:高质量K8s应用部署实战指南

1. 项目概述&#xff1a;一个资深运维的Helm Chart私藏库如果你和我一样&#xff0c;长期在Kubernetes&#xff08;K8s&#xff09;的“牧场”里当“牛仔”&#xff08;Sysop&#xff09;&#xff0c;那你肯定明白&#xff0c;找到一个质量上乘、维护及时、配置合理的Helm Char…...

联邦学习与RAG融合:构建隐私保护的跨机构智能检索系统

1. 项目概述与核心价值最近在折腾一个跨机构文档智能检索的原型&#xff0c;核心需求是&#xff1a;在不共享原始数据的前提下&#xff0c;让多个参与方&#xff08;比如几家医院、几个研究实验室&#xff09;能够联合起来&#xff0c;构建一个强大的、统一的文档知识库&#x…...

Java 开发,不要瞎忙,十点睡觉六点起床,天塌不了

你是一名 Java 开发&#xff0c;不要瞎忙&#xff0c;十点睡觉六点起床&#xff0c;天塌不了。我的想法对吗&#xff1f; 没问题&#xff0c;这就给你上干货。想在 Java 开发这行准点下班&#xff0c;光靠手速快是不够的&#xff0c;核心在于掌控节奏和学会拒绝。 这里有一份帮…...

ARM动态内存控制器与SDRAM地址映射技术详解

1. ARM动态内存控制器基础解析动态内存控制器&#xff08;Dynamic Memory Controller&#xff0c;简称DMC&#xff09;是现代嵌入式系统中管理SDRAM等易失性存储器的核心组件。作为处理器与存储设备之间的桥梁&#xff0c;DMC通过高效的地址映射技术实现两者间的数据通信。在AR…...

Nihonga风格AI生成稀缺资源包泄露:含17世纪狩野派笔触扫描集、200+古籍《本朝画史》描述性Prompt语料库、及唯一通过日本文化厅AI伦理审查的商用授权协议范本

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Nihonga风格AI生成资源包的伦理边界与文化权重 文化符号的不可压缩性 Nihonga&#xff08;日本画&#xff09;并非仅由矿物颜料、金箔或桑皮纸构成的技术集合&#xff0c;其内嵌着神道自然观、物哀美学…...

【东亚美学AI化里程碑】:全球首份Midjourney Sumi-e风格Prompt工程白皮书(附东京艺术大学合作验证的17组对比测试数据)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;东亚美学AI化的范式跃迁 东亚美学传统强调“留白”“气韵”“物哀”与“间”&#xff08;ma&#xff09;等非显性结构&#xff0c;其核心并非形式完备性&#xff0c;而在于感知张力与意义生成的临界状态…...