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
を先頭に追加します。
ありがとうございました。 TypeScriptのimport文がそれを認識するか、「@」と統合する方法は? –
@AllanXu、私の更新された回答を参照してください –