node.js - сервера - ошибка при получении машинописного текста TS2304: не удается найти имя 'require'




node js запуск сервера (14)

Я пытаюсь запустить и запустить мое первое приложение для узлов Typescript и DefiniteTyped и столкнуться с некоторыми ошибками.

Я получаю сообщение об ошибке «TS2304: не удается найти имя« require »» при попытке передать простую страницу узла ts. Я прочитал несколько других случаев этой ошибки на SO, и я не думаю, что у меня есть подобные проблемы.
Я запускаю в командной строке команду: tsc movie.server.model.ts. Содержимое этого файла:

'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';

Ошибка выдается в строке var mongoose = require ('mongoose')

Содержимое файла typings / tsd.d.ts:

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

Ссылки на файл .d.ts были помещены в соответствующие папки и добавлены в typings / tsd.d.ts с помощью команд:

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

Созданный файл .js, кажется, работает нормально, поэтому я мог проигнорировать ошибку. Но я был бы признателен, зная, почему возникает эта ошибка и что я делаю неправильно.


Быстро и грязно

Если у вас есть только один файл, использующий require, или вы делаете это для демонстрационных целей, вы можете определить require в верхней части вашего файла TypeScript.

declare var require: any

TypeScript 2.x

Если вы используете TypeScript 2.x, вам больше не нужно устанавливать Typings или Определенно набранные. Просто установите следующий пакет.

npm install @types/node --save-dev

Будущее файлов декларации (15.06.2016)

Такие инструменты, как Typings и TSD, будут продолжать работать, и мы будем работать вместе с этими сообществами, чтобы обеспечить плавный переход.

ДОПОЛНИТЕЛЬНО: Если вы указываете typeroots или types в вашем tsconfig.json . Возможно, вам придется обновить tsconfig.json чтобы включить узел в качестве типа. По умолчанию любой пакет в @types уже включен в вашу сборку, если вы не указали ни один из этих параметров. Читать далее

Ниже приведена правильная конфигурация для каждого из этих параметров.

{
    "compilerOptions": {
        // types option has been previously configured
         "types": [
            // add node as an option
            "node"
         ],
         // typeRoots option has been previously configured
         "typeRoots": [
            // add path to @types
            "node_modules/@types"
         ]
    }
}

TypeScript 1.x

Используя наборы (замена DefiniteTyped), вы можете указать определение непосредственно из репозитория GitHub.

Установить набор текста

npm install typings -g --save-dev

Установите определение типа requireJS из репозитория DefiniteType

typings install dt~node --save --global

Webpack

Если вы используете Webpack в качестве инструмента сборки, вы можете включить типы Webpack.

Установка npm --save-dev @ types / webpack-env

Обновите ваш tsconfig.json с помощью следующих параметров compilerOptions :

"types": [
      "webpack-env"
    ]

Это позволяет вам выполнять require.ensure и другие специфические функции Webpack.

Угловой CLI

С помощью CLI вы можете выполнить описанный выше шаг Webpack и добавить блок «types» в ваш tsconfig.app.json .

Кроме того, вы можете использовать предустановленные типы node . Имейте в виду, что в ваш клиентский код будут включены дополнительные типы, которые на самом деле недоступны.

"compilerOptions": {
    // other options
    "types": [
      "node"
    ]
  }

  1. Вы указали, какой модуль использовать для переноса кода?
    tsc --target es5 --module commonjs script.ts
    Вы должны сделать это, чтобы транспортер знал, что вы компилируете код NodeJS. Docs

  2. Вы должны также установить определения мангуста
    tsd install mongoose --save

  3. Не используйте var для объявления переменных (если в этом нет необходимости, что очень редко), вместо этого используйте let . Узнайте больше об этом


Вместо:

'use strict';

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

Пытаться:

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

'use strict';

т.е. ссылочный путь первым.


Добавление Electron + angular 2/4: помимо добавления типа 'node' к различным файлам ts.config, в конечном итоге у меня сработало добавление следующего файла typings.d.ts:

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

Обратите внимание, что мой случай развивается с электронным + угловым 2/4. Мне нужно было запросить глобальное окно.


Если вы можете скомпилировать код, но Visual Studio 2015 помечает функции 'require', поскольку ошибки с текстом ошибки не могут найти имя 'require' или не могут найти символ 'require', обновите TypeScript для Visual Studio 2015 до последней версии (на данный момент 2.1.5) и обновите ReSharper (если вы его используете) как минимум до версии 2016.3.2.

У меня была эта досадная проблема некоторое время, я не мог найти решение, но наконец решил ее таким образом. Надеюсь, это кому-нибудь поможет.


Если вы столкнулись с этой проблемой в файле ts, который предоставляет только некоторые постоянные значения, то вы можете просто

переименуйте ваш файл .ts в файл .js

и ошибка не придет снова.


Просто в дополнение к ответу cgatian, для TypeScript 1.x

Если вы все еще видите ошибки, пожалуйста, укажите index.d.ts в опциях вашего компилятора.

"files": [
    "typings/index.d.ts"
]

Просто для справки, я использую Angular 7.1.4 , машинописный текст 3.1.6 и единственное, что мне нужно сделать, это добавить эту строку в tsconfig.json

    "types": ["node"], // within compilerOptions

Надеюсь, это поможет.


У меня есть еще один ответ, который основывается на всех предыдущих, которые описывают npm install @types/node и включают node в tsconfig.json / compilerOptions / types .

В моем случае у меня есть базовый tsConfig.json и отдельный в приложении Angular, расширяющий этот:

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

Моя проблема заключалась в пустых types в этом tsconfi.app.json - он перекрывает тот, что в базовой конфигурации.


Убедитесь, что вы установили npm i @types/node


Я нашел решение было использовать команду TSD:

tsd install node --save

Который добавляет / обновляет файл typings/tsd.d.ts и этот файл содержит все определения типов, которые требуются для приложения узла.

Вверху моего файла я поместил ссылку на tsd.d.ts например так:

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

Требование определяется по состоянию на январь 2016 года:

declare var require: NodeRequire;

interface NodeModule {
    exports: any;
    require: NodeRequireFunction;
    id: string;
    filename: string;
    loaded: boolean;
    parent: any;
    children: any[];
}

Я не мог получить ошибку 'require', чтобы уйти, используя любой из трюков выше.

но я обнаружил, что проблема заключалась в том, что мои инструменты машинописи для Visual Studio, где старая версия (1.8.6.0) и последняя на сегодня версия (2.0.6.0)

Вы можете скачать последнюю версию инструментов с:

https://www.microsoft.com/en-us/download/details.aspx?id=48593


импорт * как мангуст из «мангуста»


Этот ответ относится к современным настройкам (машинопись 2.x, веб-пакет> 2.x)

Вам НЕ нужно устанавливать @ types / node (который является типом node.js и не имеет отношения к внешнему коду, фактически усложняя такие вещи, как setTimout, другое возвращаемое значение и т. д.).

вам нужно установить @ types / webpack-env

npm i -D @types/webpack-env

который дает подписи времени выполнения, которые есть у веб-пакета (включая require и require.ensure и т. д.)

также убедитесь, что ваш tsconfig.json не имеет установленного массива 'types' ->, что позволит ему получать все определения типов в вашей папке node_modules / @ types. если вы хотите ограничить поиск типов, вы можете установить свойство typeRoot для node_modules / @ types





definitelytyped