web-dev-qa-db-ja.com

タイプスクリプト取得エラーTS2304:名前 'require'が見つかりません

私の最初のTypeScriptとDefinitelyTypedノードアプリを起動して実行しようとしたところ、いくつかのエラーが発生しました。

単純なtsノードページを変換しようとすると、「TS2304:名前 'require'が見つかりません」というエラーが表示されます。私は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ファイルは正常に機能するように見えるので、私はエラーを無視することができます。しかし、私はなぜこのエラーが発生するのか、そして私が何を間違っているのかを知っていることを感謝します。

335
JerryKur

早くて汚い

Requireを使って1つのファイルしかない場合、またはデモ目的でこれを行っている場合は、TypeScriptファイルの先頭にrequireを定義できます。

declare var require: any

TypeScript 2.x

TypeScript 2.xを使用している場合は、TypingやDefinitely Typedをインストールする必要はもうありません。以下のパッケージをインストールするだけです。

npm install @types/node --save-dev

宣言ファイルの未来(6/15/2016) -

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

省略可能:tsconfig.jsontyperootsまたはtypesを指定している場合。型としてノードを含めるために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

タイピング(DefinitelyTypedの置き換え)を使用すると、GitHubリポジトリから直接定義を指定できます。

タイピングをインストールする

npm install typings -g --save-dev

DefinitelyTypeのリポジトリからrequireJS型定義をインストールします。

typings install dt~node --save --global

Webpack

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

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

compilerOptionsの下にあるtsconfig.jsonを次のように更新します。

"types": [
      "webpack-env"
    ]

これはrequire.ensureと他のWebpack特有の機能をすることを可能にします。

Angular CLI

CLIを使えば、上記のWebpackのステップに従って、tsconfig.app.jsonに "types"ブロックを追加することができます。

あるいは、プレインストールされたnodeタイプを使用することもできます。これには、実際には利用できない追加のタイプのクライアントサイドコードが含まれます。 

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

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

  1. requireを定義するパッケージをインストールしてください。例えば:

    npm install @types/node --save-dev
    
  2. TypeScriptにtsconfig.jsonにグローバルに含めるように伝えます。

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

requireのようにグローバルに利用可能な関数にアクセスする必要がある場合、2番目のステップは重要です。ほとんどのパッケージではimport package from 'package'パターンを使うべきです。上記のtsconfig.json型配列にすべてのパッケージを含める必要はありません。

76
Jordan

あなたはできる

declare var require: any

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

また、var mongoose = require('mongoose')の代わりに、あなたは以下を試すことができます 

import mongoose from 'mongoose' // or
import mongoose = require('mongoose')
63
ııı

の代わりに:

'use strict';

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

試してください: 

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

'use strict';

つまり、参照パスが最初になります。

9
Hurricane

解決策はTSDコマンドを使用することであることがわかりました。

tsd install node --save

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

私のファイルの先頭に、私はtsd.d.tsへの参照をこのように置きました:

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

Requireは、2016年1月現在で次のように定義されています。

declare var require: NodeRequire;

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

この答えは最近の設定(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に 'types'配列が設定されていないことを確認してください - >これにより、node_modules/@ typesフォルダ内のすべての型定義が選択されます。型の検索を制限したい場合は、 node_modules/@ typesのtypeRootプロパティ 

6
Nadav SInai

私は Peter Vargaの答え を使ってdeclare var require: any;を追加し、 preprocess-loader を使用することによってすべての.tsファイルに対して機能する一般的な解決策にしました。

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

    npm install preprocessor-loader
    
  2. webpack.config.js にローダーを追加します(TypeScriptのソースを処理するために ts-loader を使用しています)。

    module: {
        loaders: [{
            test: /\.tsx?$/,
            loader: 'ts-loader!preprocessor?file&config=preprocess-ts.json'
        }]
    }
  1. 回避策をすべてのソースに追加する設定を追加します。
{
    "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にバグがあります。 は最後の行を切り捨てます。したがって、最後に余分な行スペースがあることを確認してください。

4
Benny Bottema

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

2

'mongoose'からmongooseとして*をインポート

1
basquith16

私もこの問題に苦しんでいます。私はこれがすべての リリース候補のために働くと信じます aka rc しかし私はテストしませんでした。 @angular rc.2 の場合はうまくいきます。

  1. core-jspackage.jsonをnpm依存関係として追加
  2. typings install core-js --saveを実行
  3. "es6-shim"内のすべてのpackage.jsonの出現箇所を削除します。もう必要ありません。

乾杯!

1
kucherenkovova

Tsconfig.jsonから "jasmine"が欠けていると、このエラーが発生する可能性があります。 (TypeScript 2.X)

だから追加

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

tsconfig.jsonへ

1

Electron + angle 2/4加算: ts.configのさまざまなファイルに 'node'タイプを追加することに加えて、最終的に私にとってうまくいったのは typings.d.tsファイルの隣に追加することです。 

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

私のケースは電子+角度2/4で展開していることに注意してください。私はウィンドウグローバルで要求が必要でした。

1
mihaa123

tsconfig.jsonに以下を追加してください。

"typeRoots": [ "../node_modules/@types" ]
0
Darshan Ballal

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

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

それが役立つことを願っています。 

0
Hearen

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

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

"files": [
    "typings/index.d.ts"
]
0
Vidish Datta
  1. コードを変換するために使用するモジュールを指定しましたか?
    tsc --target es5 --module commonjs script.ts
    NodeJSコードをコンパイルしていることをtranspilerに知らせるには、それをしなければなりません。 ドキュメント

  2. Mongooseの定義もインストールする必要があります
    tsd install mongoose --save

  3. 変数を宣言するためにvarを使用しないでください(非常にまれなケースですが、必要でない限り)。代わりにletを使用してください。 それについてもっと学びましょう

0

npm install @types/nodeを記述し、tsconfig.json / compilerOptions / typesnodeを含む、以前のすべてのものを基にしたもう1つの答えです。

私の場合は、Angularアプリに基本のtsConfig.jsonと別のものを追加しています。

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

私の問題はこのtsconfi.app.jsonの空のtypesでした - それは基本設定の中のものを壊します。

0
HankCa

コードをコンパイルできても、Visual Studio 2015がエラーテキストのエラーとして 'require'関数をマークした場合 'require'という名前が見つからない場合 または シンボル 'require'を解決できない場合 TypeScript for Visual Studio 2015を最新バージョンに更新(現時点では2.1.5)ReSharperを(もしあなたがそれを使っていれば)少なくともバージョン2016.3.2にアップデートする。

私はしばらくの間この厄介な問題を抱えていました、解決策を見つけることができませんでしたが、ようやくそれをこのように解決しました。これが誰かに役立つことを願っています。

0
Mike Eshva

上記のトリックのいずれかを使用しても 'require'エラーをなくすことはできませんでした。

しかし、問題は、古いバージョン(1.8.6.0)と現在の最新バージョンが(2.0.6.0)であるVisual Studio用の私のTypeScriptツールであることがわかった

最新のツールは、次のサイトからダウンロードできます。

https://www.Microsoft.com/ja-jp/download/details.aspx?id=48593

0
Thomas