我可以从本地纱线工作区依赖包中导入“main”:“index.js”文件之外的子模块吗?

Posted

技术标签:

【中文标题】我可以从本地纱线工作区依赖包中导入“main”:“index.js”文件之外的子模块吗?【英文标题】:Can I import submodules outside of the "main": "index.js" file from a local yarn workspace dependency package? 【发布时间】:2021-09-30 20:53:05 【问题描述】:

我有以下 monorepo 结构(使用 yarn 工作区)。

packages
  common
    src
      index.js
      module1.js
      module2.js
    package.json
  user
    src
      index.js
      moduleA.js
      mobuleB.js
    package.json
package.json

我的根package.json


  "private": true,
  "workspaces": ["packages/*"]

package.json 来自common


  "name": "@packages/common",
  "version": "1.0.0",
  "main": "src/index.js",
  "license": "MIT"

package.json 来自user


  "name": "@packages/user",
  "version": "1.0.0",
  "main": "src/index.js",
  "license": "MIT",
  "dependencies": 
    "@packages/common": "1.0.0"
  

正如所料,user 包需要从common 包中“使用/导入”。

这是我的问题:如果我想从 common 包中导入 module1module2。有没有办法直接做,比如:

import  Foo  from "@packages/common/src/module1";

这是一种反模式吗?我应该只从@packages/common 导入import,这意味着从common/src/index.js 导入(鉴于package.json) 上的main 属性?

我非常想从common 包中访问任何src/sub-folder/sub-file。我应该import | re-export common/src/index.js 文件中的所有内容,还是有办法直接获取其他文件?

【问题讨论】:

【参考方案1】:

是的,你可以。以下应该可以正常工作:

import  Foo  from "@packages/common/src/module1";

OBS:以下详细信息是针对 Next.js 项目的,但其他项目的想法可能相同。

请记住,如果您需要转译这些文件(位于下一个项目文件夹之外的文件),则需要使用 next-transpile-modules 包。

更多细节可以在这里找到:

Medium: Sharing code between NextJS applications nextjs-sharing-code-monorepo next-transpile-modules

【讨论】:

以上是关于我可以从本地纱线工作区依赖包中导入“main”:“index.js”文件之外的子模块吗?的主要内容,如果未能解决你的问题,请参考以下文章

纱线工作区——包别名

自定义包库需要从项目中导入项目的依赖项

项目中导入本地jar包问题

Java编程:maven项目中导入本地的jar依赖

使用本地、纱线工作区依赖项和生产环境(例如 App Engine)环境变量构建?

纱线工作区没有建立本地依赖