私の最初の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ファイルは正常に機能するように見えるので、私はエラーを無視することができます。しかし、私はなぜこのエラーが発生するのか、そして私が何を間違っているのかを知っていることを感謝します。
Requireを使って1つのファイルしかない場合、またはデモ目的でこれを行っている場合は、TypeScriptファイルの先頭にrequireを定義できます。
declare var require: any
TypeScript 2.xを使用している場合は、TypingやDefinitely Typedをインストールする必要はもうありません。以下のパッケージをインストールするだけです。
npm install @types/node --save-dev
Typingsやtsdなどのツールは引き続き機能します。スムーズな移行を確実にするために、これらのコミュニティと並行して作業しています。
省略可能:tsconfig.json
でtyperoots
または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"
]
}
}
タイピング(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
compilerOptions
の下にあるtsconfig.json
を次のように更新します。
"types": [
"webpack-env"
]
これはrequire.ensure
と他のWebpack特有の機能をすることを可能にします。
CLIを使えば、上記のWebpackのステップに従って、tsconfig.app.json
に "types"ブロックを追加することができます。
あるいは、プレインストールされたnode
タイプを使用することもできます。これには、実際には利用できない追加のタイプのクライアントサイドコードが含まれます。
"compilerOptions": {
// other options
"types": [
"node"
]
}
TypeScript 2.x の場合、2つのステップがあります。
require
を定義するパッケージをインストールしてください。例えば:
npm install @types/node --save-dev
TypeScriptにtsconfig.json
にグローバルに含めるように伝えます。
{
"compilerOptions": {
"types": ["node"]
}
}
require
のようにグローバルに利用可能な関数にアクセスする必要がある場合、2番目のステップは重要です。ほとんどのパッケージではimport package from 'package'
パターンを使うべきです。上記のtsconfig.json型配列にすべてのパッケージを含める必要はありません。
あなたはできる
declare var require: any
または、より包括的なサポートを得るには、 DefinitelyTypedのrequire.d.ts を使用してください。
また、var mongoose = require('mongoose')
の代わりに、あなたは以下を試すことができます
import mongoose from 'mongoose' // or
import mongoose = require('mongoose')
の代わりに:
'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
ファイルを追加/更新し、そのファイルはノードアプリケーションに必要なすべての型定義を含みます。
私のファイルの先頭に、私は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[];
}
この答えは最近の設定(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プロパティ
私は Peter Vargaの答え を使ってdeclare var require: any;
を追加し、 preprocess-loader を使用することによってすべての.tsファイルに対して機能する一般的な解決策にしました。
プリプロセッサローダをインストールします。
npm install preprocessor-loader
webpack.config.js にローダーを追加します(TypeScriptのソースを処理するために ts-loader を使用しています)。
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にバグがあります。 は最後の行を切り捨てます。したがって、最後に余分な行スペースがあることを確認してください。
npm i @types/node
をインストールしたことを確認してください
'mongoose'からmongooseとして*をインポート
私もこの問題に苦しんでいます。私はこれがすべての リリース候補のために働くと信じます aka rc しかし私はテストしませんでした。 @angular rc.2 の場合はうまくいきます。
core-js
にpackage.json
をnpm依存関係として追加typings install core-js --save
を実行"es6-shim"
内のすべてのpackage.json
の出現箇所を削除します。もう必要ありません。乾杯!
Tsconfig.jsonから "jasmine"が欠けていると、このエラーが発生する可能性があります。 (TypeScript 2.X)
だから追加
"types": [
"node",
"jasmine"
]
tsconfig.jsonへ
Electron + angle 2/4加算: ts.configのさまざまなファイルに 'node'タイプを追加することに加えて、最終的に私にとってうまくいったのは typings.d.tsファイルの隣に追加することです。
declare var window: Window;
interface Window {
process: any;
require: any;
}
私のケースは電子+角度2/4で展開していることに注意してください。私はウィンドウグローバルで要求が必要でした。
tsconfig.json
に以下を追加してください。
"typeRoots": [ "../node_modules/@types" ]
参考までに、私は Angular 7.1.4 、 TypeScript 3.1.6 を使用しています。そして、私がする必要があるのはtsconfig.json
にこの行を追加することだけです。
"types": ["node"], // within compilerOptions
それが役立つことを願っています。
Cgatianの回答に加えて、 TypeScript 1.xの場合
それでもエラーが発生する場合は、コンパイラオプションにindex.d.tsを明示してください。
"files": [
"typings/index.d.ts"
]
コードを変換するために使用するモジュールを指定しましたか?tsc --target es5 --module commonjs script.ts
NodeJSコードをコンパイルしていることをtranspilerに知らせるには、それをしなければなりません。 ドキュメント 。
Mongooseの定義もインストールする必要がありますtsd install mongoose --save
変数を宣言するためにvar
を使用しないでください(非常にまれなケースですが、必要でない限り)。代わりにlet
を使用してください。 それについてもっと学びましょう
npm install @types/node
を記述し、tsconfig.json / compilerOptions / types
にnode
を含む、以前のすべてのものを基にしたもう1つの答えです。
私の場合は、Angularアプリに基本のtsConfig.json
と別のものを追加しています。
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"types": []
},
私の問題はこのtsconfi.app.json
の空のtypes
でした - それは基本設定の中のものを壊します。
コードをコンパイルできても、Visual Studio 2015がエラーテキストのエラーとして 'require'関数をマークした場合 'require'という名前が見つからない場合 または シンボル 'require'を解決できない場合 TypeScript for Visual Studio 2015を最新バージョンに更新(現時点では2.1.5)ReSharperを(もしあなたがそれを使っていれば)少なくともバージョン2016.3.2にアップデートする。
私はしばらくの間この厄介な問題を抱えていました、解決策を見つけることができませんでしたが、ようやくそれをこのように解決しました。これが誰かに役立つことを願っています。
上記のトリックのいずれかを使用しても 'require'エラーをなくすことはできませんでした。
しかし、問題は、古いバージョン(1.8.6.0)と現在の最新バージョンが(2.0.6.0)であるVisual Studio用の私のTypeScriptツールであることがわかった
最新のツールは、次のサイトからダウンロードできます。
https://www.Microsoft.com/ja-jp/download/details.aspx?id=48593