首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在mikroorm中使用模块外部的导入语句。

无法在mikroorm中使用模块外部的导入语句。
EN

Stack Overflow用户
提问于 2021-01-12 07:26:08
回答 5查看 2.5K关注 0票数 2

我在postgresql和nodejs中使用Mikro-orm,运行项目时会出现此错误:无法在模块外使用导入语句。我不知道怎么解释到底是怎么回事--我认为问题是在tsconfig.ts中,我正在使用带有postgresql和nodejs的Mikro-orm,这个错误在我运行我的项目时会出现:不能在模块之外使用导入语句。我不知道怎么解释这是怎么回事,我认为问题出在tsconfig.json

误差

代码语言:javascript
复制
import { Migration } from '@mikro-orm/migrations';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at wrapSafe (internal/modules/cjs/loader.js:979:16)
    at Module._compile (internal/modules/cjs/loader.js:1027:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Migrator.resolve (/home/logorcehab/Documents/Dev/altevibes/altevibe-server/node_modules/@mikro-orm/migrations/Migrator.js:141:27)
    at Object.customResolver (/home/logorcehab/Documents/Dev/altevibes/altevibe-server/node_modules/@mikro-orm/migrations/Migrator.js:43:44)
    at Migration.migration (/home/logorcehab/Documents/Dev/altevibes/altevibe-server/node_modules/umzug/lib/migration.js:60:38)
    at /home/logorcehab/Documents/Dev/altevibes/altevibe-server/node_modules/umzug/lib/migration.js:121:37
    at Generator.next (<anonymous>)
    at asyncGeneratorStep (/home/logorcehab/Documents/Dev/altevibes/altevibe-server/node_modules/umzug/lib/migration.js:9:103)
    at _next (/home/logorcehab/Documents/Dev/altevibes/altevibe-server/node_modules/umzug/lib/migration.js:11:194)
    at /home/logorcehab/Documents/Dev/altevibes/altevibe-server/node_modules/umzug/lib/migration.js:11:364
    at new Promise (<anonymous>)

mikro-orm.config.ts

代码语言:javascript
复制
import { MikroORM } from "@mikro-orm/core";
import { __PROD__ } from "./constants";
import { Users } from "./entities/Users";
import path from "path"
export default {
  migrations: {
    tableName: 'mikro_orm_migrations', // migrations table name
    path:'./src/migrations', // path to folder with migration files
    pattern: /^[\w-]+\d+\.[t]s$/, // how to match migration files
    transactional: true, // run each migration inside transaction
    disableForeignKeys: true, // try to disable foreign_key_checks (or equivalent)
    allOrNothing: true, // run all migrations in current batch in master transaction
    emit: 'ts', // migration generation mode
  },
  entities:[Users],
    dbName:'altevibes',
    user:'dev_main',
    password:'login@Logout64',
    type:'postgresql',
    debug: !__PROD__
} as Parameters<typeof MikroORM.init>[0];

index.ts

代码语言:javascript
复制
import {MikroORM } from "@mikro-orm/core"
import 'reflect-metadata'
import {__PROD__} from "./constants"
//import { Post } from "./entities/Post"
import express from 'express'
import { ApolloServer } from 'apollo-server-express'
import { buildSchema } from 'type-graphql'
//import { UsersResolver } from "./resolvers/user"
import { Users } from "./entities/Users"
import microConfig from './mikro-orm.config'
const main = async () => {
  const orm = await MikroORM.init(microConfig)
  await orm.getMigrator().up()
  const posts = orm.em.create(Users, {username: 'mfn'})
  await orm.em.persistAndFlush(posts)
}

console.log("Hello World")

main().catch((e)=>{console.log(e)});

package.json

代码语言:javascript
复制
{
  "name": "altevibe-server",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "watch": "tsc -w",
    "dev": "nodemon dist/src/index.js",
    "start": "node dist/src/index.js",
    "start2": "ts-node src/index.ts",
    "create:migration": "mikro-orm migration:create"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@mikro-orm/cli": "^4.3.4",
    "@mikro-orm/core": "^4.3.4",
    "@mikro-orm/migrations": "^4.3.4",
    "@mikro-orm/mongodb": "^4.3.4",
    "@mikro-orm/postgresql": "^4.3.4",
    "@sindresorhus/is": "^4.0.0",
    "apollo-server-express": "^2.19.1",
    "argon2": "^0.27.1",
    "class-validator": "^0.12.2",
    "express": "^4.17.1",
    "graphql": "^15.4.0",
    "mikro-orm": "^4.3.4",
    "mongodb": "^3.6.3",
    "nodemon": "^2.0.6",
    "pg": "^8.5.1",
    "reflect-metadata": "^0.1.13",
    "run-rs": "^0.7.4",
    "ts-node": "^9.1.1",
    "type-graphql": "^1.1.1"
  },
  "mikro-orm": {
    "useTsNode": false,
    "configPaths": [
      "./src/mikro-orm.config.ts",
      "./dist/src/mikro-orm.config.js"
    ]
  },
  "devDependencies": {
    "@types/express": "^4.17.9",
    "typescript": "^4.1.3"
  }
}

tsconfig.json

代码语言:javascript
复制
{
  "compilerOptions": {
    "target": "es6",
    "lib": [
      "es6"
    ],
    "sourceMap": true,
    "outDir": "./dist/src",
    "moduleResolution": "node",
    "removeComments": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "noImplicitThis": true,
    "module": "commonjs",
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "esModuleInterop": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "resolveJsonModule": true,
    "baseUrl": "."
  },
  "exclude": [
    "node_modules"
  ],
  "include": [
    "./src/**/*.tsx",
    "./src/**/*.ts"
  ]
}
EN

回答 5

Stack Overflow用户

发布于 2021-07-14 14:47:25

我也遇到了同样的问题,并通过在root中创建一个扩展的tsconfig.mikro-orm.json文件并将其添加到其中来解决这个问题。

代码语言:javascript
复制
// tsconfig.mikro-orm.json
{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "module": "commonjs" // this line is important 
  }
}

// in package.json file add 
"mikro-orm": {
    "useTsNode": true,
    "tsConfigPath": "./tsconfig.mikro-orm.json", // and let the compiler know where the file is present.
    "configPaths": [
      "./src/mikro-orm.config.ts",
      "./dist/mikro-orm.config.js"
    ]
}

我希望这能解决问题

票数 3
EN

Stack Overflow用户

发布于 2021-08-04 11:26:08

我也有同样的问题。安装ts-node包对我有效。

票数 2
EN

Stack Overflow用户

发布于 2021-01-12 10:49:45

问题在于编译器将代码理解为一个单独的公共脚本文件。您需要将其声明为模块文件。

将此添加到您的package.json顶部

代码语言:javascript
复制
// package.json
{
  "type": "module"
}

正如nodejs文档https://nodejs.org/docs/latest-v13.x/api/esm.html#esm_package_json_type_field中所提到的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65679578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档