2016-05-23 25 views
4

大きなプロジェクトの中で名前空間のようなものをインポート用に使うことはできますか?私は周りにいくつかのコンポーネントを移動しないときには、プロジェクトの構造の将来の変更を簡略化することができると思う私はTypeScriptで書かれたプロジェクトに相対パスを持つ文字列の代わりに変数を使用

import {formatNumber} from utils.formatters 

を使用することができますたとえば、代わりに

import {formatNumber} from '../../../utils/formatters' 

変更する相対パスを探す必要があります。

どのように問題に対処できますか?

+0

私は(そう、塩の粒でこれを取る)WebPACKのに非常に新たなんです、私は['resolve.root'](http://webpack.github.io/docs/configuration.html#resolve-root)を使って、ひどい相対パスを解決しました。私はこの設定オプションを自分のソースのルートの絶対パスに設定しました。 'path.resolve( './ src')'を実行し、絶対パスを使用してインポートします。これはJavaの場合と同様です: 'import {Thing} from 'foo/bar/Thing''。 –

答えて

1

私は周りのいくつかのコンポーネントを移動し、それはあなたがパスのようなもので簡単に修正することができていること(コンパイルエラーになります活字体で

FWIWを変更するには、相対パスを探す必要がありません完成度https://basarat.gitbooks.io/alm/content/features/autocomplete.html#path-completions)純粋なJavaScriptよりも優れています。 https://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md

もっと

私は輸入品のための私の大規模なプロジェクト内の名前空間のようなものを使用することはでき

号は現在、それはすぐに痛みになることができ、ファイルの順序を手動で管理が必要

相対のファイルパスを持つことは、本当に痛みです。しかし、それはいくつかのJavaScriptモジュールシステムがどのように機能するか(特にnodejs)です。

0

https://angular.io/docs/ts/latest/guide/style-guide.html#!#create-and-import-barrels

ので、グローバルフォルダレベルでこれらすべてのファイルを作成し、私は「バレル」と呼ばれる手法従うことをお勧めします(ドキュメントリンクがangular2からですが、それは一般的な概念です)リンク(とそこに各ファイルへの参照のみを保持する)で

export * from './config'; 
export * from './entity.service'; 
export * from './exception.service'; 
export * from './filter-text'; 
export * from './init-caps.pipe'; 
export * from './modal'; 
export * from './nav'; 
export * from './spinner'; 
export * from './toast'; 

その後、どこでも深いフォルダ構造は、このファイルへの参照を保持しています...

さらに多くのファイルを持ち、さらにいくつかの内部サブ名前空間を使用することもできます。例えば。これはルート/グローバル「ng.ts」

// Detail 
export * from "@angular/core"; 

import * as common from "@angular/common"; 
import * as http from "@angular/http"; 
import * as upgrade from "@angular/upgrade"; 
import * as platform from "@angular/platform-browser-dynamic"; 

// with sub namespaces 
export { common, http, platform, upgrade }; 

の一例であり、これが有効である

import * as ng from "../../../ng"; 

@ng.Component(... // root is 'core' 
... 
let control = new ng.common.Control(); // 'common' is nested as common 
関連する問題