2017-08-14 13 views
3

私は以下のようにimport文を見ると「@」記号の後ろにあるかを理解しようとしています:以下のように@または@タイプの '@'記号の後ろには何がありますか?

Import { Injectable } from ‘@angular/core’; 

またはNPMのCLIコマンド:

npm -install –save @types/lodash 

ステートメントまたはコマンドが作業しています私のために良い、私はちょうど@記号のシーンの後ろに起こっていることを学びたい。

'@'はTypeScriptの機能ですか? NPMのこと?

詳細なオンラインドキュメントへのポインタは大きな助けになります。

答えて

7

scoped packagesというNPMのものです。 official doc

スコープはnpmモジュールの名前空間に似ています。パッケージ名が@で始まる で始まる場合は、スコープ付きパッケージです。スコープは@とスラッシュの間のすべてです。 です。

すべてのスコープパッケージは、@で始まるフォルダ内に格納されます。たとえば、すべてのAngularパッケージは@angularフォルダ内に格納され、node_modulesに格納されます。@スコープ付き識別子がなく、angular/coreおよびangular/compilerを使用した場合、パッケージごとに別のフォルダが作成されます。同じことが@typesパッケージの場合も同様です。

TypeScriptのインポートステートメントは、それを認識するか、または '@'とどのように統合されますか?

あなたが前方使用のパスにスラッシュ場合node_modulesフォルダを横切ることができるnodeによって使用され、スコープのパッケージに制限されていないrequire機能:

node_modules 
    a 
     b 
     index.js 
     module.exports = 3; 

m.js 
    console.log(require('a/b')); // logs 3 

活字体のコンパイラは、ボンネットの下にノードのstatSync機能を使用しています

function fileSystemEntryExists(path, entryKind) { 
    try { 
     var stat = _fs.statSync(path); 
     switch (entryKind) { 
      case 0 /* File */: return stat.isFile(); 
      case 1 /* Directory */: return stat.isDirectory(); 
     } 
    } 
    catch (e) { 
     return false; 
    } 
} 

この関数は、スラッシュをパスセパとして処理するのは当然ですrator。パスを解決するときに、NODEモジュール解決方法が設定されている場合、コンパイラはパスにnode_modulesを先頭に追加します。

+0

ありがとうございました。 TypeScriptのimport文がそれを認識するか、「@」と統合する方法は? –

+0

@AllanXu、私の更新された回答を参照してください –

3

scoped packagesというNPMの機能です。

つまり、組織が公式の識別子の下にすべてのパッケージをグループ化できる組織的な機能です。 the official docsから:

スコープは一緒に関連するパッケージをグループ化する方法であり、またNPMは、パッケージを扱う方法についていくつかのことに影響を与えます。

各npmユーザ/組織には独自の有効範囲があり、あなたのスコープ内にのみパッケージを追加できます。これは、あなたがあなたの前にあなたのパッケージ名を取っている人を心配する必要はないということです。したがって、それは組織の公式パッケージを伝える良い方法です。

NPMは、スコープのパッケージを処理する方法にいくつかの小さなひねりがありますが、例えば、node_modulesに、ディレクトリがスコープのために作成され、そのスコープを持つすべてのパッケージは、そのディレクトリに格納されています。ほとんどの場合、スコープされていないパッケージと同じようにスコープされたパッケージを扱うことができます。

+1

あなたのupvotesのいくつかを盗んで申し訳ありません、あなたの答えは非常に良いです –

関連する問題