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 inpm run buildnpm 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'

节点 MODULE_NOT_FOUND

更新到 nextjs 11 后的 Micro MODULE_NOT_FOUND

在 nest.js 代码库上找不到模块 (MODULE_NOT_FOUND)

MODULE_NOT_FOUND Nestjs 和 Swagger

使用 Mongodb 和 Node.js 无法加载 c++ bson 扩展错误