当前位置: 首页 > 知识库问答 >
问题:

MODULE_NOT_FOUND尝试在Node JS/TypeScript项目中的模块之间按目录共享代码

阳兴文
2023-03-14

我已经建立了一个示例项目来演示该问题:

https://github.com/garethrbrown/node-share-code

在本例中,有两个项目,示例api(迷你express项目)和示例共享(类库),都使用节点JS/TypeScript。我希望示例api能够使用示例共享中的类来避免代码重复。遵循此示例后,我引用了包中的示例共享项目。示例api中的json。

"dependencies": {
    "example-shared": "file:..\\example-shared",
    "express": "^4.17.1"
}

完成此操作并在运行npm install之后,VSCode中的intellisense会从示例共享项目中看到ApiClass并协助导入。

然后,我可以通过NPM通过build命令tsc--build运行,成功了。

我还可以看到,sym链接已在示例api的node\u modules目录中创建。

然而,当我尝试使用示例api下的npm start脚本运行示例api项目时,我得到了如下错误:

  Error: Cannot find module 'example-shared/apiClass'
  Require stack:

  ...

  code: 'MODULE_NOT_FOUND',
  requireStack: [
    ...
  ]

我尝试过从不同的位置运行命令,例如这里描述的,但到目前为止没有运气。

我正在使用Node(14)和NPM(7)的当前稳定版本。

我不想通过NPM或git存储库共享,因为我觉得这会减慢开发速度。

我做错了什么?

共有1个答案

邹高峻
2023-03-14

这似乎是一个讨论过的问题,请参阅本文类型脚本:如何解析节点的绝对模块路径。js?

我没有进一步调查,但在示例共享文件夹中,您可以从示例共享/tsconfig中删除“outDir”。json,然后运行npm运行构建。不幸的是,这将在typescript文件旁边发出javascript文件,而不是将它们放在单独的目录中。

最后,在示例api中,运行npm i、npm运行构建和npm启动。

现在,Express将运行,因为节点使用的是javascript文件而不是typescript文件。

 类似资料:
  • 问题内容: 我有一个多模块的Maven项目。为了这个示例,请考虑两个模块: 模块将模块作为依赖项。 模块声明了一堆核心类。有使用它们的测试。这些测试需要创建一些冗长的对象,因此我有一个带有一些实用程序方法的类来创建这些对象。实用程序类()在层次结构中。 我在模块中也进行了一些测试,这些测试需要创建一些冗长的对象。我想在我的树中的测试中使用我的类(在中定义)。不幸的是,即使是的依赖项,也无法看到存在

  • 我有一个多模块Maven项目。在本例中,考虑两个模块: 模块具有模块作为依赖项。 为了解决这个问题,我想我可以创建另一个模块(),并将移到下。那么我将包含作为的测试范围依赖项。不幸的是,这引入了循环依赖关系:使用,但还需要。 我想出的唯一解决方案是将放在下,放在包下,希望真正的应用程序代码不会调用它。 如何在模块之间共享我的类,而不将其放在下?

  • 问题内容: 我们正在考虑将ci从jenkins迁移到gitlab。我们有几个项目具有相同的构建工作流程。现在,我们使用一个定义了管道的共享库,而项目内部的jenkinsfile仅调用在共享库中定义的定义实际管道的方法。因此,仅需在单个点上进行更改即可影响多个项目。 我想知道gitlab ci是否也可以做到?据我发现,无法在存储库外部定义gitlab- ci.yml。还有另一种定义管道并与几个项目共

  • 问题内容: 有没有办法在Netbeans和Eclipse之间共享相同的* .java文件? 问题答案: 您可以将eclipse项目导入netbeans, 或者,您可以从现有资源创建Eclipse项目。

  • 问题内容: 假设我有一个要注入到config中的模块: 有两个子模块: 这是第一个: 第二个是相同的,以简化示例: 您会注意到,您可以将它们作为提供者来访问以配置选项: 如果我们在控制器中,则可以覆盖每个范围,例如: 但是,如果他们总是共享相同的财产怎么办?如何在提供商之间共享某些东西? 我可以同时为和注入和配置共享属性吗? 如何同时访问和作为单个模块的扩展? 问题答案: 将模块插入两个共享这些属

  • 我正在尝试弄清楚如何在单个IntelliJ项目中的两个模块之间共享包,但我似乎找不到正确的方法。我知道它可以在Eclipse中完成,但我不太精通它。简而言之,我正在尝试重现由AppEngine连接的Android项目创建的相同类型的项目环境。 这是我能说的最好的“问题” 项目A。 模块1;AppEngine GWT其他任何内容 模块2;Android 每个模块在项目的主目录中都有自己的源目录: /