module.exports géppel

szavazat
48

nem valaki tudja, hogyan kell csinálni egy module.exports?

Próbáltam néhány különböző módon kiöntött

export class Greeter {}

amely összeállítja a

exports.Greeter = Greeter;

De amit igazán akar ez:

exports = Greeter;

Annak érdekében, hogy tudom használni, mint ez:

import Greeter = module(Greeter);
var greeter = new Greeter();

és nem

import Greeter = module(Greeter);
var greeter = new Greeter.Greeter();

Ez lehetséges géppel?

A kérdést 02/10/2012 19:40
a forrás felhasználó
Más nyelveken...                            


6 válasz

szavazat
25

Tudod export egyetlen osztályba géppel, mint ez:

class Person {

  private firstName: string;
  private lastName: string;

  constructor(firstName: string, lastName: string) {
    this.firstName = firstName;
    this.lastName = lastName;
  }

  public getFullName() {
    return `${this.firstName} ${this.lastName}`;
  }
}

export = Person;

És itt van, hogyan fog használni:

var Person = require('./dist/commonjs/Person.js');

var homer = new Person('Homer', 'Simpson');
var name = homer.getFullName();

console.log(name); // Homer Simpson

Hogy teljes legyen, itt van a tsconfig.json (Én a géppel v2.0.3):

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist/commonjs",
    "rootDir": "src/ts",
    "target": "es5"
  },
  "exclude": [
    "dist",
    "node_modules"
  ]
}
Válaszolt 01/11/2016 09:48
a forrás felhasználó

szavazat
19

Ez most már végre, és kész géppel 0,9 :)

Válaszolt 28/06/2013 12:42
a forrás felhasználó

szavazat
11

Jelenleg nem. Ez a korlátozás géppel, és a korlátozás a jelenlegi szalma-férfi modul specifikáció által mérlegelt ECMA, amely géppel van mintázva után.

Ez lenne egy nagy javaslatot tenni a CodePlex.

Válaszolt 02/10/2012 21:20
a forrás felhasználó

szavazat
7

Szóval azt hiszem, találtam egy megoldás. Csak tekerje a kulcsszó „modul” zárójelben a .ts file:

declare var module: any;
(module).exports = MyClass;

A generált javascript fájl lesz pontosan ugyanaz:

(module).exports = MyClass;

Jegyezzük meg, jobb, mint nyilvánította var modul magát, le a node.d.ts definíciós fájl és dugják ugyanabban a könyvtárban, mint a géppel fájlt. Itt egy teljes mintát kifejezett node.js routing fájlt, amely azt feltételezi, node.d.ts van ugyanabban a könyvtárban:

/// <reference path="node.d.ts" />
var SheetController = function () {
    this.view = function (req, res) {
        res.render('view-sheet');
    };
};
(module).exports = SheetController;

Tudok majd az Új egy SheetController és (az expressz) rendelheti nézet mód:

var sheetController = new SheetController();
app.get('/sheet/view', sheetController.view);

Gondolom bármely kulcsszó lehet kiléptetni ezt a mintát:

declare var reservedkeyword: any;
(reservedkeyword).anything = something;
Válaszolt 31/12/2012 07:09
a forrás felhasználó

szavazat
2

Ez csúnya és hacky, de akkor is csinálni:

class Greeter {}
declare var exports:any;
exports = Greeter;

Melyik fordítja át:

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;
Válaszolt 05/10/2012 19:42
a forrás felhasználó

szavazat
-1

próbáld ezt boilerplate app sablon https://github.com/ntheile/TypeScript-Backbone-Require-Boilerplate

Válaszolt 09/10/2012 03:58
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more