TypeScript getting error TS2304: cannot find name ' require'

初めてのTypeScriptとDefinitelyTypedのNode.jsアプリケーションを立ち上げようとしていますが、いくつかのエラーに遭遇しています。

単純なTypeScript Node.jsページをトランスパイルしようとすると、"TS2304: Cannot find name 'require' "というエラーが発生します。Stack Overflowでこのエラーについて他のいくつかの事例を読みましたが、同様の問題があるとは思えません。 シェルのプロンプトでコマンドを実行しています:

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') 行で発生します。

typing/tsd.d.tsファイルの内容は以下の通りです:

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

.d.tsファイルの参照は、コマンドによって適切なフォルダに置かれ、typing/tsd.d.tsに追加された:

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

生成された.jsファイルは問題なく動作しているようなので、このエラーは無視できます。しかし、なぜこのエラーが発生するのか、何が間違っているのかを教えていただければ幸いです。

質問へのコメント (5)
ソリューション

速くて汚い。 --------------。 requireを使用して1つのファイルがある場合、またはデモ目的でこれを行っている場合は、TypeScriptファイルの上部でrequireを定義できます。

declare var require: any

TypeScript 2.x。 --------------。

TypeScript 2.xを使用している場合は、タイピングまたはDefinite Typedをインストールする必要がなくなりました。 次のパッケージをインストールするだけです。

npm install @types/node --save-dev

宣言ファイルの未来(2016年6月15日)

Typingsやtsdなどのツールは引き続き機能し、私たちは機能します。 スムーズな移行を確実にするために、これらのコミュニティと一緒に。

src / tsconfig.app.jsonを確認または編集して、以下が含まれるようにします。

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

src フォルダー内のファイルであり、rootアプリフォルダー上のファイルがないことを確認してください。

デフォルトでは、@ typesの下のパッケージはすでにビルドに含まれています**これらのオプションのいずれかを指定している場合を除きます。 続きを読む

TypeScript 1.x。 ----------------。

入力(DefinitelyTypedの交換)を使用すると、GitHubリポジトリから直接定義を指定できます。

タイピングをインストールします。

npm install typings -g --save-dev

DefinitelyTypeのレポからrequireJSタイプの定義をインストールします。

typings install dt~node --save --global

ウェブパック。 --------------。 ビルドツールとしてWebpackを使用している場合は、Webpackタイプを含めることができます。

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

tsconfig.jsoncompilerOptionsの下に更新します。

"types": [
      "webpack-env"
    ]

これにより、「require.ensure」やその他のWebpack固有の機能を実行できます。

角CLI。 --------------。 CLIを使用すると、上記のWebpackステップに従って、「types」ブロックを「tsconfig.app.json」に追加できます。

または、プリインストールされた「ノード」タイプを使用することもできます。 これには、実際には利用できないクライアント側コードの追加のタイプが含まれることに注意してください。

"compilerOptions": {
    // other options
    "types": [
      "node"
    ]
  }
解説 (32)

TypeScript 2.x の場合、次の2つのステップがあります。

1。 「必須」を定義するパッケージをインストールします。 例:

    npmは@types / node --save-devをインストールします。

2。 TypeScriptにグローバルに tsconfig.jsonに含めるように指示します。

    {。
        "compilerOptions":{。
            "タイプ":["ノード"]。
        }。
    }。

2番目のステップは、「必須」などのグローバルに利用可能な機能にアクセスする必要がある場合にのみ重要です。 ほとんどのパッケージでは、「パッケージ」パターンの「インポートパッケージ」のみを使用する必要があります。 上記のtsconfig.jsonタイプ配列にすべてのパッケージを含める必要はありません。

解説 (6)

あなたは

declare var require: any

または、より包括的なサポートには、DefinitelyTyped's require.d.tsを使用してください。

また、var mongoose = require('mongoose')の代わりに、次のようにすることもできます。

import mongoose from 'mongoose' // or
import mongoose = require('mongoose')
解説 (4)

この答えは、最新のセットアップに関連しています(TypeScript 2.x、Webpack> 2.x)

@ types / nodeをインストールする必要はありません(これはすべてのNode.jsタイプであり、フロントエンドコードには無関係です。実際にsetTimoutなどのさまざまな戻り値などを複雑にします。.

@ types / webpack-envをインストールする必要があります。

```` npm i -D @types / webpack-env`````````。

これは、Webpackが持つランタイムの署名を提供します(「require」、「require.ensure」などを含む)。)。

また、tsconfig.jsonファイルに「タイプ」配列が設定されていないことを確認してください->これにより、node_modules /@ typesフォルダー内のすべてのタイプ定義が取得されます。

タイプの検索を制限する場合は、typeRootプロパティをnode_modules /@ typesに設定できます。

解説 (2)

の代わりだ:

'use strict';

/// 

を試してみてください:

/// 

'use strict';

つまり、最初に参照パスを指定します。

解説 (1)

解決策はTSDコマンドを使うことだとわかった:

tsd install node --save

typings/tsd.d.ts`ファイルを追加/更新し、そのファイルにはノードアプリケーションに必要なすべての型定義が含まれています。

ファイルの先頭には、tsd.d.tsへの参照を次のように記述する:

/// 

2016年1月現在、requireはこのように定義されている:

declare var require: NodeRequire;

interface NodeModule {
    exports: any;
    require: NodeRequireFunction;
    id: string;
    filename: string;
    loaded: boolean;
    parent: any;
    children: any[];
}
解説 (1)

参考までに、 Angular 7.1.4 TypeScript 3.1.6 を使用していますが、必要なのは、この行を tsconfig.jsonに追加することだけです。

。 "タイプ":["ノード"]、// compilerOptions内。

解説 (0)

Peter Vargaの回答を使用して、「宣言var require:any;」を追加し、すべての.tsファイルで一般的に機能する汎用ソリューションにしましたpreprocess-loader

1。 preprocessor-loaderをインストールします。

    npmはプリプロセッサローダーをインストールします。

2。 _webpack.config.js_にローダーを追加します(TypeScriptソースを処理するためにts-loaderを使用しています):

    module: {
        loaders: [{
            test: /\.tsx?$/,
            loader: 'ts-loader!preprocessor?file&config=preprocess-ts.json'
        }]
    }

3。 すべてのソースに回避策を追加する構成を追加します。

{
    "line": false,
    "file": true,
    "callbacks": [{
        "fileName": "all",
        "scope": "source",
        "callback": "(function shimRequire(source, fileName) { return 'declare var require: any;' + source; })"
    }]
}

---。

より堅 ⁇ な_require.d.ts_を同じ方法で追加できますが、「宣言var require:any;」は私の状況では十分でした。

プリプロセッサ1.0.5にバグがあるに注意してください。これにより、最後の行が切り取られます。最後に戻って、大丈夫です。

解説 (3)

私もこの問題に苦しんでいます。 これはすべてのリリース候補別名 rc で機能すると信じていますが、テストしませんでした。 @angular rc.2 の場合、うまく機能します。

1。 package.jsonにnpm依存関係として core-jsを追加します。 2。 typings install core-js --saveを実行します。 3。 package.jsonのすべての " es6-shim "オカレンスを削除します。 もう必要ありません。

乾杯。!

解説 (1)

npm i @types / nodeをインストールしたことを確認してください。

解説 (0)

*を「マングース」からマングースとしてインポートします。

解説 (0)

tsconfig.jsonから「ジャスミン」が欠落していると、このエラーが発生することがあります。 (TypeScript 2.X)

追加してください。

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

tsconfig.jsonファイルに。

解説 (0)

電子 +角度2/4追加:

ts.configのさまざまなファイルに「ノード」タイプを追加することに加えて、最終的に機能したのは、次のファイルを追加することでした。 typings.d.tsファイル:

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

私のケースはElectron + Angular 2/4で開発されていることに注意してください。 グローバルなウィンドウのニーズが必要でした。

解説 (0)

私の場合、それは「src / tsconfig.app.json」が「tsconfig.json」設定を上書きしていた非常に愚かな問題でした。

それで、私はこれを tsconfig.json:で持っていました。

。 "タイプ":[。 「ノード」。 ]。

そして、これは src / tsconfig.app.jsonのものです: 。 「タイプ」:[]。

このエラーが私に白髪を引き起こしていたので、誰かがこれが役に立ったと思います。

解説 (0)

1。 コードを転載するために使用するモジュールを指定しましたか?? tsc --target es5 --module commonjs script.ts。 これを行うには、NodeJSコードをコンパイルしていることをトランスパイラに知らせる必要があります。 Docs

2。 マングースの定義もインストールする必要があります。 tsdインストールmongoose --save

3。 変数を宣言するために varを使用しないでください(非常にまれなケースである必要がない限り)、代わりに letを使用します。 詳細

解説 (0)

上記のトリックを使用して、「必須」エラーを取り除くことができませんでした。

しかし、問題は、古いバージョン(1.8.6.0)と今日の最新バージョン(2.0.6.0)であるVisual Studio用のTypeScriptツールであることがわかりました。

ツールの最新バージョンは、以下からダウンロードできます。

解説 (0)

cgatianの回答に加えて、 TypeScript 1.x の場合。

それでもエラーが発生している場合は、コンパイラオプションにindex.d.tsを具体的に入力してください。

"files": [
    "typings/index.d.ts"
]
解説 (0)

コードをコンパイルできる場合。, しかし、Visual Studio 2015は&#39をマークします。;require&#39。; エラーテキストでエラーとして機能します名前を見つけることができません&#39。;require&#39。;または記号&#39を解決できません。;require&#39。;。, TypeScript for Visual Studio 2015を最新バージョンに更新します。 (現時点で2.1.5。) ReSharperを更新します。 (使用する場合。) 少なくともバージョン2016.3.2に。

しばらくこの迷惑な問題があり、解決策が見つかりませんでしたが、ようやくこの方法で解決しました。

解説 (0)

tsconfig.jsonに以下を追加します。

"typeRoots": [ "../node_modules/@types" ]
解説 (2)

「npm install @types / node」を説明し、「tsconfig.json / compilerOptions / types」に「node」を含める以前のすべての回答に基づいた、さらに別の回答があります。

私の場合、ベース tsConfig.jsonと、これを拡張するAngularアプリケーションに別のものを持っています。

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

私の問題は、この tsconfi.app.jsonの空の typesでした-それはベース構成のものを破壊します。

解説 (0)