簡體   English   中英

錯誤:必須使用導入來加載 ES 模塊 - MikroOrm 和 Typescript

[英]Error: Must use import to load ES Module - MikroOrm and Typescript

我正在嘗試初始化一個 mikrorm 設置來處理我的 postgres DB,但由於 ESM 編譯錯誤,我無法運行我的 run-dev 腳本:

> yarn dev     
Error: Must use import to load ES Module: C:\Users\Itay\Desktop\anewproj\dastack\server\src\index.ts

我深入研究了必須更改的 tsconfig 內容或松散導入可能導致的問題,但遺憾的是我沒有發現任何指向它的文件(index.ts、mikro-orm.config.ts)

我正在使用最新的節點版本:

node -v
v18.7.0

和這個版本的紗線:

yarn -v
1.22.19

此外,當我嘗試通過 cli 工具運行遷移時,我偶然發現了一個非常相似的錯誤:

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module

這些是我一直在處理的文件:

索引.ts

import { MikroORM } from "@mikro-orm/core";
import { Post } from "./entities/Post";
import { __prod__ } from "./constants";
import microConfig from './mikro-orm.config';

const main = async () => {
    const orm = await MikroORM.init(microConfig);
    
    const post = orm.em.create(Post, {title: 'my first dummpy post', createdAt: new Date(), updatedAt: new Date()});
    await orm.em.persistAndFlush(post);

    console.log("-----------sql 2 --------")
    await orm.em.nativeInsert(Post, {title: "second post with other insert"});

}

main().catch(err => {
    console.error(err)
})


mikto-orm.config.ts

import { __prod__ } from "./constants";
import { MikroORM } from "@mikro-orm/core";
import { Post } from "./entities/Post";
import path from "path";

export default {
    
    migrations: {
    path: path.join(__dirname, "./migrations"),
    pattern: /^[\w]+\d+\.[tj]$/,
    },
    entities: [Post],
    dbName:"fakereddit",
    type:"postgresql",
    debug:!__prod__,
    
} as Parameters<typeof MikroORM.init>[0];

tsconfig.json

{
  "compilerOptions": {
    "target": "ES2021",
    "module": "ESNext",
    "lib": ["dom", "ESNext", "esnext.asynciterable"],
    "skipLibCheck": true,
    "sourceMap": true,
    "outDir": "./dist",
    "moduleResolution": "node",
    "removeComments": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "noImplicitThis": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "resolveJsonModule": true,
    "baseUrl": ".",
    "strict": true
  },
  "ts-node": {
    "esm": true
  },
  "exclude": ["node_modules"],
  "include": ["./src/**/*.tsx", "./src/**/*.ts"]
}

希望有一種方法可以解決這個問題而不用核對一切

如果您打算使用類進行實體定義和默認的反射元數據,我寧願不鼓勵使用 ES 模塊,因為您很容易陷入循環依賴的問題。 使用 ts-morph 或 EntitySchema 它可能會起作用,但還會有其他問題,恕我直言,許多依賴項尚未准備好 ESM。

但是如果你仍然想嘗試,你可以通過MIKRO_ORM_DYNAMIC_IMPORTS=1 env var 讓 MikroORM 使用動態導入。

您還可以看到使用 ES 模塊和EntitySchema的 JS 示例存儲庫:

https://github.com/mikro-orm/express-js-example-app

(它使用.env文件來設置它)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM