LernaJS TypeScript无法找到模块

26

我正在尝试使用 LernaJS 来处理 TypeScript,但是遇到了一些问题。当我尝试运行依赖 package-2 的 package-1 时,出现以下错误:

    module.js:549
        throw err;
        ^
    
    Error: Cannot find module 'package-2'
        at Function.Module._resolveFilename (module.js:547:15)
        at Function.Module._load (module.js:474:25)
        at Module.require (module.js:596:17)
        at require (internal/module.js:11:18)
        at Object. (/home/gabriel/Documentos/projetos/nodejs/lerna-t2/packages/package-1/dist/index.js:3:19)
        at Module._compile (module.js:652:30)
        at Object.Module._extensions..js (module.js:663:10)
        at Module.load (module.js:565:32)
        at tryModuleLoad (module.js:505:12)
        at Function.Module._load (module.js:497:3)

我按照以下步骤进行操作:

  1. 创建一个目录并运行命令“lerna init”
  2. 在“packages”文件夹中创建了两个文件夹(package-1,package-2)
    .
    ├── lerna.json
    ├── node_modules
    ├── package.json
    ├── package-lock.json
    └── packages
        ├── package-1
        └── package-2
  1. 在 package-1 和 package-2 中都运行了“npm init”
  2. 在两个软件包中创建了一个基本的“tsconfig.json”:
    {
        "compilerOptions": {
            "outDir": "dist",
            "target": "es5",
            "module": "commonjs"
        }
    }
  1. 我在根目录下使用了'lerna bootstrap'
  2. 我使用了 'lerna add package-2 --scope=package-1'
  3. 我在根文件夹、package-1和package-2中都运行了'npm i'
  4. 我在package-1和package-2中运行了'tsc -w',并在package-1中运行了'node dist/index.js'

文件树

我的'package-1'文件树:

    .
    ├── dist
    │   └── index.js
    ├── index.ts
    ├── node_modules
    │   ├── package-2 -> ../../package-2
    │   └── typescript
    ├── package.json
    ├── package-lock.json
    └── tsconfig.json

我的'package-2'文件树:

    .
    ├── dist
    │   ├── index.js
    │   └── lib
    │       └── teste.js
    ├── index.ts
    ├── lib
    │   └── teste.ts
    ├── package.json
    ├── package-lock.json
    └── tsconfig.json

代码

package-1:

  • index.ts:
    import { Teste } from 'package-2'
    
    new Teste().printHello()

package-2:

  • lib/teste.ts:
    export class Teste {
    
        printHello() {
            console.log('你好!')
        }
    
    }

  • index.ts:
    export { Teste } from './lib/teste'

1个回答

36
请确保在您的 package.json 文件中定义了 main 属性(至少对于 project-2 项目)。我假设 package.json 文件中的 name 属性(对于 project-2 项目)为 project-2main 属性应连接到 dist/index.js

1
@lajtmaN:请详细说明,它是做什么的,你是如何得出这个结论的? - Gegenwind
6
这是Lerna将项目链接在一起的方式。当您从Lerna存储库导入另一个项目时,实际上只是导入package.json中“main”定义的内容。 据我所知,无法直接链接到index.ts文件,因为编译器期望已经编译导入的文件。这就是为什么您应该使用已编译的javascript文件(通常位于名为dist或build的文件夹中)。 - lajtmaN
1
非常感谢,我漏掉了一个非常小的细节 :) - Jose Villalobos
@lajtmaN请解释一下你所说的“Main should link to dist/index.js”的意思。我之前已经在所有的package.json文件中定义了main,但仍然出现这个错误。 - bikeman868

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接