Vue CLI ビルド ターゲット

vue-cli-service build を実行するときは、--target オプションを使用して別のビルド ターゲットを指定できます。同じソース コードを使用して、さまざまなユースケースに応じてさまざまなビルドを生成できます。

応用

アプリケーション モードがデフォルトのモードです。このパターンでは:

  • Index.html には、注入されたリソースとリソース ヒントが含まれます
  • キャッシュを改善するために、サードパーティのライブラリは別のパッケージに分割されます。
  • 4kb 未満の静的リソースは JavaScript でインライン化されます
  • パブリックの静的リソースは出力ディレクトリにコピーされます

図書館

IEの互換性に関する注意事項

ライブラリ モードでは、プロジェクトの publicPath は、メイン ファイルのロード パスに従って動的に設定されます(動的リソース ロード機能をサポートするため)。ただし、この機能は document.currentScript を使用するため、IE ブラウザはこの機能をサポートしていません。したがって、Web サイトが IE をサポートする必要がある場合は、 ライブラリを使用する前にページにcurrent-script-polyfillを導入することをお勧めします。

Vue への依存関係に注意してください

ライブラリ モードでは、Vue は外部です。これは、コードに Vue をインポートした場合でも、パッケージには Vue が存在しないことを意味します。ライブラリがバンドラーを通じて使用される場合、依存関係としてバンドラーを通じて Vue をロードしようとします。それ以外の場合は、グローバル Vue 変数にフォールバックします。

この動作を回避するには、ビルド コマンドに --inline-vue フラグを追加します。

vue-cli-service build --target lib --inline-vue

次のコマンドを使用して、単一のエントリをライブラリとして構築できます。

vue-cli-service build --target lib --name myLib [entry]
File                     Size                     Gzipped

dist/myLib.umd.min.js    13.28 kb                 8.42 kb
dist/myLib.umd.js        20.95 kb                 10.22 kb
dist/myLib.common.js     20.57 kb                 10.09 kb
dist/myLib.css           0.33 kb                  0.23 kb

このエントリは、.js ファイルまたは .vue ファイルにすることができます。エントリが指定されていない場合は、src/App.vue が使用されます。

ライブラリを構築すると、次の出力が出力されます。

  • dist/myLib.common.js: バンドラー用 CommonJS パッケージ (残念ながら、webpack はまだ ES モジュール出力形式をサポートしていません)
  • dist/myLib.umd.js: ブラウザまたは AMD ローダー用の直接の UMD パッケージ
  • dist/myLib.umd.min.js: 縮小された UMD ビルド
  • dist/myLib.css: 抽出された CSS ファイル ( vue.config.js で css: { extract: false } を設定することで強制的にインライン化できます)

警告する

ライブラリまたはマルチプロジェクト リポジトリ (モノリポジトリ) を開発している場合は、CSS のインポートには副作用があることに注意してください。package.json の「sideEffects」: false を必ず削除してください。削除しない場合、CSS ブロックは運用ビルド中に webpack によって破棄されます。

Vue と JS/TS エントリ ファイルの比較

.vue ファイルをエントリ ポイントとして使用する場合、コンポーネントはデフォルトで常にエクスポートされるため、ライブラリは Vue コンポーネント自体を直接公開します。

ただし、.js または .ts ファイルをエントリ ポイントとして使用する場合、名前付きエクスポートが含まれる可能性があるため、ライブラリはモジュールとして公開されます。つまり、UMD ビルドでは window.yourLib.default 経由で、CommonJS ビルドでは const myLib = require('mylib').default 経由でライブラリにアクセスする必要があります。名前付きエクスポートがなく、デフォルトのエクスポートを直接公開したい場合は、 vue.config.js で次の Webpack 構成を使用できます。

module.exports = {
  configureWebpack: {
    output: {
      libraryExport: 'default'
    }
  }
}

Web コンポーネントコンポーネント

互換性に関するヒント

Web コンポーネント モードは、IE11 以前のバージョンをサポートしていません。さらに詳しく

Vue への依存関係に注意してください

Web コンポーネント パターンでは、Vue は外部です。これは、コードに Vue をインポートした場合でも、パッケージには Vue が存在しないことを意味します。ここでのパッケージは、ページ内で利用可能なグローバル変数 Vue がすでに存在することを前提としています。

次のコマンドを使用して、単一のエントリを Web コンポーネント コンポーネントとして構築できます。

vue-cli-service build --target wc --name my-element [entry]

ここでのエントリは *.vue ファイルである必要があることに注意してください。Vue CLI はこのコンポーネントを自動的にラップして Web コンポーネント コンポーネントとして登録します。main.js に登録する必要はありません。開発中にデモ アプリとして main.js だけを使用することもできます。

ビルドでは、すべてがインライン化された単一の JavaScript ファイル (およびその縮小バージョン) が生成されます。このスクリプトが Web ページにインポートされると、@vue/web-component-wrapper を使用してターゲットの Vue コンポーネントをラップするカスタム コンポーネント <my-element> が登録されます。このラッパーは、プロパティ、属性、イベント、スロットを自動的にプロキシします。詳細については、@vue/web-component-wrapper のドキュメントを参照してください 。

このパッケージは、ページ上でグローバルに利用できる Vue に依存していることに注意してください。

このパターンにより、コンポーネントのコンシューマーは、Vue コンポーネントを通常の DOM 要素として使用できるようになります。

<script src="https://unpkg.com/vue" rel="external nofollow"  rel="external nofollow" ></script>
<script src="path/to/my-element.js"></script>

<!-- 可在普通 HTML 中或者其它任何框架中使用 -->
<my-element></my-element>

複数の Web Components コンポーネントを登録するパッケージ

Web コンポーネント パッケージを構築するときは、glob 式をエントリとして使用して、複数のコンポーネント ターゲットを指定することもできます。

vue-cli-service build --target wc --name foo 'src/components/*.vue'

複数の Web コンポーネントを構築する場合、 --name を使用してプレフィックスを設定し、カスタム要素の名前はコンポーネントのファイル名から推測されます。たとえば、HelloWorld.vue という名前のコンポーネントに --name foo を指定すると、<foo-hello-world> という名前のカスタム要素が生成されます。

非同期 Web コンポーネントのコンポーネント

複数の Web コンポーネントをターゲットにすると、バンドルが非常に大きくなる可能性があり、ユーザーはバンドルに登録されているコンポーネントのサブセットのみを使用したい場合があります。このとき、非同期 Web コンポーネント モードは、すべてのコンポーネントで共有されるランタイムを含むコード分割パッケージを生成し、すべてのカスタム コンポーネントの小さなエントリ ファイルを事前登録します。コンポーネントの実際の実装は、カスタム要素の対応するインスタンスがページで使用されている場合にのみ、オンデマンドで取得されます。

vue-cli-service build --target wc-async --name foo 'src/components/*.vue'
File                Size                        Gzipped

dist/foo.0.min.js    12.80 kb                    8.09 kb
dist/foo.min.js      7.45 kb                     3.17 kb
dist/foo.1.min.js    2.91 kb                     1.02 kb
dist/foo.js          22.51 kb                    6.67 kb
dist/foo.0.js        17.27 kb                    8.83 kb
dist/foo.1.js        5.24 kb                     1.64 kb

これで、ユーザーはこのページで Vue とこのエントリ ファイルを導入するだけで済みます。

<script src="https://unpkg.com/vue" rel="external nofollow"  rel="external nofollow" ></script>
<script src="path/to/foo.min.js"></script>

<!-- foo-one 的实现的 chunk 会在用到的时候自动获取 -->
<foo-one></foo-one>

おすすめ

転載: blog.csdn.net/2201_75866484/article/details/130334385