Angular2TypeScriptファイルとJavaScriptファイルを別々のフォルダーに分けます。


82

次のようなファイル構造を含むangular.ioWebサイトからの5分のクイックスタートを使用しています。

angular2-quickstart
 app
   app.component.ts
   boot.ts
 index.html
 license.md
 package.json
 tsconfig.json

tsconfig.jsonは次のようなコードブロックです:

{
  "compilerOptions": {
    "target": "ES5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
    "node_modules"
  ]
} 

また、package.json:

{
  "name": "angular2-quickstart",
  "version": "1.0.0",
  "scripts": {
    "tsc": "tsc",
    "tsc:w": "tsc -w",
    "lite": "lite-server",
    "start": "concurrent \"npm run tsc:w\" \"npm run lite\" "
  },
  "license": "ISC",
  "dependencies": {
    "angular2": "2.0.0-beta.0",
    "systemjs": "0.19.6",
    "es6-promise": "^3.0.2",
    "es6-shim": "^0.33.3",
    "reflect-metadata": "0.1.2",
    "rxjs": "5.0.0-beta.0",
    "zone.js": "0.5.10"
  },
  "devDependencies": {
    "concurrently": "^1.0.0",
    "lite-server": "^1.3.1",
    "typescript": "^1.7.3"
  }
}

sourceMapをtrueからfalseに変更したので、コードエディターで、マップファイルは再度生成されませんが、jsファイルは引き続き生成されます。

tsファイルのみで作業したいのですが、jsファイルとjs.mapファイルのブランチを取得したくありません。すべてのtsファイルをアプリフォルダーやすべてのjsとjsなどの通常の開発フローダーに配置するにはどうすればよいですか。ファイルをdistというフォルダにマップしますか?

この良い例は、angular2-webpack-quickstartです。しかし、私は彼らがそれをどのように行うのか理解していませんでしたか?

もちろん、手動ではなく、それを行う方法についてのアドバイス。

ありがとう、


タイプスクリプトをjsにコンパイルする必要があります。これは、ブラウザがどのように読み取るかを示しています。フォーマットを確認してください: 'register'、defaultExtension: 'js' in your index.html
Sari Yono

angle2-webpack-starterは非常に最新で、現在ベータ1です。git(特にgit pull)に慣れることをお勧めします。
ティムマクナマラ2016年

@TimMcNamara 1か月前のようにangular2-webpack-starterを取得して開発を開始しましたが、すでに別のリモートプライベートgithub URLに設定されているため、この場合、angular2-webpack-starterを最新の状態にするにはどうすればよいですか?一部を更新する必要がありますか?ありがとう。
xinrui Ma 2016

あなたはちょうどここから現在のもので、あなたのpackage.jsonを置き換えることができますリンク一掃node_modulesし、npm install最新の状態にすべてのものを持参する
ティム・マクナマラ

やるシャンが言っraheel。除きsystem.config.js「DIST /アプリ」//の代わりに、単に「DIST」:それは「アプリ」でなければなりません
マーティン・クレーマー

回答:


97

おそらく遅いですが、ここに2段階の解決策があります。

ステップ1

次のように更新して、system.config.jsを変更'app''dist/app'ます。

var  map = {
    'app':                        'app', // 'dist/app',
    .
    .
    .
};

これで、次のようになります。

var  map = {
    'app':                        'dist/app', // 'dist/app',
    .
    .
    .
};

ステップ2

distフォルダーを作成します。tsconfig.json

編集して、以下を追加します。

"outDir": "dist"

結果tsconfig.json

{
  "compilerOptions": {
    .
    .
    .
    .

    "outDir": "dist" // Pay attention here
  },
  "exclude": [
    .
    .
    .
  ]
}

実行するnpm startと、distフォルダー内のすべてのコンパイル済みファイル.js.map.jsファイルが表示されます。

:他の回答を確認してください。それらは非常に有用で有益でもあります。


17
私はこれを試しました、それは動作します。残念ながら、私のhtml / cssファイルはdistフォルダーにありません。distフォルダー内のすべてのhtml / cssをコピーするにはどうすればよいですか?ありがとう
Adavo 2016年

これを試してみると、しばらくすると、distフォルダーにアプリディレクトリが作成されます。
cccvandermeer 2016

3
@angularのような必要なnode_modulesをどのように処理しますか?ビルドするたびに、これらすべてをdistディレクトリにコピーする必要がありますか?
ジェレミーモリッツ

4
将来の読者に:質問はhtml/css files is not present in the dist folder...下の答えを持っている
ベンが巻き

「dist」フォルダをコミットする必要はありませんよね?Visual Studioプロジェクトから除外しましたが、それが正しいことを確認したいと思います。
ブライアン

20

私の解決策は上記とは少し異なります。私はここで定義されたAngular2クイックスタートシードから始めていました:https//github.com/angular/quickstart#create-a-new-project-based-on-the-quickstart

そして、以下のみを変更しました。

  • 追加されました"outDir": "../dist"tsconfig.json
  • baseDir内部の属性をbs-config.jsonに変更しました"baseDir": ["dist", "src"]

そして、npm run start(いずれかのコピーがなくても、HTML / CSSおよびその他のファイル)以前のように動作しますが、コンパイル.jsおよび.mapファイルがに組み込まれているdist/appし、あなたの汚染はありませんsrc/appディレクトリを。

これがテストにどのように影響するかはまだテストしていないことに注意してください。


これは最もシンプルでクリーンなソリューションです
JeffG 2017年

これが一番だ!
windchill 2017

できます!しかし、Chrome DevToolsでアプリケーションをデバッグしている私のような問題を抱えている人はいますか?.tsファイルが空白になっています。
アキレス2017

素晴らしいソリューション。本当に簡単でとてもきれいです!
クリバー2017年

17

私も遅れるかもしれませんが、私はこれをしました。

まず、raheelshanが言ったことを実行します。

次に、distフォルダーを作成します。

フォルダを作成したら、ファイルに移動して次tsconfig.jsonを追加します。

"outDir": "dist"

結果として tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false,
    "outDir": "dist"
  },
  "exclude": [
    "node_modules",
    "typings/main",
    "typings/main.d.ts"
  ]
}

あなたは今、実行する場合はnpm start、ファイルを保存すると、あなたはすべてのコンパイル済み見るべき.js.map.jsしてdistのフォルダ。


8

Thanx raheel shan、あなたの答えは有利なスタートを切りました、

@Adavoがコメントで上で正しく尋ねたように

残念ながら、私のhtml / cssファイルはdistフォルダーにありません。distフォルダー内のすべてのhtml / cssをコピーするにはどうすればよいですか?

この質問への答えは、*すべての.tsファイルおよび主に@Componentの「templateURL」プロパティで「/」(ルートディレクトリから)を使用してHTML / CSSファイルへのフルパスを提供することです。

長い時間の後-私はそれを理解しました-Gulpを使用せずに:)Yipppeee


フルパスを提供せずにこれを行うために誰かが提案できる解決策はありますか?...できれば、他の方法で機能するビルドシステムの完全なオーバーホールを必要としない単純なソリューション。
willyC 2016

可能ではないようです。コードの整理を改善するためにangular-cliを試すことができますが、HTMLへのこのフルパスも必要です
Abdeali Chandanwala 2016

私は方法を見つけました!私が以下に提供した答えを参照してください。完璧ではないと思いますが、grunt / gulp / angular-cliを使用せずに、npmスクリプトのみを使用して問題を解決します。私はそれらの解決策に反対しているわけではありませんが、今はそれらを理解することに夢中ではありませんでした!
willyC 2016

私の答えを確認してくださいそれはmodel.idを少し操作することでかなりきれいな変更ですstackoverflow.com/a/40694657/986160–
Michail Michailidis

7

残念ながら、私のhtml / cssファイルはdistフォルダーにありません。distフォルダー内のすべてのhtml / cssをコピーするにはどうすればよいですか?

Angular 2の相対パスは、フレームワークがAngular 2のコンポーネント相対パスの記事に従ってファイル(CommonJ、SystemJなど)をロードする方法に柔軟に対応することを望んでいるため、それほど単純ではありません。

記事で説明module.idされているように、CommonJで使用すると(tsconfig.jsonを確認してください)、モジュールの絶対ルートが含まれ、相対パスを構築するために使用できます。

したがって、より良い代替手段は、css / htmlファイルをtsファイルのままにして、ビルドファイルがdistと呼ばれる別のフォルダーにあると仮定して、以下のようにコンポーネントを構成することです。このようにして、cssファイルとhtmlファイルが派生ビルドパスをそれらを含むソースパスに変換することで相対パスを使用しても問題ありません-基本的に/dist/それを削除または名前変更し/src/ます;)

@Component({
   moduleId: module.id.replace("/dist/", "/"),
   templateUrl: 'relative-path-to-template/component.html',
...
});

ソースとビルドに別々のフォルダーがある場合は、代わりにこれを行うことができます。

@Component({
   moduleId: module.id.replace("/dist/", "/src/"),
   templateUrl: 'relative-path-to-template/component.html',
...
});

2
これは良い回避策ですが...プロジェクトからすべてのプロジェクトファイルをフェッチする際の主な問題は、2つの異なるフォルダーに依存します...単一のフォルダーからブラウザーにコードをデプロイする方法はありますか?よろしく
お願いします

node_modulesの場合でも、ビルドスクリプトを実行していました。通常、各node_modulesには、ソースjsファイルとmin.jsファイルがあります。したがって、ソースコードをデプロイしてから、ビルドスクリプトを実行してnode_moduleの依存関係をダウンロードし、distフォルダーを作成するtypescriptをコンパイルすることが問題になる理由がわかりません。もちろん、別の方法でバンドルを実行するようにwebpackまたは同様のプロセスを構成できます。
Michail Michailidis 2017

7

だから、これを解決するには:

残念ながら、私のhtml / cssファイルはdistフォルダーにありません。distフォルダー内のすべてのhtml / cssをコピーするにはどうすればよいですか?

@raheelshanと@Lirianerの両方の回答の手順を実行します。...それならこれで終わらせることができます。

私はnpmスクリプトを使用して私の目的のためにこれを解決しました。package.jsonファイルのスクリプトセクションは以下のとおりです。解決策は、サーバーと同時にonchnage(npmパッケージ- npm install --save onchange)を実行することtscです。次に、rsyncを使用して、移動するアセットをコピーします。

"scripts": {
    "start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite\" \"npm run watchassets\" ",
    "lite": "lite-server",
    "postinstall": "typings install",
    "tsc": "tsc",
    "tsc:w": "tsc -w",
    "typings": "typings",
    "movesssets": "rsync -a --include='*.css' --include='*.html' --include='*/' --exclude='*' ./app/ ./build/",
    "watchassets": "onchange 'app/**/*.css' 'app/**/*.html' -e 'build/*' -v -- rsync -a --include='*.css' --include='*.html' --include='*/' --exclude='*' ./app/ ./build/"
}

Windowsを使用している場合は、cwRsyncなどのパッケージソリューションrsyncを介して、Cygwinまたはそれを使用して入手できます。


...私はbuildフォルダではなくフォルダを使用していますdistが、あなたはその考えを理解しています。
willyC 2016

1
反対票を投じて申し訳ありませんが、あなたは本当にどこonchangeから来ているのかを追加する必要があります。また、この記事はUNIXライクなシェルでのみ機能することに注意してください。たぶんそれはほとんどの人にとってそれほど問題ではありませんが、私は最近、Windowsを使用している多くの開発者(強制されている)に出くわしました。
jhohlfeld 2016年

OK-どこonchangeから来たのかという説明とrsyncWindowsの入手方法に関する情報を追加しました。これで問題が解決するかどうか教えてください。
willyC 2016

5

@WillyCの提案を試してみましたが、魅力のように機能しました。ファイルにonchange依存関係を追加する必要があることに注意してくださいpackage.json。最初の実行時にクリーンなセットアップを行い、残りのhtml / cssファイルを削除するために少しだけ余分なスクリプトを追加しました(TSCでも同じことができればいいのですが)

とにかく、ここに私のpackage.jsonファイルのセクションがあります

{
  ...
  "scripts": {
    "start": "npm run cleandist && npm run moveassets && tsc && concurrently \"tsc -w\" \"lite-server\" \"npm run watchassets\" ",
    ...
    "cleandist": "rm -rf dist/*",
    "moveassets": "rsync -a --include='*.css' --include='*.html' --include='*/' --exclude='*' ./app/ ./dist/",
    "watchassets": "onchange 'app/**/*.css' 'app/**/*.html' -e 'dist/*' -v -- rsync -a --include='*.css' --include='*.html' --include='*/' --exclude='*' --delete ./app/ ./dist/"
  },
  ...
  "devDependencies": {
    ...
    "onchange":"^3.0.2"
  }
}

rsync削除については、スクリプトのコマンドの--deleteフラグに注意してくださいrsyncwatchassets


3

Angular2TypeScriptファイルとJavaScriptファイルを別のフォルダーに

これがAngular2の最新バージョンV2.1.1の設定で、非常にうまく機能します!

tsconfig.json

{
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "moduleResolution": "node",
        "sourceMap": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "removeComments": false,
        "noImplicitAny": false,
        "outDir": "./app/dist"
    }
}

systemjs.config.js

/**
 * System configuration for Angular samples
 * Adjust as necessary for your application needs.
 */
(function (global) {
  System.config({
    paths: {
      // paths serve as alias
      'npm:': 'node_modules/'
    },
    // map tells the System loader where to look for things
    map: {
      // our app is within the app folder
      // app: 'app/dist',  &&  main: './dist/main.js',
      // Error: (SystemJS) XHR error (404 Not Found) loading http://localhost:3000/app/dist/dist/main.js(…)
      app: 'app',
      // angular bundles
      '@angular/core': 'npm:@angular/core/bundles/core.umd.js',
      '@angular/common': 'npm:@angular/common/bundles/common.umd.js',
      '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
      '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
      '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
      '@angular/http': 'npm:@angular/http/bundles/http.umd.js',
      '@angular/router': 'npm:@angular/router/bundles/router.umd.js',
      '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
      '@angular/upgrade': 'npm:@angular/upgrade/bundles/upgrade.umd.js',
      // other libraries
      'rxjs':                      'npm:rxjs',
      'angular-in-memory-web-api': 'npm:angular-in-memory-web-api/bundles/in-memory-web-api.umd.js'
    },
    // packages tells the System loader how to load when no filename and/or no extension
    packages: {
      app: {
        // index.html import path
        // Error: (SystemJS) XHR error (404 Not Found) loading http://localhost:3000/app/dist/main.js(…)
        // app: 'app/dist',  &&  main: './main.js',
        main: './dist/main.js',
        defaultExtension: 'js'
      },
      rxjs: {
        defaultExtension: 'js'
      }
    }
  });
})(this);

ここに画像の説明を入力してください



1
:私はこの行を変更するまで、これが私のために動作しませんでしたmain: './dist/app/main.js',
RichC

この投稿とコメント+ stackoverflow.com / a / 40694657/5393271が仕事をします。app / components /mycomp.components.tsなどのサービスまたはコンポーネントを含むアプリ内に異なるフォルダーがある場合。app / services / myservice.service.ts npm start(building)
sTx

あなたもこれを行うことができます。中system.js.configに-map{app:"dist",..}その後、中packages{app{main:"app/main.js"}}}と中tsconfig.json- "outDir": "dist"+ HTML / CSSのソース
STX

3

@Nagylに触発されて、私は独自の方法を開発しました。共有する価値があると信じています。

1)cpxをインストールします

npm install cpx

2)bs-config.jsonを更新し、baseDirを「src」から「dist」に変更します

"baseDir":"dist"

3)tsconfig.jsonを更新し、compilerOptionsの最後にoutDirを追加します。

"outDir": "../dist"

4)package.jsonを更新します:4.1)スクリプトの最後に新しいコマンドを追加します:

"cpx": "cpx \"src/**/*.{html,css,js,png,jpg}\" dist --watch"

4.2)「開始」行を変更して「cpx」コマンドを含めます。

"start": "concurrently \"npm run build:watch\" \"npm run cpx\" \"npm run serve\"",

ステップ2の変更

ステップ3の変更

ステップ4の変更


2

あなたはtranspileできる.tsと同じように、ブラウザでファイルをplunkerがそれらの角度2つのTSテンプレートでやっています。

エディタを起動し、[新規]、[AngularJS]、および2.0.x(TS)オプション(一番下)を選択するだけです。しかし、webpack(または他のバンドルツール)を使用することの全体的なポイントは、ファイルをローカルにトランスパイルすることです。


2

私は、上記のオプションのいくつか試して、最終的には、これは私がに落ち着いものです:ピープ-拡張のためにVisual Studio Code

インストールする方法:

  • 表示->拡張機能
  • のぞき見
  • インストール
  • リロード
  • 表示->コマンドパレット
  • のぞき見なし
  • 必要に応じて.vscode / settings.jsonを変更します(以下に示すもの)

-

{
  "typescript.check.workspaceVersion": false,
  "files.exclude": {
    "**/*.js": true,
    "**/*.js.map": true,
    "node_modules/": true,
    "dist/": true,
    "lib/": true
  }
}

2017年1月25日-更新: angular-cliは箱から出して、これを処理します。とインストールが動作し、今。


2

ここにリストされている解決策を試しました。それらは良いですが、私には理想的ではありません。簡単な解決策が欲しいです。すべてのコンポーネントファイルにパス情報をハードコーディングしたくありません。これを処理するためにこれ以上npmパッケージをインストールしたくありません。

だから私は最も簡単な代替案を考え出します。これはこの質問に対する直接の答えではありませんが、私にとっては非常にうまく機能します。

js下のファイルが表示され/appないように、ワークスペースの設定を微調整しました。彼らはまだそこにいます。それらは私のワークスペースから隠されているだけです。私にとっては、それで十分です。

私はSublimeTextを使用しているので、プロジェクト設定用に次のように設定します。

"file_exclude_patterns": ["app/*.js"]

他の多くのエディターにも同様の機能があると思います。

更新:

AngularCLIを使用するだけです。すべてが自動的に処理されます。


2

クイックスタートからのファイルを含むAngular4の場合、私がしなければならなかったのは次のことだけでした(前述の回答の組み合わせですが、値がわずかに異なります):

  • tsconfig.json(追加): "outDir": "../dist"
  • bs-config.json(変更): "baseDir": ["dist", "src"],
  • bs-config.e2e.json(変更): "baseDir": ["dist", "src"],

systemjs.config.jsに変更はありません。


1

@raheelの提案を試してみましたが、うまくいきました。必要に応じて構造を変更しました。

私は次の構造を使用しています

私は次の構造を使用しています

これを取得するために、2つのファイル1.systemjs.config.jsと2.tsconfig.jsonのみを変更しました。

systemjs.config.jsで私はに変更しました

map: { // previously it was app: 'app', app: 'app/js', ...

systemjs.config.js

tsconfig.jsonに追加する必要があります "outDir": "app/js"

tsconfig.json


私はあなたがメンテナンスするものは何でも同じことをしていますが、npmの開始後に.jsファイルがapp / jsフォルダーに作成されません
priyanka ahire 2017年

1

私はAngular2.4を使用しています。それを機能させるには、追加の手順が必要でした。これは、index.htmlのmain.jsファイルへのsystemJs参照の更新でした。

System.import( 'main.js')。catch(function(err){console.error(err);});

に:

System.import( 'dist / main.js')。catch(function(err){console.error(err);});


0

raheelshanが言ったことに加えて。正しいjavascriptファイルをインポートするために、index.htmlに追加の変更を加える必要がありました。

これが私の側からの要約です。

tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [ "es2015", "dom" ],
    "noImplicitAny": true,
    "suppressImplicitAnyIndexErrors": true
  }
}

後:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [ "es2015", "dom" ],
    "noImplicitAny": true,
    "suppressImplicitAnyIndexErrors": true,
    "outDir": "dist"
  },
  "exclude": [ 
    "node_modules",
    "typings/main",
    "typings/main.d.ts"
  ]
}

systemjs.config.js

前:

'app': 'app',

後:

'app': 'dist/app', //'app

index.html

前:

System.import('main.js').catch(function(err){ console.error(err); });

後:

System.import('dist/main.js').catch(function(err){ console.error(err); });
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.