Создать модуль npm TypeScript, который является одновременно утилитой командной строки и методами экспорта - это возможно? - PullRequest
0 голосов
/ 24 сентября 2019

Я хотел бы создать модуль nScript TypeScript, который можно использовать как в качестве утилиты командной строки, так и в качестве методов экспорта для использования в других модулях.

Проблема состоит в том, что служебный модуль командной строки должен содержать узел shebang (#! / usr / bin / env node) в первой строке index.ts.Когда такой модуль импортируется и на него ссылаются в другом модуле, код начинает выполняться до фактического вызова любого экспортированного метода.Пример:

#!/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;
}

1 Ответ

1 голос
/ 24 сентября 2019

Вы можете поместить исходный код в другой файл и разрешить импорт из этого файла.Например:

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 (при условии, что вы компилируете TypeScript для распространения) через import { superCalc } from "your-package".Сюда не входят примеры также для экспорта методов, но для больше подробностей о создании CLI с TypeScript .

...