首页 > 解决方案 > 我应该编译我的反应钩子库,还是只发布 ES6 代码?

问题描述

我有一个非常简单的钩子,我想将它发布到 npm,但我很难理解为什么我应该编译我的钩子。让我首先提供一些背景信息。

我的钩子只依赖于React.useStateand React.useEffect。这个钩子的目的是与我现有的库一起使用:https ://npmjs.com/package/simple-shared-state 。如您所见,这个钩子几乎没有:

import { useEffect, useState } from "react";

export default (store, selectors) => {
    const [state, setState] = useState([]);

    useEffect(() => {
        const unwatch = store.watchBatch(selectors, (array) => {
            setState(array.slice());
        });
        return unwatch;
    }, []);

    return state;
};

我查看了create-react-hookcli 工具并进行了尝试,但我看不到我的项目需要包含的开发依赖项。我的钩子已经可以在我的 mono-repo 中使用,我在其中添加了一个文件夹,react-test-ground/我在其中提供了一个我使用 CRA 引导的工作应用程序

关于测试:

如果这样做有意义,我可以采取额外的步骤,专门为此钩子添加单元测试,但目前,我看不到对此的强烈需求,因为功能的核心是 in simple-shared-state,所有这些逻辑已经涵盖了相当广泛的测试。

我看了react-hooks-testing-library,并基于“何时使用此库”和“何时不使用此库”,在我看来,我的情况是我不需要使用这个库。我认为我的钩子很简单,以至于很难证明添加更多测试的额外步骤是合理的。你同意?你能想出我应该使用的理由react-hooks-testing-library吗?

关于编译:

我看不出编译和缩小我的钩子的充分理由,因为无论如何,React 应用程序开发人员几乎都将完全从 JSX 编译他们的项目。

概括

鉴于上述所有情况,除了简单地在 npm 上发布我的钩子(如图所示)之外,还有什么理由做更多的事情吗?意思是,package.json将包括"main": "src/index.js",并且没有dist/目录。React 将进入package.jsonunder peerDependencies,仅此而已。应用程序开发人员只需将这个钩子的源 ES6 代码编译到他们的包中,仅此而已。

提前感谢您抽出宝贵时间阅读和回复!

标签: react-hooksnpm-publish

解决方案


你可以发布 ES6 代码。

当前的 js 规范是 ES2020。所有运行时都应支持此规范中的所有功能。因此,您需要将自己的代码编译为最新标准。如果用户想在较旧的运行时(例如 IE11)上使用您的代码,他可以在他的构建过程中转译所有代码。


推荐阅读