nodejs wymaga wewnątrz pliku TypeScript

Zastanawiam się jak załadować zwykły moduł nodejs z katalogu node_modules z wewnątrz klasy TypeScript.

Kiedy próbuję skompilować .ts plik zawierający:

var sampleModule = require('modulename');

Kompilator mówi mi, że nie mogę używać require w tym zakresie. (linia ta znajduje się na początku pliku).

Czy Jest jakiś sposób na załadowanie i użycie modułów z node_modules wewnątrz TypeScript klasy?

Author: ymn, 2012-10-05

4 answers

Maszynopis zawsze będzie narzekał, gdy nie będzie w stanie znaleźć symbolu. Kompilator zawiera zestaw domyślnych definicji dla window, document i takie określone w pliku o nazwie lib.d.ts. Jeśli wykonam grep dla require w tym pliku nie znajdę definicji funkcji require. W związku z tym musimy sami powiedzieć kompilatorowi, że ta funkcja będzie istniała w czasie wykonywania przy użyciu składni declare:

declare function require(name:string);
var sampleModule = require('modulename');

W moim systemie, to kompiluje się dobrze.

 79
Author: Valentin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-05 08:26:40

Prawidłowa składnia to:

import sampleModule = require('modulename');

Lub

import * as sampleModule from 'modulename';

Następnie skompiluj swój maszynopis za pomocą --module commonjs.

Jeśli pakiet nie zawiera pliku index.d.ts, a jego package.json nie ma właściwości "typings", tsc będzie szczekał, że nie wie, do czego odnosi się 'modulename'. W tym celu należy znaleźć .d.ts plik http://definitelytyped.org/ , albo sam napisz.

Jeśli piszesz kod dla Node.js będziesz też chciał plik node.d.ts z http://definitelytyped.org/.

 35
Author: Jesse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-05 01:43:14

Najlepszym rozwiązaniem jest uzyskanie kopii definicji typu węzła. Rozwiąże to wszystkie problemy związane z zależnościami, nie tylko require(). Wcześniej robiono to przy użyciu pakietów takich jak typings, ale jak wspomniał Mike Chamberlain, typowanie jest przestarzałe. Współczesny sposób robi to tak:

npm install --save-dev @types/node

Nie tylko poprawi błąd kompilatora, ale także doda definicje interfejsu API węzła do twojego IDE.

 26
Author: rharriso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-28 09:36:05

Użyj typowań, aby uzyskać dostęp do funkcji węzła z TypeScript:

typings install env~node --global

Jeśli nie masz wpisów zainstaluj:

npm install typings --global
 4
Author: WhereDatApp.com,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-29 09:42:56