0

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 and package-lock.json directories and reinstalled the dependencies using npm i --force.
  • I have tried installing the dependencies with a simple npm i, but that results in an error message.

0 Answers0