ノードとブラウザの両方を対象とするタイスクリプトプロジェクトがあります。いくつかのスクリプトではNodeのrequire()
を使用していますが、他の場合はJSTのrequire()
が必要です。同じTypeScriptプロジェクトでrequireJSとNodeのRequireを使用できません
myProject
\-- a.ts
\-- b.ts
\-- node.d.ts
\-- require.d.ts
a.ts
が含まれている場所:
/// <reference path="./node.d.ts" />
var cp = require('child-process');
var a = 'hello world'
export = a
とb.ts
は含まれています
/// <reference path="./require.d.ts" />
require('hello',function(x){console.log('world')});
var b = 'hello world'
export = b
、どこrequire.d.ts
とnode.d.ts
がDefinitlyTypedから得られる私のプロジェクトディレクトリは次のようになります。私は私のプロジェクトをコンパイルすると
、私はこれらのエラーを取得:
b.ts(2,1): error TS2346: Supplied parameters do not match any signature of call target.
require.d.ts(396,13): error TS2403: Subsequent variable declarations must have the same type. Variable 'require' must be of type 'NodeRequire', but here has type 'Require'.
は、私がロードするためにモジュールを決定するために、このイディオムを使用するので、私は、ブラウザまたはその逆にノードモジュールをロードしていませんよ。
if(typeof module !== 'undefined' && module.exports){
// We're in a Node process
}else{
// We're in an AMD module in the browser:
}
同じプロジェクトでこれらの.d.ts
のファイルの両方を使用する方法はあります。それは別のモジュールでそれらを使用するのは不十分だと思われます。
ありがとう! – Jthorpe
心配はいりません。 Fwiw私はhttps://github.com/alm-tools/almを開発するために使用するこのワークフローを持っています。新しい技術を試してみるのは簡単です。しかし、私は怠惰な 'require.ensure'の必要はありません:) – basarat