[英]Cannot use import statement outside a module using typescript on backend
[英]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
/ export
是JavaScript 标准模块语法(“ECMAScript 模块”的“ESM”),但在exports
上分配属性是CommonJS 模块语法(又名“CJS”)。 您需要使用其中一个,如果您使用的是 ESM,则需要告诉.mjs
在package.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
你完成了=]
首先确保您已实例化 typescript 项目,因此您可能需要将 typescript 添加到您的依赖项中
纱线添加-D typescript
确保还有一个 tsconfig.json 文件
使用此命令将 knexfile.ts 添加到项目根目录
knex 初始化 -x ts
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.