如何创建一个可以在多个 React 项目中使用的私有共享组件库

IT技术 reactjs npm
2021-05-22 23:16:00

跟随场景

  • 项目1需要使用 CustomButton.jsx
  • 项目2需要使用 CustomButton.jsx

当前解决方案

复制粘贴CustomButton.jsx到项目 1 和 2 中。

期望的解决方案

  1. 创建项目 3,其中包括 CustomButton.jsx
  2. 将项目 3 存储在共享环境中(例如公共公司目录D://dev/react/my-component-library
  3. 通过 npm 为项目 1 和 2 安装项目 3 并添加依赖项package.json以保持跨 git 克隆的一致性。
  4. CustomButton.jsx在项目 1 和 2 中使用 import 语句导入import { CustomButton } from "my-component-library"

问题

  1. 项目3是一个什么样的项目?是用它构建create-react-app还是可以使用其他工具?
  2. 如何从项目 3 中创建本地/私有 npm 包?
  3. 我如何为该私有包使用共享的本地环境。
  4. 如何使用项目 1 和 2 中的包?

组件相当简单,不包含复杂的逻辑。

编辑

这不应该花费我任何费用(私有 npm 可以)或使用 3rd 方托管,因为我已经有一个私人共享的环境/服务器/目录,我可以在那里托管/存储包。

3个回答

我在 vue 中解决了这个问题。但是react中的步骤应该非常相似。

1.用你的组件创建一个项目(create-react-app应该没问题。无论如何你只会导出你的组件,这就是为什么项目设置无关紧要。它只是对开发和测试你的组件有用。)

2.使用rollup.js打包你的react组件(网上教程很多,google一下“rollup react组件库”)

3.向您添加一个新脚本以package.json使用rollup -c. 然后使用npm pack来创建包。

"build:lib": "rollup -c && npm pack"

这将使用以下模式创建一个仅包含您需要的文件的压缩包:

[package-name]-[package-version].tgz 例如 my-react-components-0.1.0.tgz

您可以影响所得的包npm pack通过你的修改属性package.json,例如"version""name""main""files"将影响输出。

4.现在你可以从另一个项目在本地安装你的包:

npm i ../path/to/library/my-react-components-0.1.0.tgz

这将为您的package.json:添加一个新的依赖项

"my-react-components": "file: ../path/to/library/my-react-components-0.1.0.tgz"

5.根据您的汇总设置,您可以像使用任何其他库一样使用您的库:

import { MyComponent } from "my-react-components";

您可能还需要导入样式:

import "my-react-components/index.css"

如果您需要对某个步骤进行更详细的解释,请在下面发表评论,我会添加更多信息。

1.项目 3 就像您安装的任何 npm 包(例如 ui 库)一样,您可以使用 构建,也可以create-react-app根据需要不构建只需从该库中导出您想要共享的所有内容,然后从您的主项目中导入它们,就像您使用任何库时一样。你可以像这样将它发布到 npm ,或者使用像Nexus这样的私有仓库

2.对于npm,你可以查看我上面提到的教程。适用于Nexus,谷歌和你可能会想出像这样

3 & 4.发布你的包后,你可以npm install your-package在你的任何项目中做。

你有很多选择。您可以通过在 npm 上创建组织来实现(详情请点击此处)。此外,您可以使用位 n 件(详情请点击此处)。您甚至可以更喜欢像纱线工作区这样更简单的东西(详情请点击此处)。