Skip to content

fix: 构建产物添加 shebang - #22

Open
JiahaoXu10Arthur wants to merge 1 commit into
justorez:mainfrom
JiahaoXu10Arthur:fix/shebang
Open

fix: 构建产物添加 shebang#22
JiahaoXu10Arthur wants to merge 1 commit into
justorez:mainfrom
JiahaoXu10Arthur:fix/shebang

Conversation

@JiahaoXu10Arthur

Copy link
Copy Markdown

问题

npm 生成命令启动脚本(cmd-shim)时,靠读取目标文件的 shebang 判断该用哪个解释器。dist/index.js 没有 shebang,生成出来的 pica-clipica-cli.cmdpica-cli.ps1 里就完全没有 node,而是直接执行 .js 路径本身。

Windows 会把它交给 .js 的关联程序处理 —— 默认是 WScript.exe(Windows 脚本宿主)。WScript 解析不了 ESM 的 import,进程立刻结束。

表现

npm i -g pica-cli 之后运行 pica-cli立刻返回提示符,没有任何输出,看起来像“跑了但什么都没做”,很容易误判成 PATH 或权限问题。所有从 npm 全局安装的 Windows 用户都会遇到。

两种 shim 的区别:

# 缺 shebang 时生成的(错误)
& "$basedir/node_modules/pica-cli/dist/index.js" $args

# 加上 shebang 后生成的(正确)
& "$basedir/node$exe" "$basedir/node_modules/pica-cli/dist/index.js" $args

改动

rollup 的 output 加一行 banner: '#!/usr/bin/env node'

影响范围

只动 rollup.config.js,产物首行多一句 shebang。Linux / macOS 本来就靠 shebang 执行,不受影响,运行时行为无变化。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant