she*_*nan 7 javascript node.js typescript monorepo yarn-workspaces
我在将 Yarn Workspaces monorepo 移植到 TypeScript 时遇到问题。在 monorepo 的先前工作版本中,moduleA
可以从moduleB
.
新移植的代码尝试同样的事情......
/* monorepo/packages/moduleA/src/helpers/misc.ts */
export const someHelper = () => console.log('hello world')
Run Code Online (Sandbox Code Playgroud)
/* monorepo/packages/moduleB/src/index.ts */
import {someHelper} from 'moduleA/src/helpers/index.js'
Run Code Online (Sandbox Code Playgroud)
这会产生错误:
错误 [ERR_MODULE_NOT_FOUND]:找不到从 monorepo/packages/moduleB/lib/index.js 导入的模块“monorepo/node_modules/moduleA/src/helpers/misc.js”
我的两个包的 TsConfig:
{
"compilerOptions": {
"declaration": true,
"declarationMap": true,
"sourceMap": true,
"composite": true,
"outDir": "lib",
"rootDir": "src",
"allowJs": true,
"esModuleInterop": true,
"moduleResolution": "node",
"module": "es6"
},
"include": ["src"],
}
Run Code Online (Sandbox Code Playgroud)
并添加了moduleB
包的配置:
"references": [
{
"path": "../moduleA"
}
]
Run Code Online (Sandbox Code Playgroud)
请注意,我正在moduleB
使用tsc --build
.
解决该问题的一种方法是简单地从moduleA
模块入口点中的命名导出中导出我需要的所有内容。我不想这样做的原因是因为在从 monorepo 的各个部分构建的相应发行版中可能不需要它们。导入和导出它们moduleA
意味着捆绑代码,有时运行不需要运行或由于环境原因不应运行的代码。
另一件需要注意的事情是,如果我monorepo/packages/moduleA/src/helpers/misc.ts
用.js
扩展名而不是打字稿重命名;有用。
我似乎还可以通过将其添加到“compilerOptions”中来更改错误moduleB
:
"baseUrl": "src",
"paths": {
"moduleA/helpers/*": ["../moduleA/src/helpers/*"]
},
Run Code Online (Sandbox Code Playgroud)
并将导入语句更改为:
/* monorepo/packages/moduleB/src/index.ts */
import {someHelper} from 'moduleA/helpers/index.js'
Run Code Online (Sandbox Code Playgroud)
但这给了我一个类型定义错误:
src/index.ts:2:28 - 错误 TS2307:找不到模块“moduleA/helpers/misc.js”或其相应的类型声明。
也许上面在 TsConfig 中使用paths
不是正确的方法。
总而言之,这里的最终目标是允许从moduleA
的子目录导入任何文件以在 中使用moduleB
,而无需为此目的发布单独的模块。
归档时间: |
|
查看次数: |
645 次 |
最近记录: |