TypeScript Support Type Acquisition From Npx Shebang

syqv5f0l  于 9个月前  发布在  TypeScript
关注(0)|答案(3)|浏览(160)

原本归类于 microsoft/vscode#87834

搜索词

shebang, npx, type acquisition

建议

当编写将使用 npx 调用的 JS 脚本时,如果可以从 npx 将要调用的包中推断出输入信息,那就太好了。

用例

我目前正在构建一个库,主要用例是作为可执行脚本进行消费,以 npx 作为 shebang 命令(这允许在无需预先安装的情况下全局执行)。由于所有需要的功能都自动注入到全局范围内,因此无需外部引用。这是为了便于编写和移植。
在编写这些脚本时,希望利用由 npx 调用的库提供的 typings。这里的假设是工具链会在 shebang 中检测到 npx 的调用,并加载适当的 typings(如果库之前已安装,则为本地,否则为下载)。

示例

  1. #!/usr/bin/npx @arcsine/nodesh
  2. stdin
  3. .sort()
  4. .unique()
  5. .stdout

在上面的示例中, stdin 是一个全局变量,应通过智能感知获取,它公开的方法应该可以搜索(附带相关文档)。

考虑因素

另一种想法是利用三斜杠指令,但这受到限制,因为它不能:

  • 指向全局 node 模块(没有绝对路径)
  • 引用 npx 加载的临时库

检查清单

我的建议满足以下准则:

  • 这不会对现有的 TypeScript/JavaScript 代码造成破坏性更改
  • 这不会改变现有 JavaScript 代码的运行时行为
  • 这可以在不根据表达式的类型生成不同的 JS 的情况下实现
  • 这不是运行时特性(例如库功能、JavaScript 输出非 ECMAScript 语法等)
  • 这个特性将与 TypeScript's Design Goals 的其他部分保持一致。
nxowjjhe

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?

  1. require("@arcsine/nodesh");
oxalkeyp

oxalkeyp2#

我希望有易于共享的脚本,以及编写/编辑时的低摩擦。考虑到这一点,目标是根本不需要预先安装。主要驱动力是一个利基用例(尽管我认为它非常有用)。

我知道这可能与项目的目标不一致。实际上,我更倾向于构建一个 vscode 插件来增强文件的可访问类型,但据我所知,那并不是一件容易的事情。

此外,根据问题描述,能够在全局 node_modules 中引用类型的能力也可以满足需求,但目前似乎也超出了范围。

mrfwxfqh

mrfwxfqh3#

@DanielRosenwasser 我最终制作了一个插件(https://marketplace.visualstudio.com/items?itemName=arcsine.npx-scripts),但它并不完全美观。尽管如此,这应该足够了。不过,感觉这个功能更适合vscode项目(考虑到它的行为)。我暂时会保留这个问题,但如果你有不同的看法,可以随时关闭。

相关问题