LernaJS Typescript 找不到模块

Posted

技术标签:

【中文标题】LernaJS Typescript 找不到模块【英文标题】:LernaJS Typescript cannot find module 【发布时间】:2018-11-19 15:56:19 【问题描述】:

我正在尝试将 LernaJS 与 typescript 一起使用,但遇到了一些问题。当我尝试运行具有 package-2 作为依赖项的 package-1 时,出现错误:

模块.js:549 抛出错误; ^ 错误:找不到模块“package-2” 在 Function.Module._resolveFilename (module.js:547:15) 在 Function.Module._load (module.js:474:25) 在 Module.require (module.js:596:17) 在要求(内部/module.js:11:18) 在对象。 (/home/gabriel/Documentos/projetos/nodejs/lerna-t2/packages/package-1/dist/index.js:3:19) 在 Module._compile (module.js:652:30) 在 Object.Module._extensions..js (module.js:663:10) 在 Module.load (module.js:565:32) 在 tryModuleLoad (module.js:505:12) 在 Function.Module._load (module.js:497:3)

我已按照以下步骤操作:

    我创建了一个目录并运行了命令“lerna init” 我在 (package-1, package-2) 'packages' 文件夹中创建了 2 个文件夹
. ├── lerna.json ├── 节点模块 ├── package.json ├── package-lock.json └── 包裹 ├── package-1 └── package-2
    我在两个(package-1、package-2)中都运行了“npm init” 我在两个包中都创建了一个基本的“tsconfig.json”:
“编译器选项”: "outDir": "dist", “目标”:“es5”, “模块”:“commonjs”
    我在根文件夹中运行了“lerna bootstrap” 我使用了 'lerna add package-2 --scope=package-1' 我还在根文件夹 package-1 和 package-2 中运行了“npm i” 我在 package-1 和 package-2 中运行了“tsc -w”,在 package-1 中运行了“node dist/index.js”

文件树

我的“package-1”文件树:

. ├── 距离 │ └── index.js ├── index.ts ├── 节点模块 │ ├── package-2 -> ../../package-2 │ └── 打字稿 ├── package.json ├── package-lock.json └── tsconfig.json

我的“package-2”文件树:

. ├── 距离 │   ├── index.js │   └── 库 │   └── teste.js ├── index.ts ├── 库 │   └── teste.ts ├── package.json ├── package-lock.json └── tsconfig.json

代码

package-1

index.ts: 从 'package-2' 导入 Teste 新的 Teste().printHello()

package-2

lib/teste.ts: 出口类Teste 打印你好() console.log('你好!') index.ts: 从 './lib/teste' 导出 Teste

【问题讨论】:

【参考方案1】:

请确保您在 package.json 中定义了main(至少是 project-2)。我假设 package.json 中的 name 字段(对于 project-2)是project-2

主要应该链接到dist/index.js

【讨论】:

@lajtmaN:请详细说明,它是做什么的,你是如何得出这个决议的? @Gegenwind 这就是 Lerna 将项目链接在一起的方式。当您从 Lerna 存储库导入另一个项目时,您实际上只是导入了 package.json 中main 中定义的任何内容。 AFAIK 无法直接链接到您的 index.ts 文件,因为编译器希望导入的文件已经编译。这就是为什么您应该使用已编译的 javascript 文件(通常位于名为 dist 或 build 的文件夹中)。 非常感谢,我错过了一个非常小的细节:)

以上是关于LernaJS Typescript 找不到模块的主要内容,如果未能解决你的问题,请参考以下文章

我自己的 TypeScript 模块的“找不到模块”

误报 Typescript 找不到模块警告

TypeScript 找不到模块 flatpickr,即使它包含 typescript 类型

Nuxt TypeScript 错误:nuxt:typescript 找不到模块'@/my-module'

TypeScript + moment.js:错误 TS2307:找不到模块'moment'

TypeScript 错误:找不到模块“时刻”