node.js - Skriva ett Node-modul i TypeScript för användning i både TS- och JS-projekt
Jag har ett Express-middlewareprojekt skrivet i TypeScript. Jag skulle vilja använda det i både JS- och TS-baserade Node-projekt.
Jag har problem med att konfigurera mina projekt för att säkerställa att
- det överordnade projektet producerar moduler som kan användas av Node
- min modul kan användas i JS-projekt i formatet
myGreatFunction=require('myGreatFunction')/typeof=function - min modul kan användas i formatet
import myGreatFunction från 'myGreatFunction'/typeof=function - Min modul exporteras varken som ett objekt med en .default när det inte förväntas, eller, tvärtom, exporteras inte så när det faktiskt förväntas.
Det känns som att jag bara kan uppnå några av dessa mål men inte andra.
Vad är den korrekta besvärjelsen av TSConfig-egenskaper (uppström & nedström) för att säkerställa att detta är fallet?
I slutändan kom jag fram till en kompromiss - se nedan.
Svar #1
Bibliotek
tsconfig.json:
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"noEmitHelpers": true
},
}
module.ts:
export class MyClass {
static Version: string = "1.0";
}
När vi kompilerar denna modul kommer vi att få:
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var MyClass = /** @class */ (function () {
function MyClass() {
}
MyClass.Version = "1.0";
return MyClass;
}());
exports.MyClass = MyClass;
TS-klient
client.ts:
import {MyClass} from "./../src/module";
console.log(MyClass.Version);
kompilera och kör node client.js - se "1.0"
JS-klient
Bara ta samma kod från kompilerad TS-klient :
var module_1 = require("./../src/module");
console.log(module_1.MyClass.Version);
samma resultat uppenbarligen
Svar #2
Att använda en TypeScript-fil i TypeScript.
Assuming B.ts is the typescript file that you want to use in A.ts, then: import { B's module that are exported } from 'path/to/B'; // notice there is no extension mentioned here. Also B must have a export module in it.Att använda en ts-fil i en js-fil.
B.ts = file which you want to use in your main file. A.js = your main file. In your A.js: var external = require('path/to/B'); // notice there is no extension mentioned here.
