Problem
I am trying to run the knex.js migration script knex migrate:latest --env development
, but I am getting an error message. I have also tried using the --esm
flag, but that results in another error message.
Proof
Here are photos of the error messages I am getting:
- Error message without
-esm
flag:
npm run migrateDev
> memr-api@0.23.0 migrateDev
> knex migrate:latest --env development
Requiring external module ts-node/register
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /Users/alucard/Work/kepler/api/knexfile.ts
at new NodeError (node:internal/errors:371:5)
at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:87:11)
at defaultGetFormat (node:internal/modules/esm/get_format:102:38)
at defaultLoad (node:internal/modules/esm/load:21:14)
at ESMLoader.load (node:internal/modules/esm/loader:359:26)
at ESMLoader.moduleProvider (node:internal/modules/esm/loader:280:58)
at new ModuleJob (node:internal/modules/esm/module_job:66:26)
at ESMLoader.#createModuleJob (node:internal/modules/esm/loader:297:17)
at ESMLoader.getModuleJob (node:internal/modules/esm/loader:261:34)
at async Promise.all (index 0)
- Error message with
-esm
flag:
npm run migrateDev
> memr-api@0.23.0 migrateDev
> knex --esm migrate:latest --env development
Requiring external module ts-node/register
/Users/alucard/Work/kepler/api/migrations/20221212111522_add-other-not-listed-record-to-fda-drug-table.ts:4
export async function up(knex: Knex): Promise<void> {
^
SyntaxError: Invalid or unexpected token
at Module._extensions..js (node:internal/modules/cjs/loader:1157:10)
Here is a photo of my tsconfig.json
file:
{
"compilerOptions": {
"baseUrl": ".",
"outDir": "tmp",
"paths": {
"*": ["*"]
},
"target": "esnext",
"module": "esnext",
"lib": ["es2020", "dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": false,
"noEmit": true,
"jsx": "preserve",
"noImplicitReturns": true,
"noImplicitThis": true,
"noImplicitAny": true,
"strictNullChecks": true,
"noUnusedLocals": true,
"useUnknownInCatchVariables": false,
"inlineSourceMap": true
},
"include": ["src"],
"ts-node": {
"esm": true
},
"lib": ["esnext"]
}
Here is a photo of my knexfile.ts
config:
const knexConfig = {
client: "pg",
connection,
migrations: {
directory: "migrations",
tableName: "knex_migrations",
extension: "ts",
},
seeds: {
directory: "seeds",
extension: "ts",
},
useNullAsDefault: true,
};
module.exports = knexConfig;
export default knexConfig;
Question
What suggestions do you have for resolving this problem with the knex.js migration script?
Thanks to all who tried to help and for attention to my trouble
What I've Tried
- I have tried using different node versions (v14.21.2, v16.14.2, v18.12.1, and v19.1.0) and switching between them using nvm.
- I have deleted the
node_modules
andpackage-lock.json
directories and reinstalled the dependencies usingnpm i --force
. - I have tried installing the dependencies with a simple
npm i
, but that results in an error message.