Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 构建一个既服务于React又服务于React Native的NPM包_Javascript_Reactjs_Npm - Fatal编程技术网

Javascript 构建一个既服务于React又服务于React Native的NPM包

Javascript 构建一个既服务于React又服务于React Native的NPM包,javascript,reactjs,npm,Javascript,Reactjs,Npm,我们正在为一个公司项目构建一个名为Chat的NPM包。它基于减速器和减速器 对于web和RN而言,其用途是: <Chat userName={user.userName} password={user.password} avatarUrl={user.avatarUrl} defaultAvatar={defaultAvatar} defaultGroupAvatar={defaultGroupAvatar} name={user.name

我们正在为一个公司项目构建一个名为Chat的NPM包。它基于减速器和减速器

对于webRN而言,其用途是:

<Chat
    userName={user.userName}
    password={user.password}
    avatarUrl={user.avatarUrl}
    defaultAvatar={defaultAvatar}
    defaultGroupAvatar={defaultGroupAvatar}
    name={user.name}
/>

然而,网络移动之间存在差异:

  • 依赖项:RN需要react-native和其他RN包,而web需要react-textarea autosize和其他web包。不用说,为web安装React Native的软件包是相当大的开销
  • 编译:RN可以使用ES6,但web需要babel传输到JS
我们想到了两种不同的方法:

  • 使用通用代码创建一个基本包:reducer和utils,然后为web和移动组件创建两个附加包

  • 将package.json中的依赖项放在peerDependencies中


  • 这两种方式都有其缺点。第一种方法会造成包的混乱,第二种方法意味着package.json不是描述性的。还有更好的方法吗?构建跨平台React NPM软件包的正确方法是什么?

    就像RN将ios和android分开一样,为web添加第三个入口点,并添加所有需要的web构建脚本。我来看看。使用不同的package.json文件?应该是同一个包。您可以为每个平台提供包,但正如您所说的,您必须取出通用代码并创建包,以便在其他平台包中重用。我不会这样做,除非你真的想为每个平台隔离源代码控制。软件包中显示的额外依赖项在您的工作目录中未使用,但不应影响生产性能。就像RN将ios和android分开一样,为web添加第三个入口点,并添加所有需要的web构建脚本。我来看看。使用不同的package.json文件?应该是同一个包。您可以为每个平台提供包,但正如您所说的,您必须取出通用代码并创建包,以便在其他平台包中重用。我不会这样做,除非你真的想为每个平台隔离源代码控制。出现在包中的额外依赖项在工作目录中未使用,但不应影响生产性能。