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 ロック) の詳細な説明

推薦する

MySQL 5.7 生成列の使用例の分析

この記事では、例を使用して、MySQL 5.7 で生成された列の使用方法を説明します。ご参考までに、...

Linux で PHP curl 拡張機能をインストールする方法の詳細な説明

この記事では、Linux で PHP curl 拡張機能をインストールする方法について説明します。ご...

Vuex ステートマシンの簡単な理解とサンプルアプリケーション

目次1. 概念の素早い理解: 1. コンポーネント間でデータを共有する方法: 2. vuex とは何...

詳細なアイデアを備えたシンプルな計算機の HTML 実装

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...

MySQLの基本操作を詳しく解説(第2部)

序文この記事には1. データベースのいくつかの主要な制約2. テーブル間の関係制約:主キー制約: 機...

クエリでのMySQLのユニークキーの使用と関連する問題

1. テーブルステートメントを作成します。 テーブル「従業員」を作成します( `emp_no` in...

DOCTYPE宣言の機能と使い方の詳しい説明

1. ブラウザのレンダリングモードとdoctype一部の Web ページは標準に従って作成されていま...

画像の色を変更するための純粋なCSS

画像の色を変更するための CSS テクニックは非常にシンプルです。具体的なコードは次のとおりです。ヒ...

スケルトン スクリーンの読み込みプレースホルダー アニメーション効果を実装するための CSS + HTML (アニメーション付き)

効果上から下へフェードアウト ソースコードhtml、Angular構文を使用して、必要な構文を取得す...

ウェブページが自動的にデュアルコアブラウザの高速モードを呼び出すようにします(Webkit)

コードサンプルヘッドタグにコード行を追加します: XML/HTML コードコンテンツをクリップボード...

RocketMQ の Docker インストールとインストール中に発生した問題の解決策

目次rocketmqイメージを取得する名前rvを作成する単一のブローカーノードを作成するrocket...

Linux 環境に mysql5.7.36 データベースをインストールするチュートリアル

ダウンロードアドレス: https://dev.mysql.com/downloads/mysql/...

IIS7~IIS8.5 サーバープロトコルヘッダーの削除または変更

要件: IIS 7、7.5、8.0、8.5、および ASP.NET で HTTP 応答ヘッダーを削除...

Angularの単一プロジェクトを複数プロジェクトにアップグレードするプロセス全体

目次序文開発環境新しいプロジェクトを作成するモバイルウェブプロジェクト角度付きJSONパブリックモジ...

ネイティブ js が携帯電話のプルダウン更新を模倣

この記事では、携帯電話のプルダウンリフレッシュを模倣したjsの具体的なコードを参考までに共有します。...