LernaJS Typescript не может найти модуль

Я пытаюсь использовать LernaJS с машинописным текстом, и у меня есть некоторые проблемы. Когда я пытаюсь запустить свой пакет package-1, в котором есть зависимость package-2, я получаю сообщение об ошибке:

    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. Я создал 2 папки внутри папки (package-1, package-2) 'packages'
    .
    ├── lerna.json
    ├── node_modules
    ├── package.json
    ├── package-lock.json
    └── packages
        ├── package-1
        └── package-2
  1. Я запускал npm init в обоих (пакет-1, пакет-2)
  2. Я создал базовый tsconfig.json в обоих пакетах:
    {
        "compilerOptions": {
            "outDir": "dist",
            "target": "es5",
            "module": "commonjs"
        }
    }
  1. Я запустил 'lerna bootstrap' в корневой папке
  2. Я использовал 'lerna add package-2 --scope = package-1'
  3. Я также запустил npm i в корневой папке, package-1 и package-2
  4. Я запускал 'tsc -w' в пакете-1 и пакете-2 и 'node dist / index.js' в пакете-1

ФАЙЛОВОЕ ДЕРЕВО

Мое дерево файлов 'package-1':


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

Мое файловое дерево пакета-2:


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

КОД

пакет-1:

  • index.ts:

    import { Teste } from 'package-2'
    
    new Teste().printHello()

пакет-2:

  • lib / teste.ts:

    export class Teste {
    
        printHello() {
            console.log('Hello!')
        }
    
    }

  • index.ts:

    export { Teste } from './lib/teste'


person J G    schedule 10.06.2018    source источник


Ответы (1)


Убедитесь, что вы определили main в своем package.json в (как минимум project-2). Я предполагаю, что поле имени в package.json (для проекта-2) равно project-2.

Главное должно быть связано с dist/index.js

person lajtmaN    schedule 12.06.2018
comment
@lajtmaN: Расскажите, пожалуйста, подробнее, что он делает и как вы пришли к этому решению? - person Gegenwind; 16.04.2019
comment
@Gegenwind Вот как Лерна связывает проекты вместе. Когда вы импортируете другой проект из репозитория Lerna, вы фактически просто импортируете все, что определено в main в package.json. AFAIK невозможно напрямую связать с вашим файлом index.ts, поскольку компилятор ожидает, что импортированные файлы уже будут скомпилированы. Вот почему вы должны использовать скомпилированный файл javascript (часто расположенный в папке с именем dist или build). - person lajtmaN; 23.04.2019
comment
Спасибо большое, мне не хватало очень маленькой детали :) - person Joe Walker; 06.06.2019