Błąd pisania TS2304: nie można znaleźć nazwy "wymagaj"

Próbuję dostać mój pierwszy Typopis i DefinitelyTyped Node.aplikacja js uruchomiona i napotkana na pewne błędy.

Otrzymuję błąd "TS2304: Cannot find name 'require '" podczas próby transpilowania prostego węzła maszynopisu.strona js. Przeczytałem kilka innych wystąpień tego błędu na przepełnienie stosu i nie sądzę, że mam podobne problemy. Uruchamiam w powłoce polecenie:

tsc movie.server.model.ts.

Zawartość tego pliku są:

'use strict';

/// <reference path="typings/tsd.d.ts" />

/*    movie.server.model.ts - definition of movie schema */

var mongoose = require('mongoose'),
Schema = mongoose.Schema;

var foo = 'test';

Błąd jest wyrzucany na linię var mongoose=require('mongoose').

Zawartość typowań / tsd.plik d. ts to:

/// <reference path="node/node.d.ts" />
/// <reference path="requirejs/require.d.ts" />

The .d. ts odniesienia do pliku zostały umieszczone w odpowiednich folderach i dodane do typings / tsd.d. ts przez polecenia:

tsd install node --save
tsd install require --save

The produced .plik js wydaje się działać dobrze, więc mogę zignorować błąd. Ale byłbym wdzięczny wiedząc, dlaczego ten błąd występuje i co robię źle.

Author: Peter Mortensen, 2015-07-02

23 answers

Szybko i brudno

Jeśli masz tylko jeden plik używając require, lub robisz to dla celów demonstracyjnych, możesz zdefiniować require na górze pliku maszynopisu.

declare var require: any

Maszynopis 2.x

Jeśli używasz maszynopisu 2.x nie musisz już instalować wpisów ani na pewno wpisów. Wystarczy zainstalować następujący pakiet.

npm install @types/node --save-dev

Przyszłość plików deklaracji(6/15/2016)

Narzędzia takie jak typowanie i tsd będą nadal działać, i będziemy pracować wraz z tymi społecznościami, aby zapewnić płynne przejście.

Zweryfikuj lub Edytuj swój src / tsconfig.app.json tak, że zawiera:

...
"types": [ "node" ],
"typeRoots": [ "../node_modules/@types" ]
...

Upewnij się, że plik znajduje się w folderze src, a nie w folderze aplikacji głównej.

Domyślnie, każdy pakiet pod @types jest już zawarty w Twojej kompilacji , chyba że podałeś jedną z tych opcji. Czytaj więcej

Maszynopis 1.x

Używając typowań (DefinitelyTyped ' s replacement) możesz określić definicję bezpośrednio z repozytorium GitHub.

Typowanie instalacji

npm install typings -g --save-dev

Zainstaluj definicję typu requireJS z DefinitelyType repo

typings install dt~node --save --global

Webpack

Jeśli używasz Webpack jako narzędzia do budowania, możesz dołączyć typy Webpack.

npm install --save-dev @types/webpack-env

Zaktualizuj swoje tsconfig.json z następującym Pod compilerOptions:

"types": [
      "webpack-env"
    ]

Pozwala to na wykonywanie require.ensure i innych specyficznych dla Webpacka funkcje.

Kątowe CLI

Z CLI możesz wykonać krok Webpack powyżej i dodać blok "typy" do swojego tsconfig.app.json.

Alternatywnie możesz użyć preinstalowanych typów node. Pamiętaj, że będzie to zawierać dodatkowe typy kodu po stronie klienta, które nie są naprawdę dostępne.

"compilerOptions": {
    // other options
    "types": [
      "node"
    ]
  }
 801
Author: cgatian,
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
2020-10-12 13:21:02

Dla Maszynopisu 2.x , są teraz dwa kroki:

  1. Zainstalować pakiet, który definiuje require. Na przykład:

    npm install @types/node --save-dev
    
  2. Powiedz Typescriptowi, aby uwzględnił go globalnie w tsconfig.json:

    {
        "compilerOptions": {
            "types": ["node"]
        }
    }
    

Drugi krok jest ważny tylko wtedy, gdy potrzebujesz dostępu do globalnie dostępnych funkcji, takich jak require. W przypadku większości pakietów należy użyć wzoru import package from 'package'. Nie ma potrzeby dołączania każdego pakietu do tsconfig.tablica typów json powyżej.

 113
Author: Jordan,
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-09-09 00:57:54

Możesz

declare var require: any

Lub, dla bardziej kompleksowego wsparcia, użyj definitelytyped ' s require.d. ts

Również zamiast var mongoose = require('mongoose'), możesz spróbować następujących

import mongoose from 'mongoose' // or
import mongoose = require('mongoose')
 73
Author: ᆼᆺᆼ,
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-02-18 22:50:49

W moim przypadku był to bardzo głupi problem, gdzie src/tsconfig.app.json było nadpisywanie ustawienia tsconfig.json.

Więc miałem to w tsconfig.json:

    "types": [
      "node"
    ]

I ten w src/tsconfig.app.json:

    "types": []

Mam nadzieję, że ktoś uzna to za pomocne, ponieważ ten błąd powodował mi siwe włosy.

 20
Author: h22a,
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
2019-09-15 17:57:15

Ta odpowiedź odnosi się do nowoczesnych ustawień (TypeScript 2.x, Webpack > 2.x)

You don ' t need to install @types/node (which is all of Node).js typuje i jest nieistotny dla kodu front-end, w rzeczywistości komplikuje rzeczy takie jak setTimout różne wartości zwracane itp..

You do need to install @types/webpack-env

npm i -D @types/webpack-env

Który daje podpisy runtime, które posiada Webpack (w tym require, require.ensure, itd.)

Również zrobić pewnie, że Twój tsconfig.plik json nie ma ustawionej tablicy' types' ->, która spowoduje, że pobierze wszystkie definicje typów w folderze node_modules/@types.

Jeśli chcesz ograniczyć wyszukiwanie typów, możesz ustawić właściwość typeRoot na node_modules / @types.

 14
Author: Nadav SInai,
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
2019-10-21 23:38:39

Zamiast:

'use strict';

/// <reference path="typings/tsd.d.ts" />

Try:

/// <reference path="typings/tsd.d.ts" />

'use strict';

Tzn. pierwsza ścieżka odniesienia.

 10
Author: Hurricane,
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-01-14 21:18:46

W celach informacyjnych używam Angular 7.1.4, TypeScript 3.1.6 , a jedyne co muszę zrobić to dodać ten wiersz w tsconfig.json:

    "types": ["node"], // within compilerOptions
 8
Author: Hearen,
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
2019-10-21 23:43:14

Znalazłem rozwiązanie polegające na użyciu polecenia TSD:

tsd install node --save

, który dodaje/aktualizuje plik typings/tsd.d.ts i ten plik zawiera wszystkie definicje typów, które są wymagane dla aplikacji węzła.

Na górze mojego pliku umieszczam odniesienie do tsd.d.ts w następujący sposób:

/// <reference path="../typings/tsd.d.ts" />

Wymóg jest zdefiniowany w ten sposób od stycznia 2016 roku:

declare var require: NodeRequire;

interface NodeModule {
    exports: any;
    require: NodeRequireFunction;
    id: string;
    filename: string;
    loaded: boolean;
    parent: any;
    children: any[];
}
 7
Author: AlexStack,
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
2017-07-13 20:32:00

Wziąłem odpowiedź Petera Vargi , aby dodać declare var require: any; i przekształciłem ją w ogólne rozwiązanie, które działa dla wszystkich .pliki ts generowane przy użyciu preprocess-loader :

  1. Zainstaluj preprocessor-loader:

    npm install preprocessor-loader
    
  2. Dodaj loader do swojego webpacka.config.js (używam ts-loader do przetwarzania źródeł maszynopisu):

    module: {
        loaders: [{
            test: /\.tsx?$/,
            loader: 'ts-loader!preprocessor?file&config=preprocess-ts.json'
        }]
    }
  1. Dodaj konfigurację, która doda obejście do każdego źródło:
{
    "line": false,
    "file": true,
    "callbacks": [{
        "fileName": "all",
        "scope": "source",
        "callback": "(function shimRequire(source, fileName) { return 'declare var require: any;' + source; })"
    }]
}

Możesz dodać bardziej wytrzymałe wymagają.d. ts w ten sam sposób, ale declare var require: any; wystarczyło w mojej sytuacji.

Uwaga, jest błąd w preprocesorze 1.0.5, który odcina ostatnią linię, więc upewnij się, że na końcu masz dodatkową przestrzeń linii i wszystko będzie dobrze.

 5
Author: Benny Bottema,
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
2017-05-23 12:26:32

Dla mnie jest to rozwiązane przez dodanie typów do opcji kompilatora kątowego.

"angularCompilerOptions": {
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"types": [ "node" ]
}
 3
Author: Farida Anjum,
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
2020-03-20 05:57:00

Ja również zmagałem się z tym problemem. Wierzę, że to działa dla wszystkich release candidates aka RC , ale nie testowałem go. For @ angular rc.2 to działa dobrze.

  1. Dodaj core-js jako zależność npm w package.json
  2. run typings install core-js --save
  3. usuń wszystkie "es6-shim" występujące w twoim package.json. Już jej nie potrzebujesz.
Zdrówko!
 2
Author: kucherenkovova,
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-06-21 12:26:31

Upewnij się, że masz zainstalowany npm i @types/node

 2
Author: Rupesh Kumar Tiwari,
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-24 20:41:45

Kiedyś brakowało "jasmine" z tsconfig.json może spowodować ten błąd. (maszynopis 2.X)

Więc dodaj

"types": [
  "node",
  "jasmine"
]

Do twojego tsconfig.json Pliku.

 2
Author: skaveesh,
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
2019-10-21 23:36:25

Elektron + kątowy 2/4 addycja:

Poza dodaniem typu 'node' do ts.config różnych plików, co w końcu zadziałało dla mnie było dodanie obok typings.d.ts Plik:

declare var window: Window;
interface Window {
  process: any;
  require: any;
}

Zauważ, że mój przypadek rozwija się z elektronem + kątowym 2/4. Potrzebowałem wymagania w oknie global.

 2
Author: mihaa123,
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
2019-10-21 23:38:12

Mam jeszcze jedną odpowiedź, która opiera się na wszystkich poprzednich, które opisują npm install @types/node i włączają node w tsconfig.json / compilerOptions / types.

W moim przypadku mam bazę tsConfig.json i osobną w aplikacji kątowej, która rozszerza tę:

{
    "extends": "../../tsconfig.json",
    "compilerOptions": {
        "outDir": "../out-tsc/app",
        "types": []
 },

Moim problemem był pusty types w tym tsconfi.app.json - zatacza ten w podstawowej konfiguracji.

 2
Author: HankCa,
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
2019-10-21 23:44:27
import * as mongoose from 'mongoose'
 2
Author: basquith16,
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
2020-10-13 10:13:12
  1. Czy określiłeś, jakiego modułu użyć do transpilowania kodu?
    tsc --target es5 --module commonjs script.ts
    Musisz to zrobić, aby transpiler wiedział, że kompilujesz kod NodeJS. Docs .

  2. Musisz również zainstalować definicje mongoose
    tsd install mongoose --save

  3. Nie używaj var do deklarowania zmiennych (chyba że jest to konieczne, co jest bardzo rzadkim przypadkiem), zamiast tego używaj let. dowiedz się więcej na ten temat

 1
Author: Ayman Nedjmeddine,
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-07-19 08:59:57

Oprócz odpowiedzi cgatiana, dla TypeScript 1.x

Jeśli nadal widzisz błędy, prosimy o podanie indeksu.d. ts w opcjach kompilatora.

"files": [
    "typings/index.d.ts"
]
 1
Author: Vidish Datta,
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
2017-01-31 00:20:53

Nie mogłem uzyskać błędu "Wymagaj", aby odejść za pomocą żadnej z powyższych sztuczek.

Ale dowiedziałem się, że problem polegał na tym, że moje narzędzia do maszynopisu dla Visual Studio gdzie stara wersja (1.8.6.0) i najnowsza wersja na dzień dzisiejszy jest (2.0.6.0).

Możesz pobrać najnowszą wersję narzędzi z:

maszynopis dla Visual Studio 2015

 1
Author: Thomas,
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
2019-10-21 23:34:30

Jeśli możesz skompilować kod, ale Visual Studio 2015 oznacza funkcje "require" jako błędy z tekstem błędu nie może znaleźć nazwy "require" lub nie może rozwiązać symbolu "require" , Zaktualizuj TypeScript dla Visual Studio 2015 do najnowszej wersji (w tej chwili 2.1.5) i zaktualizuj ReSharper (jeśli go używasz) do co najmniej wersji 2016.3.2.

Miałem ten irytujący problem przez jakiś czas i nie mogłem znaleźć rozwiązania, ale w końcu rozwiązałem go w ten sposób.

 1
Author: Mike Eshva,
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
2019-10-21 23:35:33

Dodać w tsconfig.json:

"typeRoots": [ "../node_modules/@types" ]
 1
Author: Darshan Ballal,
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
2019-10-21 23:36:35

Jako zatwierdzona odpowiedź nie wspominała o możliwości stworzenia własnego pliku typowań i zaimportowania go tam, dodam go poniżej.

Zakładając, że używasz npm jako menedżera pakietów, możesz:

npm i @types/node --save-dev

Następnie w pliku tsconfig:

Tsconfig.json

"include": ["typings.d.ts"],

Następnie utwórz plik typowania:

Typowania.d. ts

import 'node/globals'

Zrobione, błędów nie ma, miłego pisania:)

 1
Author: Matt,
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
2020-09-20 14:20:53

Jeśli masz do czynienia z tym problemem w .plik ts, który jest tam tylko po to, aby podać jakieś stałe wartości, wtedy możesz po prostu

Zmień nazwę swojego .plik ts do .plik js

I błąd się nie powtórzy.

 -3
Author: Aavgeen singh,
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
2019-10-21 23:42:32