2017-05-18 9 views
0

背景

私はバンドルのためのWebpack2を使用して、Aureliaを使用してプロジェクトを作成しようとしています。コードはTypeScriptを使って書かれています。私はを使用してNPMの依存関係を処理します。複数のバンドル2

私のウェブページは、複数のコアHTMLページで構成されます。アイデアは、これらのページのそれぞれに1つのAurelia Appを持つことです。

これらの各ページのindex.html<div aurelia-app="some_module">となり、それぞれ異なるモジュールを参照します。これらはそれぞれ独自のバンドルに配置されています。それらの間の共有コードは別々のバンドルにあります。次のように

現在の設定

私のディレクトリ構造はなります

aurelia-webpack/src/monitor/ # main.ts, app.ts, app.html 
aurelia-webpack/src/test/  # main.ts, app.ts, app.html 

だから私はこのWebPACKのコンフィグを持って開始します。

<div aurelia-app="main"> 
    <p>Loading...</p> 
    <script src="{% static "aurelia-webpack/dist/app.js" %}"></script> 
</div> 

その後、私は、この設定を持っている:私のindex.htmlは、この({% staticものはジャンゴからである)のように見えます。

webpack.config.js

var path = require('path'); 
const { AureliaPlugin } = require('aurelia-webpack-plugin'); 
const { optimize: { CommonsChunkPlugin }, ProvidePlugin } = require('webpack'); 

module.exports = { 
    entry: { 
     app: ['aurelia-bootstrapper'], 
     vendor: ['bluebird', 'jquery', 'bootstrap'], 
    }, 
    output: { 
     filename: "[name].js", 
     chunkFilename: "[name].js", 
     sourceMapFilename: "[name].js.map", 
     publicPath: "/dist/", 
     path: path.resolve(__dirname, 'dist') 
    }, 
    resolve: { 
     extensions: [".ts", ".js"], 
     modules: [ 
      "src/monitor", 
      "node_modules" 
     ].map(x => path.resolve(x)) 
    }, 
    module: { 
     rules: [ 
      { test: /\.css$/i, use: ["style-loader", "css-loader"] }, 
      { test: /\.ts$/, loader: "awesome-typescript-loader" }, 
      { test: /\.html$/, loader: "html-loader" } 
     ] 
    }, 
    plugins: [ 
     new AureliaPlugin(), 
     new ProvidePlugin({ 
     $: "jquery", 
     jQuery: "jquery" 
    }) 
    ] 
} 

結果

これはmonitorのhello世界のアプリで正常に動作します。

... 
[app] ./src/monitor/app.ts 156 bytes {0} [built] 
[app.html] ./src/monitor/app.html 57 bytes {0} [built] 
[main] ./src/monitor/main.ts 267 bytes {0} [built] 
... 

をそして私はページの罰金を読み込むことができますし、期待どおりにレンダリング:私はWebPACKのを使用してビルドするとき、私はこれを見ることができます。

ご覧のとおり、aurelia-webpack-pluginaurelia-bootstrapperを使用しています。私がそれを正しく理解していれば、ブートストラップは<div>aurelia-appタグを見つけ、そこにaureliaビットを注入する責任を負うものです。モジュール名はmainです。私main.ts

内容:

import { Aurelia, PLATFORM } from 'aurelia-framework'; 

export function configure(aurelia: Aurelia) 
{ 
aurelia.use 
     .standardConfiguration() 
     .developmentLogging(); 
aurelia.start().then(() => aurelia.setRoot(PLATFORM.moduleName('app'))); 
} 

混乱

しかし、これらの二つは、私は以下の苦労を持っているいくつかの「魔法」のことをやっています。

たとえば、moduleの名前がどのように決定されたか分かりません。この場合はmainですが、明示的に設定することはありません。それは何とかaurelia-bootstrapperまたはaurelia-webpack-pluginで行われますか?

それはたくさん明確であるエントリにWebPACKのマニュアルを読んで: https://webpack.js.org/configuration/entry-context/#entry

単純なルール:HTMLページごとに1つのエントリポイント。 SPA:1つのエントリポイント、MPA:複数のエントリポイント。

entry: { 
home: "./home.js", 
about: "./about.js", 
contact: "./contact.js" 
} 

は、私は上記のすべてと

を欲しい、私が今欲しいのは正しい用語が何であれ、よりエントリー・ポイント/モジュール/アプリケーションを追加したりすることができることです。

私は2つの以上のインデックスファイルを作成することができるようにしたい:

モニター

<div aurelia-app="monitor"> 
    <p>Loading...</p> 
    <script src="{% static "aurelia-webpack/dist/monitor.js" %}"></script> 
</div> 

テスト

<div aurelia-app="test"> 
    <p>Loading...</p> 
    <script src="{% static "aurelia-webpack/dist/test.js" %}"></script> 
</div> 

これらのそれぞれが独自のバンドルを持ちます/ entry point/module/app、これで設定するにはWebpackおよびAurelia

aurelia-webpack-pluginのユースケースは、何とか1つのエントリポイントに限定されていますか?私はsrc/monitor/main.tssrc/test/main.tsの明示的なエントリを追加しようとしましたが、正しく動作するように何も得られません。

+0

あなたはこれを手に入れましたか? – m0ngr31

+0

はい、投稿した回答を読んでください – Joakim

答えて

0

私は、これは仕様によるものと説明しアウレリア - WebPACKの githubのプロジェクトでこの問題を見つけました: https://github.com/jods4/aurelia-webpack-build/issues/35#issuecomment-302657535

要約が1は、各エントリポイントのために複数のコンパイルを使用しなければならないことです。 webpackの設定はJavaScriptであるため、これらの設定は基本設定のほとんどの設定を共有し、各設定項目の設定を単純にインポートすることができます。

詳細とコンテキストについては、問題のスレッドをご覧ください。

作者は、上記のスレッドで、この上で明確に:

あなたは正しいですが、プラグインAPIは、最初に単一のエントリポイント (SPA)のために設計されています。他のコメントからのステップでは、 複数のエントリーポイントが機能しない理由はありませんが、 は、Aurelia + Webpack + プラグインがどのように連携しているかを深く理解することが難しいです。これが十分に一般的であれば、複数のエントリポイントのサポートを単純化することについて、 と考えるべきかもしれません。 (今は の計画はありませんが、どうしてですか?)

+0

私はASPNETコアに基づいたプロジェクトではまったく同じことをやっています。私は、ベンダー資産のための一般的なWebpackバンドルを作成し、次に効果的に独立したAureliaアプリケーションである各ページのバンドルを作成しました。あなたが持っているものと同じもの、つまりAureliaアプリをブートストラップするページで参照します。これは私のアプリごとにwebpackの設定があることを意味します。 webpack.config.monitor.js&webpack.config.test.js。これもあなたがやっていることですか? J – jcaddy

+0

ありがとうございます – Joakim

0

私のコメントをフォローアップしてください。私のウェブパック設定の関連セクションのスクリーンショットです。

マイダッシュボードページ - webpack.config.dashboard.js

weback.config.dashboard.js

マイアカウントページで作成されたdashboard.js - webpack.config.accountによって作成account.js。JS

weback.config.account.js

これはので、私はなぜそれが考えていない他のフレームワークのための理由を見ていない私自身のASPNETコアアプリで作業を行います。また、vendor.jsファイルを作成し、Webpack DLLプラグインを使用して、アプリケーションページスクリプトが参照できるマニフェストファイルを作成することで、それぞれの「app」固有のjsファイルのライトを保持することもできます。

しかし、これがうまくいく間に、私はそれが結果を達成する最良の方法であるとは確信していません。各「ページ」は完全に独立したAureliaアプリなので、他のブラウザ手段を使用して状態を共有することしかできません。セッションまたはローカルストレージ。私はアプリの機能を分割する方法としてAurelia "機能"を見ているかもしれません - 一種の意味があります。

関連する問題