バンドルからのリソースの除外
gruntfile.jsでは、vb-require-bundleタスクを構成して、アプリケーションのパッケージ化時にGruntオプティマイザ(grunt vb-optimize)がアプリケーションのリソース・バンドルから除外するリソースを指定できます。
次に、my-bundleという名前のリソース・バンドルを作成するように構成されたvb-require-bundleタスクの例を示します。 「my-bundle」に含まれて除外する必要があるリソースは、「find」要素の下に一覧表示されます(太字):
module.exports = (grunt) => {
grunt.initConfig({
'vb-require-bundle': {
"webApps/dcs": {
"options": {
"transpile": true,
"minify": true,
"bundles": {
"my-bundle": {
"modules": {
"find": [
"app-flow.json",
"app-flow.js",
"^build",
"!^build/components/oj-odcs/",
"^flows/",
"^pages/",
"^resources/strings",
"^resources/css",
"^services/",
]
}
}
}
}
}
}
}),
require('load-grunt-tasks')(grunt);
};「find」要素には正規表現のリストが含まれます。 前述の例では、Gruntオプティマイザを実行すると、モジュール内のリソースのバンドルexceptにリストされているすべてのリソースに感嘆符(!)プレフィクス(!^build/components/oj-odcs/)が付加されます。 バンドルから除外するリソースをマークするには、感嘆符(!)を前に付けます。
ノート:
settings/build.jsonでバンドル構成を定義することもできます。 ビジュアル・アプリケーションを開発する場合、build.jsonはwebApps/foo/settings/build.jsonにあります。拡張機能の開発時には、extension1/sources/settings/build.jsonにあります。
次に、build.jsonファイルの例を示します:
{
"configuration": {
"minify": false,
"bundles": {
"coolBundle": {
"modules": {
"find": [
".*\\.(json|js)$"
]
}
}
}
}
}この例では、configuration要素は、前述のgrunt構成例のwebApps/dcs/options要素に対応します。
build.jsonファイルとgrunt構成の両方が存在する場合、build.jsonファイルが優先されます。
resources/components/old-componentに、バンドルから除外するサード・パーティ・ライブラリ(ckeditorなど)を含むwebコンポーネントがあるとします。
次のような行を使用して、コンポーネント全体を除外できます:
"!^resources/components/old-component",これにより、old-componentディレクトリ内のすべてのリソース(コンポーネント自体を含む)が除外されます。 コンポーネントをバンドルに含め、サードパーティ・ライブラリのみを除外する場合は、次のようなものを使用できます:
"!^resources/components/old-component/older-libraries",resources/components/old-component/older-librariesディレクトリには、除外するサード・パーティ・ライブラリが含まれます。
ノート:
これにより、個々のファイルがデプロイメントから削除されるわけではありません。 バンドルされていないリソースは、引き続きランタイムに正しくロードされます。 ブラウザによって必要なリソースがロードされ、アプリケーションのパフォーマンスに影響する可能性があります。
依存関係に必要なリソースの無視
そのため、find要素でolder-librariesを除外しましたが、オプティマイザを実行すると、older-librariesはバンドルされたままになり、アプリケーションが中断されます。 なぜですか。
これは、バンドルに「参照」からolder-librariesリソースまでのコードがあるためです。 これは、old-component自体のコードの場合もあれば、older-librariesリソースを参照するアプリケーション内の他のコードの場合もあります。 たとえば、app-flow.jsには次のようなものが含まれます:
define(['old-component/older-libraries/obsoletemodule'], (obsoletemodule) => {
obsoletemodule.function();
});オプティマイザ( grunt vb-optimize)を実行すると、オプティマイザは最初にolder-librariesリソースを除外しますが、app-flow.jsからの依存関係のためにバンドルにolder-libraries/obsoletemoduleを含めます。
このような場合は、emptyPaths要素をバンドル構成に追加して、依存性(およびサブ依存性)を無視するようにオプティマイザに指示できます:
grunt.initConfig({
'vb-require-bundle': {
"webApps/dcs": {
"options": {
"transpile": true,
"minify": true,
"emptyPaths": ["older-libraries"],
"bundles": {
"my-bundle": {
"modules": {
"find": [これにより、older-librariesというプレフィクスが付いたモジュール・パスを無視(バンドルではない)するようオプティマイザに指示されます。
ノート:
前述のモジュール・パスの例では、/resources/components/*に格納されている物理リソースがapp-flow.jsonにマップされていることを前提としています。 たとえば、webコンポーネントでは、resources/components/myWebComponentではなく、単にmyWebComponentを参照します。
find要素はマッピングを考慮しないため、パターンは物理ファイル・パスと一致する必要があります。 ただし、emptyPaths要素はrequirejsパス構成を尊重します。