在npm/yarn的工作区中,包应该使用src还是dist ?



我想为我们的前端应用程序使用monorepo。我们想将一些react UI组件划分到"/packages/UI -components"下的包文件夹中。把应用留在"/apps/app"文件夹,然后让应用程序通过导入ui组件来消费它(简化设置)。我们不打算很快将这些包发布到单独的npm仓库中,只是让最终的应用程序运行起来。

我开始有点担心我们如何才能拥有最好的工作流程,由于某种原因,我在我的研究中找不到这个:

应用程序应该从包中使用src文件,还是将每个包编译到dist文件夹并只导入这些包?

工作流方面,我们希望在不同的包中无缝工作,所以如果有人在包中编辑,我们希望这些更改立即显示在应用程序中。

我看到了使用源文件与使用分区输出相比的一些优点和缺点。

直接使用src的优点:

  • 更好的摇树,因为依赖可以是对等依赖,并且多个包使用的库可以合并。
  • 更小的最终包大小,因为webpack有更好的访问原始数据,如完整的依赖树和公共功能等。
  • 更快的开发迭代和更小的项目,因为只有一个构建和智能webpack可能只重新编译一些更改的文件。

使用dist的优点:

  • 更多独立的包,因为它们可以包含自己的构建管道。
  • 将更容易导入,因为较少的对等依赖和特殊的webpack-config需要
  • 准备作为公共npm包发布
  • 可能更快的构建时间,因为只有更改包和主应用程序需要在更改时重新编译(我假设webpack可以做缓存,所以也许这无关紧要)

我肯定我错过了很多细节;现在建立良好的开发流程非常复杂,我想让它尽可能简单地为我的同事使用。

TL;博士;

应该把mono-repo构建中的包放到它们的dist中供其他人使用,还是直接从src中导入更好。

这是个权衡的问题。

如果您使用了软件包中的dist,这意味着为了"应用"在您需要构建的包中进行更改,然后在app中使用它。

有些人甚至建议将包发布到注册表(公共或私有),这允许你在应用程序和包之间实现更松散的耦合。

另一方面,在src上工作似乎更少了。类似的优点,但需要你的应用程序设置来支持它,因为它将编译包的代码。

就我个人而言,我使用的是第二种方法,我的应用程序是从src消费的,并且它不是那么琐碎的配置,因为大多数工具默认情况下都忽略了node_modules的代码(如babel-loader,它将忽略node_modules内的代码编译)。

我的大部分代码都是基于next-transpile-modules的源代码。

相关内容

最新更新