我应该在我的库包中包含节点模块吗?
P粉716228245
P粉716228245 2023-09-12 19:36:43
0
1
606

我正在开发一个 React 组件库。该库被多个内部 NextJs 项目使用。

出于与 NextJs 兼容性的原因,该库需要在某个时候转换为 CommonJs。

问题是我的库的一些 npm 依赖项不处理 CommonJS。例如,swiper 就是这种情况。

所以我有两个选择:

  • 我要么将 npm 依赖项声明为peerDependency,然后由我的库的每个使用者来正确地转译它们。这使得我的库包变得更轻,但它在每个项目中创建了很多配置限制(例如,对于 NextJs 以及 Jest)。
  • 或者我将 npm 依赖项包含在我的包中,这在我看来是一种反模式,但它允许我公开 CJS 和 MJS:我的库的使用者几乎没有任何事情可做。

我还可以设想两者的混合:我忽略管理 CommonJs 和 ES 模块的所有依赖项,并且只转置那些必要的依赖项。

你觉得怎么样?

P粉716228245
P粉716228245

全部回复(1)
P粉647504283

我们也有同样的情况 - 我们有一个 Next.js 应用程序,它依赖于具有潜在 ESM 模块的核心库。不过,我建议不要捆绑您的依赖项。您的下游应用程序可能具有相同的依赖项,现在您最终将加载它们两次。而且您可能已经在其他第 3 方依赖项(具有 ESM 依赖项)中遇到了此问题。只需将它们添加到 next.config.js 中的 transpilePackages 列表中即可:https://nextjs.org/docs/app/api-reference/next-config-js/transpilePackages。我们还使用 next/jest ,它似乎也可以获取配置并且似乎可以工作。唯一需要注意的是,我发现我们必须转译 @babel/runtime 但只有在 jest 运行时才可以,否则它会破坏主应用程序。

/** @type {import('next').NextConfig} */
const nextConfig = {
  transpilePackages: ['@acme/ui', 'lodash-es'],
}
 
module.exports = nextConfig
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板