ローカルホストで正常に動作するアプリがあります。
今日、子アプリケーションとしてIISサーバーに配置しようとしました。したがって、新しいパスはlocalhost/SubDirになります。
System.jsは、今どこでもモジュールをロードしようとしています。 basePathを設定し、path/map config変数を数時間使用しましたが、魔法の設定に到達できませんでした。
誰かが私が微調整したいアイデア、またはデバッグに役立つ何かを持っていますか?
インデックスHTML
<html>
<head>
<script src="~/node_modules/es6-shim/es6-shim.js"></script>
<script src="~/node_modules/systemjs/dist/system.src.js"></script>
<script src="~/node_modules/angular2/bundles/angular2.dev.js"></script>
<script src="~/node_modules/angular2/bundles/http.dev.js"></script>
<script src="~/node_modules/angular2/bundles/router.dev.js"></script>
<link href="~/node_modules/bootstrap/dist/css/bootstrap.css" rel="stylesheet" />
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<link href="~/assets/css/site.css" rel="stylesheet" />
<script>
System.config({
packages: { 'app': { defaultExtension: 'js' } },
baseURL: '/MedicheckAngular/',
paths: {
//'angular2/*': 'node_modules/angular2/ts/*.js'
}
});
System.import('app/app');
</script>
</head>
<body>
<my-app>loading...</my-app>
</body>
</html>
そしてアプリのエントリーポイント
import {HTTP_PROVIDERS} from 'angular2/http';
import {bootstrap, bind, provide} from 'angular2/angular2';
import {RouteConfig, RouteParams, ROUTER_DIRECTIVES, APP_BASE_HREF, ROUTER_BINDINGS, LocationStrategy, PathLocationStrategy, HashLocationStrategy} from 'angular2/router';
import {AppLayout} from './components/app-layout/app-layout';
bootstrap(AppLayout, [
ROUTER_BINDINGS,
HTTP_PROVIDERS,
provide(APP_BASE_HREF, {useValue:'/'}),
provide(LocationStrategy, { useClass: HashLocationStrategy })
]);
アプリのフォルダー構造
Apacheを使用してサブディレクトリでホストするには、次のようにします。
次のようなビルドコマンド:ng build --base-href/myapp /
.htaccessファイルは次のようになります
RewriteEngine On
RewriteBase /myapp/
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.html [L,QSA]
systemjsの構成からbaseURLを削除し、<base href="MedicheckAngular/" />
HTML DOMの頭の部分に。
ルートから「modules/angular」サブフォルダーにAngular2アプリがありました。 `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hallo</title>
<base href="modules/angular/">
</head>
<body>
<myapp>loading...</myapp>
<script src="/modules/angular/node_modules/es6-shim/es6-shim.min.js"></script>
<script src="/modules/angular/node_modules/systemjs/dist/system-polyfills.js"></script>
<script src="/modules/angular/node_modules/angular2/es6/dev/src/testing/shims_for_IE.js"></script>
<script src="/modules/angular/node_modules/angular2/bundles/angular2-polyfills.js"> </script>
<script src="/modules/angular/node_modules/systemjs/dist/system.src.js"></script>
<script src="/modules/angular/node_modules/rxjs/bundles/Rx.js"></script>
<script src="/modules/angular/node_modules/angular2/bundles/angular2.dev.js"></script>
<script>
System.config({
packages: {
"apps": {
format: 'register',
defaultExtension: 'js'
}
}
});
System.import('apps/main').then(null, console.error.bind(console));
</script>
</body>
</html>`
「ベースhref」に〜を付けます
<!-- Angular2 Code -->
<base href="~/">
<link rel="stylesheet" href="styles.css">
<!-- Polyfill(s) for older browsers -->
<script src="~/node_modules/core-js/client/shim.min.js"></script>
<script src="~/node_modules/zone.js/dist/zone.js"></script>
<script src="~/node_modules/reflect-metadata/Reflect.js"></script>
<script src="~/node_modules/systemjs/dist/system.src.js"></script>
<script src="~/systemjs.config.js"></script>
<script>
System.import('app').catch(function(err){ console.error(err); });
</script>
<!-- Angular2 Code -->
ドメイン内の非ルートパスに展開する場合は、次を手動で更新する必要があります。
<base href="/">
に:
<base href="/MedicheckAngular/">
あなたのdist/index.html
、または次のように変更します。
baseUrl: '/MedicheckAngular/'
in webpack.common.js
。/MedicheckAngular/
のリンクへindex.html
。似たようなことをするのにしばらく苦労しました。 Apacheサーバーでwordpressを実行しています。 SEOの理由から、php [myadmin]がホストされる方法で、angularアプリをサブフォルダーでホストすることを望みました。
これはうまくいきました。
私が試した他のことは、次の理由で私に満足を与えませんでした:
それが未来の読者に役立つことを願っています。
これが私たちのために働いたものです:
ベース参照が、angularプロジェクトを含むサブディレクトリを指すようにします。これにより、すべてのnode_module依存関係が検出されるようになります。
異なるAPP_BASE_HREFを使用してPathLocationStrategyを構成し、実際のangularアプリに対してhtml5モードが引き続き機能するようにします。
bootstrap(AppComponent、[..... bind(APP_BASE_HREF).toValue( "/ yardmap/planning")
参照: https://angular.io/docs/ts/latest/api/common/index/APP_BASE_HREF-let.html
サブディレクトリが事前にわからない場合は、次のように/src/index.html
ファイルでパスとしてドットを使用できます。
<base href=".">
次に、コマンドng build --prod
を使用してビルドします。その後、通常どおり/dist
ディレクトリ内から出力を取得します。
これで、アプリを任意のWebディレクトリに配置したり、ファイルシステムからでも動作させることができます(制限されたAPIが使用されていない場合)。
サブディレクトリでAngular appを実行するための完全な設定。
エイリアスパスとして「ng-app /」を想定しています。たとえば、http://www.example.com/ng-app/
Apacheの構成
Alias /ng-app /<Directory path of index.html>/
Alias /assets /<Directory path of index.html>/assets/
<Directory /<Directory path of index.html>>
DirectoryIndex index.html
Require all granted
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*) /index.html [NC,L]
</Directory>
Index.htmlでbaseUrlを設定します
<base href="/ng-app/">
角度アプリがリロード時に機能しないと仮定し、LocationStrategy
プロバイダーをapp.module.ts
に追加します
import {LocationStrategy, HashLocationStrategy} from '@angular/common';
@NgModule({
providers: [
{provide: LocationStrategy, useClass: HashLocationStrategy}
]
});
サブフォルダーを見逃していると思います。
「index.html」ファイルに入れたものは、ロードするファイルがホームディレクトリにあることを意味します。
/home/<your_directory>/[...] <- You try to load files from there.
サーバー構造はもっと似ていると思います。
/home/<your_directory>/***<app_folder>***/[...] <- I think your files are located here.
サーバーへのコンソールアクセスがある場合は、たとえばpwdを使用してアプリケーションフォルダーを見つけてから、置き換えますあなたの 'index.html' '〜/'あなたの srcは、返されたパスのタグで、期待どおりに機能します。
これ以上行う必要はありません。index.htmlのビルドプロジェクトの1行後に変更するだけです
<base href="/">
に
<base href="/sub directory_name/">
サブディレクトリ内の詳細なルートにアクセスする場合は、こちらから https://angular.io/guide/deployment#production-servers