繁体   English   中英

TypeScript/Knex:不能在模块外使用 import 语句

[英]TypeScript/Knex: Cannot use import statement outside a module

我是 TypeScript 的新手,目前使用 Knex 在我们的 PostgreSQL 数据库中构建模板表。 在这个文件和其他文件上,我不断地遇到与 TypeScript 相同的问题,代码如下:

import * as Knex from 'knex';


exports.up = async (knex: Knex): Promise<void> => {
    await knex.schema.raw(`
    CREATE TABLE test (
        test TEXT NOT NULL,
        tes2  INTEGER NOT NULL,
        PRIMARY KEY (key, website)
    ) 
`);
}


exports.down = async (knex: Knex): Promise<void> => {
    await knex.schema.dropTable('test');
}

我得到这个错误:

import * as Knex from 'knex';
^^^^^^

SyntaxError: Cannot use import statement outside a module

我也尝试过这些变种:

   import * as Knex = require('knex');
   import { * as Knex } from 'knex';
   const * = require('knex');
   const { * as Knex } = require('knex');

但是我在网上找不到任何似乎可以解决问题的解决方案。

对此的任何帮助都会很棒。

您正在混合两种不同类型的模块。 import / exportJavaScript 标准模块语法(“ECMAScript 模块”的“ESM”),但在exports上分配属性是CommonJS 模块语法(又名“CJS”)。 您需要使用其中一个,如果您使用的是 ESM,则需要告诉.mjspackage.json中使用"type": "module"使用 TypeScript,您可能需要"module": "ES2020"或类似的(更多here )。

该错误告诉我们 Node.js 和/或 TypeScript 认为您正在使用 CJS。 如果你想继续这样做,它可能是:

const Knex = require("knex");

...但请参阅文档,因为他们显示将该导出称为 function。 (也许你稍后会这样做。)

如果您设置 knex而不指定您将使用 typescript,则可能会发生此错误。

如果要创建 typescript 迁移,请确保使用以下命令初始化 knex:

knex init -x ts

尝试了很多东西但没有任何帮助,试图将类型更改为模块只会让事情变得更糟。 毕竟缺少的是 ts-node:

纱线添加 ts-node -D

你完成了=]

  1. 首先确保您已实例化 typescript 项目,因此您可能需要将 typescript 添加到您的依赖项中

    纱线添加-D typescript

  2. 确保还有一个 tsconfig.json 文件

  3. 使用此命令将 knexfile.ts 添加到项目根目录

    knex 初始化 -x ts

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM