MODULE_NOT_FOUND 尝试在 Node JS / TypeScript 项目中的模块之间按目录共享代码
Posted
技术标签:
【中文标题】MODULE_NOT_FOUND 尝试在 Node JS / TypeScript 项目中的模块之间按目录共享代码【英文标题】:MODULE_NOT_FOUND trying to share code by directory between modules in Node JS / TypeScript projects 【发布时间】:2021-06-01 09:34:18 【问题描述】:我已经建立了一个示例项目来演示这个问题:
https://github.com/garethrbrown/node-share-code
在这个例子中有两个项目,example-api(一个迷你快递项目)和example-shared(一个类库),都使用Node JS / TypeScript .我希望 example-api 能够使用 example-shared 中的类以避免代码重复。遵循this 示例后,我在example-api 中引用了package.json
中的示例共享项目。
"dependencies":
"example-shared": "file:..\\example-shared",
"express": "^4.17.1"
完成此操作并在运行 npm install
之后,VSCode 中的智能感知会从示例共享项目中看到 ApiClass
并协助导入。
然后我可以通过 NPM 使用构建命令 tsc --build
运行,它成功了。
我还可以看到在example-api node_modules
目录下已经创建了sym链接。
但是,当我尝试使用 example-api 下的 npm start
脚本运行 example-api 项目时,出现如下错误:
Error: Cannot find module 'example-shared/apiClass'
Require stack:
...
code: 'MODULE_NOT_FOUND',
requireStack: [
...
]
我曾尝试从不同位置运行命令,例如 here 所述,但到目前为止没有运气。
我正在使用当前稳定版本的 Node (14+) 和 NPM (7+)。
我不想通过 NPM 或 git 存储库共享,因为我觉得这会减慢开发速度。
我做错了什么?
【问题讨论】:
【参考方案1】:似乎这是一个讨论的问题,请参阅此帖子Typescript: How to resolve absolute modules paths for node.js?
我没有进一步调查,但在example-shared
文件夹中,您可以从example-shared/tsconfig.json
中删除"outDir"
,然后运行npm run build
。
不幸的是,这将在 typescript 文件旁边发出 javascript 文件,而不是将它们放在单独的目录中。
最后,在example-api
中运行npm i
、npm run build
和npm start
。
现在,Express 将运行,因为 Node 使用的是 javascript 文件而不是 typescript 文件。
【讨论】:
谢谢。您的更改使我能够运行引用示例共享类的示例 API 项目,这确实有助于我的理解。我很惊讶没有一种开箱即用的方法来实现我正在尝试的项目结构。 如果 typescript 支持这个就好了,等我有时间再研究这个问题。到目前为止,您可以尝试使用 webpack 和 ts-loader 编译您的源代码,而不是使用tsc
,也许一些 webpack 插件可以替换模块路径,以便它们指向 dist
文件夹。祝你好运!
如果您提出建议,我们将不胜感激。我研究了 bit.dev,它看起来很全面,但对于在模块之间共享很少的类来说相当繁重。与此同时,我将选择 KISS 和重复代码,从微服务的角度来看,这并不是那么糟糕。以上是关于MODULE_NOT_FOUND 尝试在 Node JS / TypeScript 项目中的模块之间按目录共享代码的主要内容,如果未能解决你的问题,请参考以下文章
问题重新安装纱线 - 代码:'MODULE_NOT_FOUND'
更新到 nextjs 11 后的 Micro MODULE_NOT_FOUND
在 nest.js 代码库上找不到模块 (MODULE_NOT_FOUND)