React app using create-react-app
。残念ながら、NPMで公開(および他のアプリで再利用)したいコンポーネントライブラリの構築を開始しました。 create-react-app
のデフォルト設定は、そのようなコンポーネントライブラリの構築をサポートしていないようです( 参照これら問題 )。イジェクトする。
これを他のアプリで再利用できるコンポーネントライブラリにするために、取り出した後に何を構成するかについての指示はありますか(Webpackのものがあると思います)?
コメントを回答に再構成します。
排出しないでください! CRAは内部に多くのものを隠し、排出するとそれが投げ出されます。ツールのセットアップが完了したら、src
を別のプロジェクトに複製する方が比較的簡単です。
そして、自分でセットアップするのはそれほど難しくありません!これがあなたがする必要があることです:
基本 babelとwebpackの設定 コードがコンパイルされるようにします。
ReactとReact-DOMがpackage.jsonファイルに外部依存関係として追加され、webpack.config.jsにエイリアスとして追加されていることを確認してください(詳細な説明は ここ 。)これは、最小のバンドルのみを出荷するために重要です。また、Reactは 複数のコピー ではうまく機能しません。
必要に応じて、他のより重いライブラリについても同じことを行います。マテリアル-UI、ブートストラップ、Lodashなど。
Webpackの構成で、 library exports をどのようにするかを決定しますか?あなたはUMDに長けているはずです。
package.json
にmain
( およびオプションでmodule
)エントリを追加して、npmimportsにコンポーネントのインポート元を知らせます。
公開 それ。
完了!
または、これらの超薄型コンポーネントプロジェクトのいずれかを複製して、そこにコンポーネントを配置することもできます-
より完全なスターターキットもありますが、IMOは、それらを抽象化する前に、まず自分で詳細を知ることが重要です。プロセスに慣れたら、テスト統合、react-storybookサポート、優れたnpmパブリッシングサポートなどの基本をはるかに超えているため、キットも活用してみてください。
更新:
CRAの目的は、(初心者にはやや複雑な)ツールのセットアップを行わずに、React開発)への迅速な実験とオンボーディングを可能にすることです。CRAの使用目的は次のとおりです。名前の「アプリ」は、コンポーネントではなくアプリ全体です。ES6などの言語機能に基づいて構築されたものを開発するには、ある程度のツールが必要ですが、アプリは通常、コンポーネントよりも多くのセットアップを必要とします。生成されたコード。CRAは これ以上 あなたのために。
また、アプリで作業している場合は、アプリのサーバー側を制御したいときにイジェクトします。その場合、イジェクト中にCRAによって自動生成された基本的なホスティングコードを取得するため、付加価値があります。
テストのニーズに対応するために、CRAにはJest統合もあります。これは、スナップショットテストなどのReact特定の機能を備えたテストランナーです。繰り返しになりますが、ビルドパイプラインを使用して手動で設定するのはほんの一握りであり、CRAはもう一度この複雑さをすべて隠しているので、テストの作成に集中できます。
これは非常に簡単です。パッケージを公開する場合、実際にはwebpackは必要ありません。必要がない場合は、そのためだけにインストールしないでください。
ES6を使用する場合:
簡単なスクリプトを使用して、トランスパイル後にbabelがファイルを作成するdistフォルダーを作成できます。
"scripts": {
// other scripts
// .. might want to change "rm -rf" below if you're on a PC
"build:production": "rm -rf es && cross-env NODE_ENV=production node_modules/.bin/babel ./src -d es"
},
これは何をしますか:
es
フォルダーを削除します。src
フォルダーにある場合は、ファイルが存在する場所に変更します)、トランスパイルされたファイルを使用してes
フォルダーを作成します。上記のスクリプトを使用するには、次の依存関係をインストールする必要があります。
babel-cli
/babel-core
/babel-preset-es2015
/cross-env
Babelが機能するように、.babelrc
ファイルがあることを確認してください。
{
"presets": [
["es2015", { "modules": false }]
]
}
(npm run build:production
を実行した後)あなたがしなければならないのは、実行することだけです:
npm publish
そして、あなたのライブラリはnpm
で公開されています。これは、更新する場合に実行するコマンドでもあります。package.json
のバージョン番号を更新することを忘れないでください。
npm
に公開したくないファイルがある場合は、ルートに.npmignore
(.gitignore
と同様)というファイルを作成し、除外するすべてのものをリストします。
ES6を使用しない場合:
この場合、何もトランスパイルする必要はありません。上のnpm publish
セクションに直接移動して、公開するルートフォルダーで実行してください。
create-react-app
は、アプリの迅速なセットアップと開発を目的としており、実際にはライブラリの開発を目的としていません。一つには、create-react-app
はビルド時にindex.html
ファイルを作成しますが、これは通常、ライブラリでは必要ありません。ライブラリには、異なる構成セットが必要です(はるかに少ない)。
私は自分でこの問題に直面し、Reactコンポーネントのボイラープレートを作成して公開するReactコンポーネント: https://github.com/yangshun/react-component-starter 、 Redux など、人気のあるES6ライブラリがどのように作成されたかを参照した後。
長所:
create-react-app
と同様に、電池が含まれています短所:
create-react-app
によって設定された選択に従います。eject
を実行した場合、この問題に直面します)最小限の構成が含まれており、セットアップは簡単です。さまざまなwebpack、Babel、ESLintの構成は非常に理解しやすいはずです。
これがお役に立てば幸いです。改善方法について、お気軽にご提案やご意見をお寄せください。