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

2024-01-09

以下场景

  • 项目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. Import CustomButton.jsx项目 1 和 2 中包含导入声明:import { CustomButton } from "my-component-library"

问题

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

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

EDIT

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


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

1.使用您的组件创建一个项目(create-react-app应该没事。无论如何,您只会导出组件,这就是项目设置无关紧要的原因。它仅对开发和测试组件有用。)

2. Use rollup.js https://rollupjs.org/guide/en/捆绑你的React组件(网上有很多教程,只需谷歌“rollup React组件库”)

3.添加一个新脚本到你的package.json使用以下方式捆绑您的应用程序rollup -c。 然后使用npm pack https://docs.npmjs.com/cli/v6/commands/npm-pack创建包。

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

这将创建一个压缩包,其中仅包含您需要的文件,格式如下:

[package-name]-[package-version].tgz e.g. my-react-components-0.1.0.tgz

您可以影响生成的包npm pack通过修改你的属性package.json, e.g. "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"

如果您需要有关步骤的更详细说明,请在下面发表评论,我将添加更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建可在多个 React 项目中使用的私有共享组件库 的相关文章

随机推荐

  • 将可旋转 3D 绘图从 Python 导出到 HTML

    我需要将可旋转 3D 绘图导出为 HTML 就像WriteWebGL 在 R 中的作用 https www rdocumentation org packages rgl versions 0 100 54 topics writeWebG
  • 尝试使用 Selenium + Excel VBA 从 Chrome 浏览器中的网站抓取代码

    我需要一些指导 以在 Excel 2013 VBE 中使用 Selenium Basic ChromeDriver v 75 0 3770 140 从 Chrome v 75 0 3770 142 中的网站抓取文本 这是 HTML div
  • 无法显示从新服务器下载文件的进度(在以前的服务器上有效)

    我一直在开发一个 iPad 应用程序 它使用 ASIHTTPRequest 下载一些 PDF 文件 我一直在使用进度委托为用户显示进度条 显示文件的下载进度 这是 ASIHTTPRequest 设置代码 request ASIHTTPReq
  • 在 Groovy 中使用元类覆盖私有方法

    此代码片段曾经在 Groovy 2 1 0 中正常工作 class User private String sayHello return hello assert new User sayHello hello User metaClas
  • 借来的价值寿命不够长

    这是我的代码 extern crate postgres use postgres Connection SslMode struct User reference String email String static DB URI sta
  • Android:弹出键盘上的背景图像调整大小[重复]

    这个问题在这里已经有答案了 我正在开发一个应用程序 其中背景图像在弹出键盘时缩小 我的 xml 如下
  • 使用 PHP 实现 OpenID

    我对实现 OpenID 很感兴趣 并且我一直在阅读有关它的内容 但仍有一些方面我有点困惑 我见过多个交互流程图和分步细节 例如this one http www windley com archives 2006 04 how does o
  • 保护 ASP.NET MVC 应用程序检查表

    我正在寻找一套指南或清单 您可以查看它们以确保公共 ASP NET MVC 网站的安全 我只是想确保在部署网站时不会出现任何明显且众所周知的问题 Thanks 一如既往 确保您正确 编码输出 请注意我是 这里说编码而不是编码 HtmlEnc
  • MySQL FIND_IN_SET 与数组字符串

    我正在查询的表中有一个字段与此类似 Name Phone Category IDS Category Labels Sample 1111111111 1 foo bar 我尝试使用 FIND IN SET 函数查找包含逗号分隔列表中列出的
  • 在SQL Reporting Services中,如何根据参数过滤数据集?

    我有一个未经过滤的数据集需要处理以生成报告 顺便说一句 SQL Server 2005 假设我有一个Name列 我想向我的报告添加一个参数 以便仅选择包含某些字符的名称 有人知道如何处理这些过滤器吗 我尝试过这些但没有运气 Fields N
  • 如何从生产版本中删除 data-testid

    我想从生产版本中删除 data testid 因此在产品版本中找不到这些属性 特别是在这种情况下 我需要一些可以处理 tsx 文件的东西 我知道如何使用组件中的函数删除它 但我认为应该有一种更聪明的方法来做到这一点 反应 cra 反应应用程
  • 在错误的手动合并冲突解决之后重新冲突合并

    解决合并冲突并提交后 很明显我的手动合并冲突解决方法是错误的 我已经上演 提交并推送了该存储库 如何使冲突文件恢复到冲突状态 以便我可以以不同的方式解决它 请注意 此时为时已晚git checkout m因为我已经提交了错误的合并解决方案
  • 如何在 Amazon Cognito 中禁用某些用户的验证?

    如果激活了验证功能 Amazon Cognito 会自动发送验证码 在我的项目中 有时 我会添加用户 AWS Java SDK中的Signup函数 并自己通过AdminConfirmSignup验证他们 所以我不希望他们收到验证邮件 我将手
  • 如何使用 php 将 php 文件读取为字符串?

    假设我想使用 php 脚本将当前页面的代码读入字符串中 而不执行页面的 php 内容 我该如何做到这一点 例如使用 file get contents test php 将获取 test php 的内容 但它会执行代码 我怎样才能获取文件的
  • Android 数据绑定库与 Kotlin Android 扩展

    我正在阅读有关 MVVM 架构如何工作以及如何使用 Android 数据绑定库帮助的内容 一般来说 我理解 Android 数据绑定在 UI 层和保存要显示的信息的底层数据模型之间创建了一个链接 Kotlin Android 扩展是另一个
  • CMake“NMake Makefiles”生成器无法编译

    我正在根据本教程编译简单的应用程序 https www johnlamp net cmake tutorial 1 getting started html https www johnlamp net cmake tutorial 1 g
  • 类和数据类型有什么区别?

    我听到过这样的说法 我们可以说类是一种数据类型 或者数据类型是类的一种类型 谁能向我解释一下这到底是什么意思 C 是一种强类型语言 因此每个变量和对象 必须有一个声明的类型 数据类型可以描述为 内置数据类型 例如 int 或字符 或 用户定
  • 无法使用 ldap 凭据登录 wso2 身份服务器

    我试图将 wso2 身份服务器连接到 Ldap ReadWriteLDAPUserStoreManager 集成成功并且可以从 wso2 身份服务器访问 ldap 用户 但问题是我无法使用 ldap 用户名和密码登录身份服务器 请帮我 Pl
  • C++:多态类模板

    考虑一个存储一堆 Date 对象的 Calendar 类 日历旨在保存从 Date 继承的任何类型的对象的集合 我认为最好的方法是有一个类模板 例如 template
  • 如何创建可在多个 React 项目中使用的私有共享组件库

    以下场景 项目1需要使用CustomButton jsx 项目2需要使用CustomButton jsx 目前的解决方案 复制粘贴CustomButton jsx进入项目 1 和 2 所需的解决方案 创建项目 3 其中包括CustomBut