Node.js 在节点JS/TypeScript项目中的模块之间尝试按目录共享代码时未找到模块
我已经建立了一个示例项目来演示这个问题: 在本例中,有两个项目,示例api(一个mini express项目)和示例共享(一个类库),都使用节点JS/TypeScript。我希望示例api能够使用示例共享的类来避免代码重复。在遵循示例之后,我引用了示例api中Node.js 在节点JS/TypeScript项目中的模块之间尝试按目录共享代码时未找到模块,node.js,typescript,nodes,node-modules,Node.js,Typescript,Nodes,Node Modules,我已经建立了一个示例项目来演示这个问题: 在本例中,有两个项目,示例api(一个mini express项目)和示例共享(一个类库),都使用节点JS/TypeScript。我希望示例api能够使用示例共享的类来避免代码重复。在遵循示例之后,我引用了示例api中package.json中的示例共享项目 "dependencies": { "example-shared": "file:..\\example-shared",
package.json
中的示例共享项目
"dependencies": {
"example-shared": "file:..\\example-shared",
"express": "^4.17.1"
}
完成此操作后,在运行npm安装
之后,VSCode中的intellisense从示例共享项目中查看ApiClass
,并协助导入
然后,我可以通过NPM通过build命令tsc--build
运行,这会成功
我还可以看到sym链接已经在示例apinode\u modules
目录中创建
但是,当我尝试使用npm start
脚本从示例api下运行示例api项目时,我得到了如下错误:
Error: Cannot find module 'example-shared/apiClass'
Require stack:
...
code: 'MODULE_NOT_FOUND',
requireStack: [
...
]
我曾尝试从不同的位置运行命令,如所述,但迄今为止运气不佳
我正在使用Node(14+)和NPM(7+)的当前稳定版本
我不想通过NPM或git存储库进行共享,因为我觉得这会减慢开发速度
我做错了什么?这似乎是一个讨论过的问题,请参阅本文 我没有进一步调查,但在
示例共享
文件夹中,您可以从示例共享/tsconfig.json
中删除“outDir”
,然后运行npm运行构建
。
不幸的是,这将在typescript文件旁边发出javascript文件,而不是将它们放在单独的目录中
最后,在示例api
runnpmi
,npm run build
和npm start
现在,Express将运行,因为Node使用的是javascript文件而不是typescript文件。谢谢。您的更改起到了作用,因为我能够运行引用示例共享类的示例api项目,这确实有助于我的理解。我很惊讶没有现成的方法来实现我正在尝试的项目结构。如果typescript支持这一点就太好了,我可能会在有更多时间的时候再次研究这个问题。到目前为止,您可以尝试使用webpack和ts loader来编译源代码,而不是使用
tsc
,也许一些webpack插件可以替换模块路径,使它们指向dist
文件夹。祝你好运!如果您愿意,我们将不胜感激。我已经研究了bit.dev,它看起来很全面,但对于在模块之间共享几个类来说相当繁重。与此同时,我将选择KISS和duplicate代码,从微服务的角度来看,这并不可怕。