@ai-ecoverse/slicc-jsh (英语)
切-jsh 给 块状内核 a 22相容节点 node 命令,和 a jsh 运行的命令 .jsh 剧本. 也载着一个宿主 jsh 运行相同的CLI .jsh 普通机器上的脚本,机器自己的节点22.
安装
在你的机器上: curl … | sh
在macOS或Linux(x64或arm64)上,没有npm:
curl -fsSL https://raw.githubusercontent.com/ai-ecoverse/slicc-jsh/main/install.sh | sh
每一次GitHub发布都带同样的 install.sh 作为资产,所以 https://github.com/ai-ecoverse/slicc-jsh/releases/latest/download/install.sh 是最新发布的副本.
什麽 install.sh 是否为:
- 节点. 它使用
node打开PATH如果这是节点22或以后。 如果没有,它就会在将最新节点22 LTS从nodejs.org下载到~/.jsh/node,并检查它与nodejs.org的SHASUMS256.txt。该节点只用于jsh:没有sudo,没有软件包管理器。 没有旗帜跳过问题。 在没有终端(CI)的情况下,它会停下来并说如何安装22号节点(nodejs.org,Homebrew,fnm或nvm). 在Musl(阿尔卑斯山)上,它要求您与您的软件包管理器安装22号节点. - j. 它从npm注册处得到最新版本(或你要求的版本),对照注册处的sha512检查柏油球
integrity,然后把它拆开~/.jsh/lib/node_modules/@ai-ecoverse/slicc-jsh。新版本在旧版本旁边被打包,并且只在运行后移动,所以一个失败的升级保留了旧版本. - 这个
jsh命令. 写着~/.local/bin/jsh,一个小sh运行已安装的jsh上的节点的脚本 。 这是一个文件,不是化名,所以#!/usr/bin/env jsh坚硬和无相互作用的弹壳起作用。 它不会覆盖一个jsh它没有写 若为~/.local/bin还没上PATH,它会先问,然后在你的外壳的 rc 文件中添加一行(.zshrc, (中文(简体) ),.bashrc或者说.bash_profile鱼的config.fish,则.profile) (中文(简体) ). 没有终端,它会打印行. - 结局是
jsh --version。 。 。 .
再次运行以提升jsh,并更新其私人节点至最新22.
| 变量 | 默认 | 它的设定 |
|---|---|---|
JSH_HOME | ~/.jsh | jsh和它的私人节点去的地方 |
JSH_BIN_DIR | ~/.local/bin | 地点 jsh 命令开始 |
JSH_VERSION | 最新消息 | 要安装的版本(或 --version x.y.z(中文(简体) ) |
JSH_INTEGRITY | 无 | (或 --integrity sha512-…(中文(简体) ) |
# a given version
curl -fsSL https://raw.githubusercontent.com/ai-ecoverse/slicc-jsh/main/install.sh | sh -s -- --version 0.16.1
# remove ~/.jsh and the jsh command
curl -fsSL https://raw.githubusercontent.com/ai-ecoverse/slicc-jsh/main/install.sh | sh -s -- --uninstall
--uninstall 使用同样的 JSH_HOME 财务报告和审定财务报表 JSH_BIN_DIR,如果你设置它们。 它不编辑rc文件;它告诉你要删除哪行.
信得过. 脚本信任npm注册和nodejs.org对HTTPS. 默认,它检查的散列与文件来自同一地点,它不会自己散列. --version 针出一个版本,而不是散列.
标出字节 --integrity (或 JSH_INTEGRITY)与该版本. 然后登记 dist.integrity 并且下载的柏油球必须等于该值,或者安装者停止并打印预期值和实际值:
# the sha512 to pin, from a source you trust
npm view @ai-ecoverse/[email protected] dist.integrity
curl -fsSL https://raw.githubusercontent.com/ai-ecoverse/slicc-jsh/main/install.sh |
sh -s -- --version 0.37.1 --integrity sha512-…
仅a sha512- 值被接受; 其它算法和错误的值在被下载之前被拒绝。 接针覆盖了jsh tarball,而不是安装器脚本或私人节点.
窗口 尚未覆盖: ai- ecoverse/ slicc-jsh # 127随着npm, jsh file.jsh 运行通过 npm .cmd 嘘.
与 npm 关系
包裹 bin 为主机 jsh (单位:千美元)dist/host/jsh.mjs) (中文(简体) ). 它运行 .jsh 剧本在主机自己的节点22上或后作.
npm i -g @ai-ecoverse/slicc-jsh
jsh script.jsh args…
npx @ai-ecoverse/slicc-jsh script.jsh
块状内核
在内核中安装 pnpm 软件包 :
pnpm add -g @ai-ecoverse/slicc-jsh
内核读取 slicc 软件包的字段 package.json 登记和登记 abi: "js" 程序:
| 命令 | 模块 | 这是什么 |
|---|---|---|
node | dist/node.mjs | 节点 22.x 兼容运行时间 |
jsh | dist/jsh.mjs | 运行 .jsh 脚本; slicc.binfmt 地图 .jsh 文件为 jsh |
pnpm add -g 也链接 npm bin (主机CLI)输入 $PNPM_HOME/bin,领先于内核 jsh 打开 PATH。没关系:在内核内,主机CLI将论据交给内核 jsh。 。 。 .
软件包需要 slicc-kernel 1.53.2 或以后(engines) (中文(简体) ). 一些特性需要更新内核:见 核心要求。 。 。 .
快开始
A 类 .jsh 文件是一个激活函数的正文. process, (中文(简体) ), console, (中文(简体) ), require, (中文(简体) ), module, (中文(简体) ), exports, (中文(简体) ), fetch, (中文(简体) ), __dirname 财务报告和审定财务报表 __filename 在范围,和顶级 await 财务报告和审定财务报表 return 工作时 内核和主机都是一样的.
#!/usr/bin/env jsh
// hello.jsh
const fs = require('fs'); // Node's fs
const { col } = require('sliccy:fmt');
const flags = process.argv.parseFlags(); // { positional, flags, subcommand, passthrough }
const res = await fetch('https://example.com/');
console.log(col('status', 8), res.status, flags.positional);
jsh hello.jsh a b # or: chmod +x hello.jsh && ./hello.jsh a b
node -e 'console.log(process.version)'
node script.mjs
#!/usr/bin/env jsh是手提弹 内核也运行#!/usr/bin/jsh,通过宾弗姆特 a.jsh无文件#!线条。 主机没有 binfmt: 运行此文件为jsh file.jsh。 。 。 .- 一个静态
import在一个.jsh是一个SyntaxError; 使用await import()。 。 。 . jsh [--version | --help] <script.jsh> [args…]。如果没有脚本,它会打印使用量并输出2;一个未知选项退出9;一个无法读取出 1 的文件.process.versions.jsh是两种语言中的 slicc-jsh 版本jsh编号.globalThis.SLICC_VERSION仅存在于 SLICC 内部.
sliccy: 模块
| 名称 | 这是什么 |
|---|---|
cli, (中文(简体) ), fmt, (中文(简体) ), time, (中文(简体) ), pool | 与 SLICC v6 相同的代码 |
color | 当 stdout 是终端时; FORCE_COLOR 财务报告和审定财务报表 NO_COLOR 改变这个 |
exec | exec(cmd) 穿过外壳, exec.spawn(argv) 无; 结果是 { stdout, stderr, exitCode } |
http | 6号 http.client结束 fetch |
skill | dir 是脚本的目录,并且 config() 读和写 .config 那边; root 是技能文件夹(一个 scripts/ 目录),与 refs 财务报告和审定财务报表 assets 在其中; token(id, params) 运行 jerk <id> get --reveal,与 -p key=value 可选条目的每个条目 params 袋( 装入skill.token('aem', { org, site })),并返回符号,或者用 err.exitCode (3: 与 jerk <id> create(中文(简体) ) |
任何其他 sliccy:<name> 是软件包 @ai-ecoverse/sliccy-<name>,则 sliccy-<name>.jsh按此顺序寻找:
- 脚本旁边(节点)
node_modules查询); - -jsh本身(如此)
npm i -g --prefix ~/.jsh sliccy-<name>与curl | sh安装); - 在 pnpm 的全球安装中
pnpm add -g页:1$PNPM_HOME,否则pnpm的默认家(/usr/local/share/pnpm在内核,~/.local/share/pnpm在Linux上,~/Library/pnpm(原始内容存档于2018-09-28). on macOS.
agent, (中文(简体) ), usb, (中文(简体) ), serial, (中文(简体) ), hid 财务报告和审定财务报表 computer 仅存在于SLICC内部;jsh这样说. sliccy:browser 实值 @ai-ecoverse/sliccy-browser 从slicc-cdp, 超过 CDP(pnpm add -g @ai-ecoverse/sliccy-browser); 内核中它驱动后方的浏览器 SLICC_CDP_URL。 。 。 .
包可以将内核的单独代码传送到: 那里, require 财务报告和审定财务报表 import 决 议 slicc 先出口条件。 主节点从不设置.
更多内容: 文件/设计/运行-外侧-外侧 (情况如何) .jsh 运行,运行 平价表 在 SLICC v6 之间,内核 jsh 和东道主之间 jsh) (中文(简体) ).
节点兼容性
目标为Node v22.22.0. 大部分运行时间都是节点自己的 lib/ 代码,带入 src/node-lib产出将对照22.22.0号实际节点检查字节(见 开发) (中文(简体) ).
本表为汇总. 每个模块后面的细节、怪事和库都有 文档/兼容性如何实现 .jsh 内核中的脚本行为,在SLICC v6中,在节点中,逐个案例,都在比较报告中 文献/比较/七-六节点。 。 。 .
| 区域 | 支助 | 差异 | 不详 |
|---|---|---|---|
node 命令 | -e, (中文(简体) ), -p, (中文(简体) ), -i, (中文(简体) ), -, (中文(简体) ), -c编号 :--check, (中文(简体) ), -r, (中文(简体) ), --import, (中文(简体) ), --input-type, (中文(简体) ), NODE_OPTIONS警告旗帜, --enable-source-maps, (中文(简体) ), --report-*, (中文(简体) ), --stack-trace-limit | --max-old-space-size 财务报告和审定财务报表 --trace-uncaught 被接受,什么都不做 | 检查和调试的旗帜, --watch,类型脚本 |
| 模块,无害环境管理 | 与节点决议、无害环境管理、, import(), (中文(简体) ), import.metaCJS ESM互通电话, require(esm), (中文(简体) ), exports编号 :imports,源地图, --preserve-symlinks | 在内核中 slicc 条件第一 | module.register编号 :registerHooks当地人, .ts 文件 |
process | 退出代码和 'exit'信号, kill, (中文(简体) ), chdir, (中文(简体) ), env, (中文(简体) ), report, (中文(简体) ), execve, (中文(简体) ), emitWarning, (中文(简体) ), loadEnvFile | exit() 1.65内核一次结束; kill(self) 从1.72; setuid 由 1. 81 创建( co.) | —— 说 |
斯特迪奥, tty | 节点流, isTTY, (中文(简体) ), setRawMode, (中文(简体) ), columns编号 :rows, (中文(简体) ), 'resize' | 信号处理器在呼叫后一分钟生效; isatty 仅知道 fds 0–2 | —— 说 |
fs | 同步 召回 承诺和流表, file: URL 并联, cp, (中文(简体) ), statfs, (中文(简体) ), watchFile (传票) stat作为节点, watch 财务报告和审定财务报表 promises.watch (内核1.125,作为节点报告Linux),, /dev (内核 1.69) | chmod 和1.86内核中的新文件模式,在此之前它们不会改变任何东西; chown, (中文(简体) ), utimes 不变; mkdir 不包括1.86; linkSync 仅在 tmpfs· ; statfs 是浏览器的存储估计; 重新命名的被监视路径结束它的手表 | glob, (中文(简体) ), openAsBlob, (中文(简体) ), readv编号 :writev |
child_process | spawn, (中文(简体) ), exec, (中文(简体) ), execFile· ; spawnSync, (中文(简体) ), execSync, (中文(简体) ), execFileSync (内核1.65) | fd stdio 订单从 1. 70; detached 从1.74; argv0 从1.76; .pid 从1.87回转 | fork; fd 2 之后的 stdio 插槽 |
net, (中文(简体) ), http, (中文(简体) ), https | TCP和HTTP/1.1服务器和客户端在内核的回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回去回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回回; 'upgrade'· ; http.Agent 子类; https 客户端; TLS 和 https 带有程序自身证书的服务器, 互通 TLS 和 ALPN( 内核 1. 149) | 没有路线, http 穿过 fetch,作为 https 总是如此:没有原始套接字、代理集、升级/CONNECT, 100 连续或拖车; 普通头; 缓冲上传; 浏览器跟踪的重定向 | 除HTTP/1.1和WebSocket外的TLS到主机内核上行链路不通(tls:从1.116内核通过运输;从1.124任何协议,一种习惯 ca 和STARTLS到上行链路主机,从1.124.13客户端证书也在那里),HTTP/2会话(http2 负载,但 connect 财务报告和审定财务报表 listen 抛出, pfx 客户端证书, Unix 套接字 |
dns | lookup (召回和承诺), resolve4编号 :resolve6 通过内核的解析器( n)/etc/hosts从内核1.113, lookupService,节点的表面和错误 | 在1.113内核之前,只有IP字元和内核本身的名称(localhost, (中文(简体) ), *.localhost,其主机名:另一个名称是 getaddrinfo ENOTFOUND | 其他查询(resolveMx, (中文(简体) ), resolveSrv,...):无名服务员 |
fetch, (中文(简体) ), WebSocket | 环球网,通过内核网络 | 循环 URL 到达此内核的服务器 : fetch 超过 jsh 自己的 HTTP 客户端( 内核的回路) ctx.fetch 仍然与undici不同, WebSocket 超过内核 ctx.websocket 从1.106.3和jsh自己的RFC 6455客户端开始(在此之前)斯克-内核# 822; 拒绝连接作为节点来自内核1.59.1 | —— 说 |
crypto | hASHE, HMAC, PBKDF2, HKDF, Scrypt, AES 和 3DES 密码, 密钥, 随机, webcrypto | —— 说 | 非对称密钥、标志/验证、DH/ECDH、RSA、质子、X509 |
zlib | 降压、降压、克兹普、生化、布罗特利和兹德减压, crc32,流和回调 | —— 说 | Brotli 和 Zstd 压缩 |
流线, Buffer | stream (可读流 4), stream/promises, (中文(简体) ), stream/web, (中文(简体) ), stream/consumers, (中文(简体) ), Buffer, (中文(简体) ), string_decoder | Buffer.allocUnsafe 零填充; poolSize 为 0 | —— 说 |
events | 节点自己的 lib/events.js,每个发射器 | getEventListeners 不采取平台 EventTarget编号 | —— 说 |
readline,应答 | readline, (中文(简体) ), readline/promises节点的应答, repl.start() | 没有您输入的预览, 没有 ^C 退出运行中的循环 | —— 说 |
util, (中文(简体) ), console, (中文(简体) ), os, (中文(简体) ), path, (中文(简体) ), url | 节点自己的 lib 文件 | os 报告内核(仅循环, Linux 常数) | —— 说 |
vm | 脚本,背景, compileFunction,动态 import() | 一个领域:上下文不是一个单独的领域 | vm.Module, (中文(简体) ), timeout, (中文(简体) ), breakOnSigint, (中文(简体) ), measureMemory |
async_hooks, (中文(简体) ), domain, (中文(简体) ), perf_hooks, (中文(简体) ), v8,, , , , , , , , | AsyncResource, (中文(简体) ), AsyncLocalStorage, (中文(简体) ), domain, (中文(简体) ), diagnostics_channel, (中文(简体) ), perf_hooks, (中文(简体) ), v8 统计 | createHook 钩子从不运行; 域不遵循诺言; a AsyncLocalStorage 商店无法活下来 await (然后不见了,再也不跑了) | v8.serialize,堆积快照 |
| 工人和其他工人 | worker_threads 作为主线, BroadcastChannel 在一个程序内(来自1.92内核的全局) | new Worker 掷出 ERR_NOT_SUPPORTED | cluster.fork, (中文(简体) ), dgram, (中文(简体) ), inspector.open (没有检查员), test, (中文(简体) ), sqlite, (中文(简体) ), wasi |
核心要求
软件包需要 slicc-kernel 1.147.10 或后来: engines.slicc-kernel 是内核CI测试 @ai-ecoverse/slicc-kernel 德从相从,而相并相取. jsh对更古老的内核没有后退.
开发
npm ci
npm run build # esbuild: dist/node.mjs, dist/jsh.mjs, dist/vendor/, dist/host/
npm run lint
内核负载 abi: "js" 来自 data: URL,相对进口不能解决的地方. 因此每个程序条目被捆绑为一个文件.
| 命令 | 它包含什么 |
|---|---|
npm test | 每个文件在 test/integration/CI运行; pretest 在 config.chrome |
npm run test:golden | 每个固定在 test/golden/fixtures/ 22.22.0和开通 node 在 slic-内核 节点条目中: stdout, stderr 和状态,字节的字节(golden-1 改为 golden-4.test.mjs 管理每个季度) |
npm run test:jsh | 每个 .jsh 实例 test/jsh/fixtures/ 关于主机 jsh (基线)和内核 jsh (单位:千美元)jsh-parity.test.mjs(中文(简体) ) |
输入的文件 test/integration/ 为: node:test 块状内核节点条目上的套件: 子进程, pnpm add -g、无害环境管理、HTTP、WebSocket、退出和信号、TLS上的PostgreSQL(tls-sealed-postgres,通过 embedded-postgres) (中文(简体) ). 一些人用自己的绳子包裹:
differential.test.mjs: 情况test/integration/cert/,主节点22对shim, 内核从平原装入dist路径;node-parallel.test.mjs:一分节点 v22.22.0自己的test/parallel带节点test/common; 每一个文件都通过, 但其列出的已知漏洞;browser-*.test.mjs: Chromium 标签中的内核,有slic-jsh和@ai-ecoverse/sliccy-browser安装于pnpm add -g· ;sliccy:browser与东道主相比jsh。 。 。 .JSH_TARBALL=/path/to.tgz财务报告和审定财务报表SLICCY_BROWSER(一个版本或一个本地的柏球) 给一个发布。 Chrome 运行无头,除非CI设置;SLICC_HEADLESS=1或者说0覆盖;install.test.mjs数字 :install.sh丢弃中HOMEs,取自已公布的套件(需要卷曲、节点22+、蟒蛇3和活塞);package.test.mjs: 沥青球npm pack取出单的复制件 :NOTICE,它的档案,没有prepare或者说prepack,而全局安装运行#!/usr/bin/env jsh剧本.
运行一个 node --test --test-timeout=900000 --test-global-setup=node_modules/@ai-ecoverse/slicc-shared-web/harness/global.mjs test/integration/<file>.test.mjs。 。 。 .
基线总是在22.22.0节点上运行: $NODE22 如果它命名该版本, 否则 npx -y [email protected] 取来一次. 记录基线:
npm run golden:record # test/golden/fixtures/, on Node 22.22.0
npm run jsh:record # test/jsh/fixtures/, with the host jsh
Fixtures 不发布:软件包的 files 仅列出 dist, (中文(简体) ), README.md, (中文(简体) ), LICENSE 财务报告和审定财务报表 NOTICE.CI还检查 NOTICE 列出每个捆绑的包件,而且柏油丸没有 test/ 或者说 scripts/。 。 。 .
设计和里程碑: 块状内核# 68。利用后面的比较 文献/比较/七-六节点 进入 测试/比较/。 。 。 .
记忆. 每个测试脚本运行 --max-old-space-size=512对于重跑,请将命令包入 scripts/mem-guard.sh它每0.5秒对RSS进行取样,当一个过程通过2,000,000KB(~1.9 GiB)或整棵树通过3,000,000KB(~2.9 GiB)时会杀死命令的流程树(出137). 一次运行一个铬:
scripts/mem-guard.sh npm test
lockf -k /tmp/slicc-heavy.lock scripts/mem-guard.sh node --test test/integration/browser-corpus.test.mjs
CI和释放
.github/workflows/ci.yml 是一个叫 塑料-共享网络管道,在节点26上(内核) engines;基线带来自己的22.22.0节点:
-
拉动请求 :
npm run lint(与shellcheck打开install.sh,则npm test与文档test/integration/然后是克勞德和克勞德克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克.ci / integration财务报告和审定财务报表ci / review需要的检查; -
合并队列 : 又在落地的树上用花粉做测试;
-
推动
main数字 : 语义释放 从传统承诺中取出版本,自上次v*通过 npm 信任的出版来源,标记并发布到 npmci.yml。 。 。 . -
feat:(一) 给予少量释放(在出现突破性变化之前,0.x保持0.x); -
fix:或者说perf:给予补丁释放; -
其他类型(
docs:, (中文(简体) ),chore:, (中文(简体) ),ci:, (中文(简体) ),test:,...) 释放什么.
version 内 package.json 留下来 0.0.0;语义-放出设置. prepack 构建然后运行 scripts/strip-own-scripts.mjs,删除 prepare 财务报告和审定财务报表 prepack 从 package.json 在 CI (或为 SLICC_JSH_STRIP_SCRIPTS=1)npm包之前,所以所发布的包没有. 当地人 npm pack 留着吧 npm 信托 ci.yml (单位:千美元)fledgling 内 package.json: npm run trust 设置这个, npm run trust:dry 显示它会做什么.