使用TS与ESM模块时Knex migrate:make命令执行失败
Knex + TypeScript 执行migrate命令报错
使用knex init -x ts搭建基于TypeScript的Knex项目后,执行knex migrate:make test命令时出现如下错误:
Unknown file extension ".ts" for C:\Dev\js\knex-ts\knexfile.ts TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for C:\Dev\js\knex-ts\knexfile.ts at new NodeError (node:internal/errors:405:5) at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:79:11) at defaultGetFormat (node:internal/modules/esm/get_format:124:36) at defaultLoad (node:internal/modules/esm/load:89:20) at nextLoad (node:internal/modules/esm/loader:163:28) at load$1 (file:///C:/Dev/js/knex-ts/.pnp.loader.mjs:1456:12) at nextLoad (node:internal/modules/esm/loader:163:28) at ESMLoader.load (node:internal/modules/esm/loader:603:26) at ESMLoader.moduleProvider (node:internal/modules/esm/loader:457:22) at new ModuleJob (node:internal/modules/esm/module_job:64:26)
极简复现项目配置
knexfile.ts
import type { Knex } from "knex"; const config: { [key: string]: Knex.Config } = { development: { client: "pg", } }; export default config
package.json
{ "name": "knex-ts", "type": "module", "scripts": { "knex": "knex" }, "dependencies": { "knex": "^3.0.1", "pg": "^8.11.3", "ts-node": "^10.9.1", "typescript": "^5.2.2" }, "devDependencies": { "@types/node": "^20.9.0" }, "packageManager": "yarn@3.6.3" }
tsconfig.json
{ "compilerOptions": { "module": "ESNext", "target": "ESNext", }, "include": ["**/*.ts", "**/*.tsx"], "exclude": ["node_modules"] }
已尝试的无效方案
- 在tsconfig的
compilerOptions或ts-node配置项下添加"esm": true,无效果 - 移除package.json中的
"type": "module"后,系统要求添加"moduleResolution": "nodenext",但仍出现语法错误:Unexpected token "export"
内容的提问来源于stack exchange,提问作者E Purwanto
相关产品推荐
相关产品推荐

