Ошибка CLI MikroORM: база данных не указана, укажите опцию dbName или clientUrl

Пытаюсь запустить CLI MikroORM, но безуспешно.

У меня есть монорепозиторий NX, где MikroORM является библиотекой.

Я пробовал использовать переменные .env и package.json, но получал для них разные ошибки.

Использование package.json

Это package.json

{
   "name":"@my-app",
   "version":"1.0.0",
   "license":"MIT",
   "scripts":{},
   "private":true,
   "dependencies":{},
   "devDependencies":{},
   "mikro-orm":{
      "useTsNode":true,
      "tsConfigPath":"./libs/database/tsconfig.orm.json",
      "configPaths":[
         "./libs/database/src/lib/mikro-orm.config.ts",
         "./dist/libs/database/src/lib/mikro-orm.config.js"
      ]
   }
}

Это файл конфигурации MikroORM

import { ConfigService } from '@nestjs/config'
import { MikroOrmModuleOptions } from '@mikro-orm/nestjs'
import { MySqlDriver, ReflectMetadataProvider } from '@mikro-orm/mysql'
import { SeedManager } from '@mikro-orm/seeder'
import { Migrator } from '@mikro-orm/migrations'

import { SoftDeletableHandlerSubscriber } from '@my-app/core'

const mikroOrmConfig = {
    user: process.env['DB_USERNAME'],
    host: process.env['DB_HOST'],
    password: process.env['DB_PASSWORD'],
    dbName: process.env['DB_NAME'],
    port: parseInt(process.env['DB_PORT'] as string),

    driver: MySqlDriver,
    autoLoadEntities: true,
    entities: ['dist/**/entities/*.js'],
    entitiesTs: ['src/**/entities/*.ts'],
    metadataProvider: ReflectMetadataProvider,
    extensions: [SoftDeletableHandlerSubscriber, SeedManager, Migrator],
    registerRequestContext: true,
    allowGlobalContext: process.env['NODE_ENV'] === 'test',
    migrations: {
        tableName: 'migration',
        path: './migrations',
        snapshot: true
    },
    seeder: {
        path: './seeders',
        pathTs: './seeders',
        defaultSeeder: 'DatabaseSeeder',
        glob: '!(*.d).{js,ts}',
        emit: 'ts',
        fileName: (className: string) => className
    }
} as MikroOrmModuleOptions

export default mikroOrmConfig

И это tsconfig.orm.json

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "moduleResolution": "NodeNext"
  }
}

Это tsconfig.json, который используется для продления

{
  "extends": "../../tsconfig.base.json",
  "compilerOptions": {
    "module": "commonjs",
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "noImplicitOverride": true,
    "noPropertyAccessFromIndexSignature": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true
  },
  "files": [],
  "include": [],
  "references": [
    {
      "path": "./tsconfig.lib.json"
    },
    {
      "path": "./tsconfig.spec.json"
    }
  ]
}

При запуске npx mikro-orm debug я получаю следующий результат

Current MikroORM CLI configuration
 - dependencies:
   - mikro-orm 6.2.9
   - node 18.17.0
   - typescript 5.3.3
 - package.json found
 - ts-node enabled
 - searched config paths:
   - C:/Work/my-company/my-app/code/my-app-backend/libs/database/src/lib/mikro-orm.config.ts (found)
   - C:/Work/my-company/my-app/code/my-app-backend/dist/libs/database/src/lib/mikro-orm.config.js (found)     
   - C:/Work/my-company/my-app/code/my-app-backend/src/mikro-orm.config.ts (not found)
   - C:/Work/my-company/my-app/code/my-app-backend/mikro-orm.config.ts (not found)
   - C:/Work/my-company/my-app/code/my-app-backend/dist/mikro-orm.config.js (not found)
   - C:/Work/my-company/my-app/code/my-app-backend/mikro-orm.config.js (not found)
- configuration not found (No database specified, please fill in `dbName` or `clientUrl` option)

Использование переменных .env

Это мои переменные .env

# MIKRO ORM
MIKRO_ORM_CLI_USE_TS_NODE=true
MIKRO_ORM_CLI_ALWAYS_ALLOW_TS=true
MIKRO_ORM_CLI_CONFIG = "./libs/database/src/lib/mikro-orm.config.ts"
MIKRO_ORM_CLI_TS_CONFIG_PATH = "./libs/database/tsconfig.json"

и это результат, который я получаю при запуске той же команды

Current MikroORM CLI configuration
 - dependencies:
   - mikro-orm 6.2.9
   - node 18.17.0
   - typescript 5.3.3
 - package.json found
 - ts-node enabled
 - searched config paths:
   - C:/Work/my-company/my-app/code/my-app-backend/libs/database/src/lib/mikro-orm.config.ts (found)
   - C:/Work/my-company/my-app/code/my-app-backend/src/mikro-orm.config.ts (not found)
   - C:/Work/my-company/my-app/code/my-app-backend/mikro-orm.config.ts (not found)
   - C:/Work/my-company/my-app/code/my-app-backend/dist/mikro-orm.config.js (not found)
   - C:/Work/my-company/my-app/code/my-app-backend/mikro-orm.config.js (not found)
- configuration not found (Cannot use import statement outside a module)

Переменная среды существует, и приложение работает/собирается нормально.

РЕДАКТИРОВАТЬ 1

При выполнении только подхода переменных ENV

MIKRO_ORM_CLI_USE_TS_NODE=true
MIKRO_ORM_CLI_CONFIG = "./libs/database/src/lib/mikro-orm.config.ts"
MIKRO_ORM_CLI_TS_CONFIG_PATH = "./libs/database/tsconfig.json"

Как вы сказали, мне не нужен tsconfig.orm.json, поэтому я использую tsconfig, который использовал для расширения tsconfig.orm.ts, и удалил раздел MikroORM из package.json. Я получаю следующую ошибку:

Current MikroORM CLI configuration
 - dependencies:
   - mikro-orm 6.2.9
   - node 18.17.0
   - typescript 5.3.3
 - package.json found
 - ts-node enabled
 - searched config paths:
   - C:/Work/my-company/my-app/code/my-app-backend/dist/mikro-orm.config.js (not found)
   - C:/Work/my-company/my-app/code/my-app-backend/mikro-orm.config.js (not found)
- configuration not found (MikroORM config file not found in ['./dist/mikro-orm.config.js', './mikro-orm.config.js'])
  1. ts-node установлен (я не включил зависимости, чтобы он не занимал так много времени), но это "ts-node": "^10.9.1"

С помощью package.json, полностью закомментировав переменные env, сохраняя при этом ссылку на ./libs/database/tsconfig.orm.json и после добавления import 'dotenv/config', я теперь запускаю их. Но если я изменю tsConfigPath на ранее упомянутый tsconfig.json, я получу следующую ошибку:

 Current MikroORM CLI configuration
     - dependencies:
       - mikro-orm 6.2.9
       - node 18.17.0
       - typescript 5.3.3
     - package.json found
     - ts-node enabled
     - searched config paths:
       - C:/Work/my-company/my-app/code/my-app-backend/libs/database/src/lib/mikro-orm.config.ts (found)
       - C:/Work/my-company/my-app/code/my-app-backend/dist/libs/database/src/lib/mikro-orm.config.js (found)     
       - C:/Work/my-company/my-app/code/my-app-backend/src/mikro-orm.config.ts (not found)
       - C:/Work/my-company/my-app/code/my-app-backend/mikro-orm.config.ts (not found)
       - C:/Work/my-company/my-app/code/my-app-backend/dist/mikro-orm.config.js (not found)
       - C:/Work/my-company/my-app/code/my-app-backend/mikro-orm.config.js (not found)
    - configuration not found (⨯ Unable to compile TypeScript:
    error TS5109: Option 'moduleResolution' must be set to '
    NodeNext' (or left unspecified) when option 'module' is set to 'NodeNext'.
    )
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Несколько случайных заметок. Если вам нужна дополнительная помощь, свяжитесь с нами в Discord и предоставьте полный репозиторий, а не только фрагменты.

  1. Не хотите MIKRO_ORM_CLI_ALWAYS_ALLOW_TS, значит, вам нужно самому принести поддержку ТС, например. выполнив через bun -b (у которого есть свои подводные камни, поскольку Bun на самом деле далек от совместимости с узлами).

  2. Вам необходимо установить ts-node, если вы хотите, чтобы ORM использовал его, я не вижу его в ваших зависимостях. Вероятно, это причина, по которой вы видите Cannot use import statement outside a module, поскольку это означает, что вы пытаетесь прочитать файл TS без регистрации ts-node.

  3. Вам не нужен файл tsconfig.orm.json, ORM автоматически переопределит moduleResolution на NodeNext на самом деле с целью регистрации поддержки TS. Также во втором подходе вы переопределяете путь к нему через env var, который указывает на что-то другое, поэтому фактически он там полностью игнорируется.

  4. Когда вы получаете MIKRO_ORM_CLI_TS_CONFIG_PATHdbNameNo database specified, please fill in clientUrlor, это, скорее всего, означает, что ваши переменные окружения пусты. Я предполагаю, что вы забыли вызвать option в своей конфигурации - ORM больше не будет делать это за вас, начиная с версии 6, он все равно будет читать его автоматически, но будет уважать только свои собственные переменные окружения (с префиксом import 'dotenv/config') и не будет делать они вообще часть MIKRO_ORM_.

Спасибо за ответ. Пожалуйста, проверьте редактирование. Я могу сделать репо с NX, но, думаю, оно будет большим.

z0mbieKale 10.07.2024 10:52

Пожалуйста, попробуйте последнюю версию для разработчиков, CLI теперь устанавливает как module, так и moduleResolution (что, я думаю, уже было в версии 6.2.9, но, возможно, это было добавлено позже).

Martin Adámek 10.07.2024 11:28

Другие вопросы по теме