1

我想创建 npm TypeScript 模块,它既可以用作命令行实用程序,也可以用作其他模块的导出方法。

问题是命令行实用程序模块需要在 index.ts 的第一行包含节点 shebang(#!/usr/bin/env 节点)。当此类模块被导入并在另一个模块中引用时,代码在实际调用任何导出的方法之前开始执行。例子:

#!/usr/bin/env node

const arg1: number = parseFloat(process.argv[2]);
const arg2: number = parseFloat(process.argv[3]);

console.log (superCalc(arg1, arg2)); // this gets called when superCalc() is referenced in another module

export function superCalc(arg1: number, arg2: number) : number {
    return arg1 + arg2;
}
4

1 回答 1

4

您可以将源代码放在不同的文件中,并允许从该文件导入。例如:

src/index.ts

export function superCalc(arg1: number, arg2: number) : number {
    return arg1 + arg2;
}

src/cli.ts

#!/usr/bin/env node

const arg1: number = parseFloat(process.argv[2]);
const arg2: number = parseFloat(process.argv[3]);

console.log (superCalc(arg1, arg2));

package.json

{
  // Additional settings
  "bin": { "your-script": "./dist/cli.js" },
  "main": "dist/index.js",
}

现在用户可以执行 CLI ( npm run your-script),也可以index.js通过import { superCalc } from "your-package". 这不包括导出方法的示例,但有关使用 TypeScript 创建 CLI 的更多详细信息

于 2019-09-23T23:36:04.297 回答