webpack と rollup を使用してコンポーネント ライブラリをパッケージ化する方法

webpack と rollup を使用してコンポーネント ライブラリをパッケージ化する方法

序文

以前、ローディングスタイルのコンポーネントを作成しました。コードの再利用性を実現するために、この小さなプロジェクトをパッケージ化して npm で公開しました。パッケージングと配布の過程で、次々とエラーが発生していました。@buzuosheng/loading コンポーネントはバージョン 2.7.0 に到達しました。まだ調整する箇所はありますが、ようやく使えるようになりました。

webpackとrollupの比較

Webpack は、プログラマーの間で最もよく使用されるパッケージング ツールです。面接では、Webpack に関する質問がよく出されますが、Rollup に関する質問はそれほど多くありません。この現象の理由の 1 つは、アプリケーション開発には webpack を使用し、ライブラリ開発には rollup を使用するという考え方です。

ただし、どちらのパッケージング ツールも強力なプラグイン開発機能を備えており、機能の違いはますますあいまいになっていますが、rollup の方が使いやすく、より小さなファイルを生成できます。しかし、フロントエンド アプリケーションを作成する場合、パフォーマンス分析にはより小さなライブラリが必要になることが多いため、ロールアップは開発ライブラリの要件により適合します。

これはパッケージ化の実験であり、プロジェクトをパッケージ化するために 2 つのツールを使用します。

webpack によるバンドル

パッケージ化する前に、package.json ファイル内のいくつかのフィールドを追加または変更する必要があります。

{
 // プログラムのメインエントリモジュール。ユーザーはこのモジュールのエクスポートを参照します "main": "dist/bundle.js",
 // プロジェクトに含まれるファイル "files": [
  「ソース」、
  「距離」
 ]、
 // react と react-dom を依存関係と互換性のあるこの構成に移動します "peerDependencies": {
  "反応": "^17.0.1",
  "反応dom": "^17.0.1"
 },
}

Webpack のパッケージ化には、さまざまなファイルを処理するための多くのライブラリが必要です。このプロジェクトは比較的小規模なので、使用されるライブラリは 2 つだけです。

// webpack.config.js
定数パス = require('path');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

モジュール.エクスポート = {
 モード: 'production'、
 エントリ: './src/Loading.jsx',
 出力: {
  ファイル名: "index.js",
  パス: path.join(__dirname, "./dist/"),
  ライブラリターゲット: 'umd',
 },
 最適化:
  最小化: false、
 },
 解決する: {
  拡張子: ['.jsx']
 },
 モジュール: {
  ルール:
   {
    テスト: /\.css$/,
    ローダー: [MiniCssExtractPlugin.loader, 'css-loader?modules'],
   },
   {
    テスト: /\.(js|jsx)$/,
    ローダー: "babel-loader",
    除外: /node_modules/、
   },
  ]
 },
 プラグイン: [
  新しい MiniCssExtractPlugin({
   filename: "main.min.css" // 抽出された CSS ファイルのファイル名})
 ]、
}

開発環境と本番環境の両方の構成について書くべきでしたが、ここでは本番環境の構成についてのみ書きました。

ロールアップを使用する

ロールアップで使用されるライブラリは他にもあります。

// ロールアップ.config.js
// rollup が commonjs を認識できない問題を解決する import commonjs from 'rollup-plugin-commonjs'
// babel は es6 コードの変換を処理します import babel from 'rollup-plugin-babel'
//resolv は、依存するサードパーティのライブラリと記述したソースコードをマージします。import resolve from 'rollup-plugin-node-resolve'
// postcss は CSS ファイルを処理し、'rollup-plugin-postcss' から postcss をインポートします

エクスポートデフォルト{
 入力: "src/Loading.jsx",
 // cjs ファイルと es ファイルをパッケージ化します。出力: [
  {
   ファイル: "dist/loading.es.js",
   フォーマット: "es",
   グローバル:
    反応する: '反応する',
   },
  }, {
   ファイル: 'dist/loading.cjs',
   フォーマット: "cjs",
   グローバル:
    反応する: '反応する',
   },
  },
 ]、
 外部: ['反応'],
 プラグイン: [
  ポストcss(
   { 拡張子: ['.css'] }
  )、
  バベル({
   除外: "node_modules/**",
   ランタイムヘルパー: true、
  })、
  共通js(),
  解決する()、
 ]、
}

パッケージをnpmに送信する

npm への公開にはいくつかのコマンドだけが必要です。

npmパック

プロジェクトをパッケージ化した後、コマンド ラインは圧縮されたパッケージに関する詳細情報を出力します。

更新版

npm バージョン [<新バージョン> | メジャー | マイナー | パッチ | プレメジャー | プレマイナー | プレパッチ | プレリリース [--preid=<プレリリース ID>] | from-git]

変更の規模に応じて異なるコマンドを選択します。

最後に、publish コマンドを使用します。

npm 公開

その後、パッケージが正常に公開されたことを通知するメールが届きます。

webpack と rollup を使用してコンポーネント ライブラリをパッケージ化する方法については、これで終わりです。webpack と rollup によるコンポーネント ライブラリのパッケージ化に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • webpackを使用してTypeScriptコードをパッケージ化およびコンパイルする方法を教えます
  • Vueパッケージングは​​image-webpack-loaderプラグインを使用して画像を圧縮および最適化します
  • vue-cli + webpackプロジェクトがサーバーにパッケージ化された後、ttfフォントが見つからない問題の解決策
  • vue は uglifyjs-webpack-plugin パッケージング エラーの問題を解決します
  • Webpack4 マルチページアプリケーションパッケージソリューションの詳細な説明
  • Webpackのパッケージング原則とローダーおよびプラグインの実装に関する深い理解
  • mocha を使用して webpack パッケージ プロジェクトで「スモーク テスト」を実行する一般的なプロセスの詳細な説明
  • Webpack ファイル パッケージ化エラー例外

<<:  Dockerでmongodbデータベースを使用するための実装コード

>>:  InnoDB ロック (レコード、ギャップ、Next-Key ロック) の詳細な説明

推薦する

Vueルータールーティングの詳細な説明

目次1. 基本的な使い方2. 注意すべき点3. マルチレベルルーティング(マルチレベルルーティング)...

Vueはページキャッシュ機能を実装する

この記事の例では、ページキャッシュ機能を実装するためのVueの具体的なコードを参考までに共有していま...

MySQL 8.0.24 リリースノートのいくつかの改善点

目次1. 接続管理2. オプティマイザレベルでの改善3. 機能の改善4. パフォーマンススキーマの最...

vsftp を使用して Linux で FTP サーバーを構築する (パラメータの説明付き)

導入この章では、主に Linux で FTP サーバーを構築するプロセスを紹介します。習得すべき重要...

nginx パニック問題の解決方法の詳細な説明

nginx パニック問題に関しては、まず nginx の起動プロセス中に、マスター プロセスが構成フ...

MySQL ストレージ エンジン MyISAM と InnoDB の違いの概要

1. MySQLのデフォルトストレージエンジンの変更MySQL 5.1 より前のバージョンでは、デフ...

Linux Dig コマンドの使用法

発掘紹介: Dig は、Unix ライクなコマンドライン モードで NS レコード、A レコード、M...

IE8でラベルの背景画像が表示されない問題の解決方法

今日、ちょっとした問題に遭遇し、長い間苦労しました。そのことを皆さんにシェアしたいと思います。 a ...

Nginx ソースコード調査における nginx 電流制限モジュールの詳細な説明

目次1. 電流制限アルゴリズム2. nginxの基礎知識4. 実戦要約する高並行性システムには、キャ...

史上最もシンプルな MySQL データのバックアップと復元のチュートリアル (パート 2) (パート 36)

データのバックアップと復元パート2は次のとおりです基本的な概念:バックアップ、現在のデータまたはレコ...

XshellがvirtualBox仮想マシンに接続できない問題の解決策

まず、VirtualBox仮想マシンのネットワーク設定モードについて説明します。NAT+ホストオンリ...

MySQL pt-slave-restart ツールの使い方の紹介

目次MySQL マスター スレーブ レプリケーション環境を設定する場合、マスター データベースとスレ...

Linux のバックグラウンドで & と nohup を使用する方法

ターミナルやコンソールで作業しているときは、メールを読むなど、もっと重要な作業があるかもしれないので...

MySQLのインデックス設計の原則と一般的なインデックスの違いについて簡単に説明します。

インデックス定義: ディスク上に保存される個別のデータベース構造であり、データ テーブル内のすべての...

MySQLで日付を比較する方法の詳細な説明

データ型が datetime であるフィールド add_time を持つテーブル product が...