[英]Error: Must use import to load ES Module - Using Typescript and Node
[英]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
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)
})
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];
{
"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.