Я пытаюсь запустить и запустить мое первое приложение Typescript и DefinitelyTyped node и запустить некоторые ошибки.
Я получаю сообщение об ошибке "TS2304: Не могу найти имя" require ", когда я пытаюсь переслать простую страницу ts node. Я прочитал несколько других случаев этой ошибки на 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, вам больше не нужно устанавливать 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"
]
}
}
Используя наборы (замена DefiniteTyped), вы можете указать определение непосредственно из репозитория GitHub.
Установить набор текста
npm install typings -g --save-dev
Установите определение типа requireJS из репозитория DefiniteType
typings install dt~node --save --global
Если вы используете Webpack в качестве инструмента сборки, вы можете включить типы Webpack.
Установка npm --save-dev @types/webpack-env
Обновите ваш tsconfig.json
с помощью следующих параметров compilerOptions
:
"types": [
"webpack-env"
]
Это позволяет вам выполнять require.ensure
и другие специфические функции Webpack.
С помощью CLI вы можете выполнить описанный выше шаг Webpack и добавить блок "types" в ваш tsconfig.app.json
.
Кроме того, вы можете использовать предустановленные типы node
. Имейте в виду, что в ваш клиентский код будут включены дополнительные типы, которые на самом деле недоступны.
"compilerOptions": {
// other options
"types": [
"node"
]
}
Для TypeScript 2.x теперь есть два шага:
Установите пакет, определяющий require
. Например:
npm install @types/node --save-dev
Сообщите TypeScript включить его глобально в tsconfig.json
:
{
"compilerOptions": {
"types": ["node"]
}
}
Второй шаг важен только в том случае, если вам нужен доступ к глобально доступным функциям, таким как require
. Для большинства пакетов вы должны просто использовать шаблон import package from 'package'
. Там нет необходимости включать каждый пакет в массив tsconfig.json выше.
"types": ["jasmine", "hammerjs"]
в tsconfig.js
я также хотел добавить node
. Спасибо Джордан.
Вы можете
declare var require: any
Или для более полной поддержки используйте DefinitelyTyped require.d.ts
Кроме того, вместо var mongoose = require('mongoose')
вы можете попробовать следующее
import mongoose from 'mongoose' // or
import mongoose = require('mongoose')
use strict
в TypeScript: ответ на языке basarat и «Use Strict» необходимы в файле TypeScript? , Необходимо use strict
в TypeScript.
"use strict"
, я отредактирую свой ответ
Вместо:
'use strict';
/// <reference path="typings/tsd.d.ts" />
Попробуйте:
/// <reference path="typings/tsd.d.ts" />
'use strict';
то есть. путь ссылки сначала.
Я нашел решение использовать команду TSD:
tsd install node --save
Что добавляет/обновляет файл typings/tsd.d.ts
, и этот файл содержит все определения типов, которые требуются для приложения node.
В верхней части моего файла я помещаю ссылку на 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[];
}
Этот ответ относится к современным настройкам (typescript 2.x, webpack > 2.x)
вам НЕ нужно устанавливать @types/node (который является всеми типами node.js и является нерелевантным для интерфейсного кода, фактически усложняя такие вещи, как setTimout другое возвращаемое значение и т.д.
вам нужно установить @types/webpack-env
npm я -D @types/webpack-env
который дает подписи времени выполнения, которые имеет веб-пакет (включая require и require.ensure и т.д.)
также убедитесь, что ваш tsconfig.json не имеет набора массивов 'types' → , который заставит его выбрать все определения типов в папке node_modules/@types. если вы хотите ограничить поиск типов, вы можете установить свойство typeRoot для node_modules/@types
Я принял ответ Питера Варги, чтобы добавить declare var require: any;
и превратил его в универсальное решение, которое работает для всех файлов .ts в общем случае с помощью preprocess-loader:
установить препроцессор-загрузчик:
npm install preprocessor-loader
добавить загрузчика в ваш webpack.config.js(я использую ts-loader для обработки TypeScript источников ):
module: {
loaders: [{
test: /\.tsx?$/,
loader: 'ts-loader!preprocessor?file&config=preprocess-ts.json'
}]
}
{
"line": false,
"file": true,
"callbacks": [{
"fileName": "all",
"scope": "source",
"callback": "(function shimRequire(source, fileName) { return 'declare var require: any;' + source; })"
}]
}
Вы можете добавить более надежные require.d.ts таким же образом, но declare var require: any;
было достаточно в моей ситуации.
Обратите внимание, есть ошибка в препроцессоре 1.0.5, которая отсекает последнюю строку, поэтому просто убедитесь, что у вас есть дополнительная строка space return в конце, и вы будете в порядке.
Убедитесь, что вы установили npm я @types/node
Электрон + angular 2/4 дополнение: В дополнение к добавлению типа node к ts.config различным файлам, что в конечном итоге сработало для меня, это добавить следующий Файл typings.d.ts:
declare var window: Window;
interface Window {
process: any;
require: any;
}
Заметим, что мой случай развивается с электроном + angular 2/4. Мне понадобилось требование на глобальном окне.
Иногда пропущенная "жасмин" из tsconfig.json может вызвать эту ошибку. (Typescript 2.X)
поэтому добавьте
"types": [
"node",
"jasmine"
]
на ваш tsconfig.json
Я тоже борюсь с этой проблемой. Я считаю, что это работает для всех кандидатов на выпуск aka rc, но я не тестировал. Для @angular rc.2 он работает хорошо.
core-js
как зависимость от npm в package.json
typings install core-js --save
"es6-shim"
события в package.json
. Вам это больше не нужно.Ура!
Просто для справки, я использую Angular 7.1.4, машинописный текст 3.1.6, и единственное, что мне нужно сделать, это добавить эту строку в tsconfig.json
"types": ["node"], // within compilerOptions
Надеюсь, это поможет.
Если вы столкнулись с этой проблемой в файле ts, который предоставляет только некоторые постоянные значения, то вы можете просто
переименуйте ваш файл .ts в файл .js
и ошибка не придет снова.
Добавьте в tsconfig.json
следующее:
"typeRoots": [ "../node_modules/@types" ]
Если вы можете скомпилировать код, но Visual Studio 2015 отмечает "требуемые" функции, поскольку ошибки с текстом ошибки не могут найти имя "require" или не могут разрешить обновление символа "require" TypeScript для Visual Studio 2015 до последней версии (на момент 2.1.5) и обновить ReSharper (если вы его используете), по крайней мере, до версии 2016.3.2.
У меня была эта неприятная проблема на некоторое время, я не мог найти решение, но, наконец, решил это так. Надеюсь, это поможет кому-то.
В дополнение к кгатскому ответу, для TypeScript 1.x
Если вы все еще видите ошибки, укажите в параметрах вашего компилятора index.d.ts.
"files": [
"typings/index.d.ts"
]
Я не мог заставить ошибку "require" уйти, используя любой из трюков выше.
но я выяснил, что проблема заключалась в том, что мои инструменты typescript для визуальной студии, где старая версия (1.8.6.0) и последняя версия на сегодняшний день (2.0.6.0)
Вы можете загрузить последнюю версию инструментов из:
https://www.microsoft.com/en-us/download/details.aspx?id=48593
Вы указали, какой модуль использовать для пересылки кода? tsc --target es5 --module commonjs script.ts
Вы должны сделать это, чтобы транспилер знал, что вы компилируете код NodeJS. Документы.
Вы также должны установить определения мангуста
tsd install mongoose --save
Не используйте var
для объявления переменных (если это необходимо, это очень редкий случай), вместо этого используйте let
. Подробнее об этом
when I attempt to transpile a simple ts node page
TS <как вы переносите ... какая утилита