原本归类于 microsoft/vscode#87834 。
搜索词
shebang, npx, type acquisition
建议
当编写将使用 npx
调用的 JS 脚本时,如果可以从 npx
将要调用的包中推断出输入信息,那就太好了。
用例
我目前正在构建一个库,主要用例是作为可执行脚本进行消费,以 npx
作为 shebang 命令(这允许在无需预先安装的情况下全局执行)。由于所有需要的功能都自动注入到全局范围内,因此无需外部引用。这是为了便于编写和移植。
在编写这些脚本时,希望利用由 npx
调用的库提供的 typings。这里的假设是工具链会在 shebang 中检测到 npx
的调用,并加载适当的 typings(如果库之前已安装,则为本地,否则为下载)。
示例
#!/usr/bin/npx @arcsine/nodesh
stdin
.sort()
.unique()
.stdout
在上面的示例中, stdin
是一个全局变量,应通过智能感知获取,它公开的方法应该可以搜索(附带相关文档)。
考虑因素
另一种想法是利用三斜杠指令,但这受到限制,因为它不能:
- 指向全局 node 模块(没有绝对路径)
- 引用 npx 加载的临时库
检查清单
我的建议满足以下准则:
- 这不会对现有的 TypeScript/JavaScript 代码造成破坏性更改
- 这不会改变现有 JavaScript 代码的运行时行为
- 这可以在不根据表达式的类型生成不同的 JS 的情况下实现
- 这不是运行时特性(例如库功能、JavaScript 输出非 ECMAScript 语法等)
- 这个特性将与 TypeScript's Design Goals 的其他部分保持一致。
3条答案
按热度按时间nxowjjhe1#
point to global node modules (without an absolute path)
Maybe something better would be to link a local install to your global installation and then writing the following?
oxalkeyp2#
我希望有易于共享的脚本,以及编写/编辑时的低摩擦。考虑到这一点,目标是根本不需要预先安装。主要驱动力是一个利基用例(尽管我认为它非常有用)。
我知道这可能与项目的目标不一致。实际上,我更倾向于构建一个
vscode
插件来增强文件的可访问类型,但据我所知,那并不是一件容易的事情。此外,根据问题描述,能够在全局
node_modules
中引用类型的能力也可以满足需求,但目前似乎也超出了范围。mrfwxfqh3#
@DanielRosenwasser 我最终制作了一个插件(https://marketplace.visualstudio.com/items?itemName=arcsine.npx-scripts),但它并不完全美观。尽管如此,这应该足够了。不过,感觉这个功能更适合vscode项目(考虑到它的行为)。我暂时会保留这个问题,但如果你有不同的看法,可以随时关闭。