Knex: рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░реЗрдВ: рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдЬрдире░ 2019  ┬╖  27рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: knex/knex

рд╡рд╛рддрд╛рд╡рд░рдг

Knex рд╕рдВрд╕реНрдХрд░рдг: 0.16.3 (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЙрдПрдХреНрд╕рдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)
рдбреЗрдЯрд╛рдмреЗрд╕ + рд╕рдВрд╕реНрдХрд░рдг: PostgreSQL 10.5
рдУрдПрд╕: рд╡рд┐рдВрдбреЛрдЬ 10 рдкреНрд░реЛ 64 рдмрд┐рдЯ

рдмрдЧ

knex migrate:make somename рдЪрд▓рдиреЗ рдкрд░, рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:

Requiring external module ts-node/register
Using environment: development
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type undefined
    at assertPath (path.js:39:11)
    at Object.resolve (path.js:166:7)
    at directories.map.directory (X:\Code\node\knextest\node_modules\knex\lib\migrate\MigrationGenerator.js:82:28)
    at Array.map (<anonymous>)
    at MigrationGenerator._absoluteConfigDirs (X:\Code\node\knextest\node_modules\knex\lib\migrate\MigrationGenerator.js:81:24)
    at MigrationGenerator._ensureFolder (X:\Code\node\knextest\node_modules\knex\lib\migrate\MigrationGenerator.js:41:23)
    at MigrationGenerator.make (X:\Code\node\knextest\node_modules\knex\lib\migrate\MigrationGenerator.js:35:17)
    at Migrator.make (X:\Code\node\knextest\node_modules\knex\lib\migrate\Migrator.js:122:27)
    at Command.commander.command.description.option.action (X:\Code\node\knextest\node_modules\knex\bin\cli.js:179:10)
    at Command.listener (X:\Code\node\knextest\node_modules\commander\index.js:315:8)
    at Command.emit (events.js:182:13)
    at Command.parseArgs (X:\Code\node\knextest\node_modules\commander\index.js:654:12)
    at Command.parse (X:\Code\node\knextest\node_modules\commander\index.js:474:21)
    at Liftoff.invoke (X:\Code\node\knextest\node_modules\knex\bin\cli.js:278:13)
    at Liftoff.execute (X:\Code\node\knextest\node_modules\liftoff\index.js:203:12)
    at module.exports (X:\Code\node\knextest\node_modules\flagged-respawn\index.js:51:3)

рдпрд╣ рдореЗрд░реА knexfile.ts :

module.exports = {
  development: {
    client: 'pg',
    connection: {
      host: 'localhost',
      database: 'postgres',
      user: 'postgres',
      password: 'pw',
    },
    migrations: {
      directory: 'migrations',
    },
  },
};

рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг:

  • knex migrate:make somename рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдореИрдВ knexfile рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ .js рдмрджрд▓ рджреВрдВред (рдХреНрд▓реЗрдХреНрд╕ 0.16.3)
  • knex migrate:make somename рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ knexfile рдХреЗ рд╕рд╛рде knex 0.15.1 рдФрд░ @types/knex 0.15.1 рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдореИрдВрдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрдВрдЬрди рдпрд╛ рдХреНрдиреЗрдХреНрд╕ 0.15.1 - 0.16.3 рдХреЗ рдмреАрдЪ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

PostgreSQL рд╕рд░реНрд╡рд░ рдХреЛ рдХреНрд╡реЗрд░реА рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо Knex рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред

  1. рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ
knex migrate:make --knexfile knexfile.ts -x ts <your-migration-name>
  1. рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдПрдБ
knex migrate:latest --knexfile knexfile.ts 
  1. рдмреАрдЬ рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ
knex seed:make --knexfile knexfile.ts -x ts <your-seed-name>
  1. рдмреАрдЬ рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдПрдБ
knex seed:run --knexfile knexfile.ts 

--knexfile knexfile.ts рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк knexfile.js рдХреНрдпреЛрдВрдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред

рд╕рднреА 27 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡рддрдГ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ: https://github.com/tgriesser/knex/issues/2998
рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ 0.15.2 рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 0.16.x

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡рддрдГ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ: # 2998
рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ 0.15.2 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 0.16.x рдирд╣реАрдВ

рдирд╣реАрдВ, рдпрд╣ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реИред рдФрд░ рдореИрдВ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рджреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде # 2998 рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрд╡рдд: knexfile рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ knexfile.ts рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдЖрдк --knexfile knexfile.ts рддрд░реНрдХ рдХреЛ рдХрдорд╛рдВрдб рдХрд░рдиреЗ рдпрд╛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЬрдирд░реЗрдЯрд░ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рд░рд╛рд╕реНрддрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

knex migrate:make --migrations-directory . -x ts migration-name

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдпрджреНрдпрдкрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ knexfile.ts рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ migrate:latest рд╕рд╛рде рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛, рдЬреЛ migrate:make рддреБрд▓рдирд╛ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд░реВрдк рд╕реЗ рдПрдХ рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░рд┐рдкреНрд░реЛ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рджреЛрдиреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/jrr/knex-ts-issue-repro

рдЖрдЬ рдпрд╣ рднреА рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ knex --knexfile knexfile.ts migrate:make (...) .ts рдХреА рдмрдЬрд╛рдп рдПрдХ .js рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдЧреАред (рдкрд╣рд▓реЗ, рдЬрдм knex рдиреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ knexfile.ts рдЙрдард╛рдпрд╛ рдерд╛, рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ .ts рдорд╛рдЗрдЧреНрд░реЗрд╢рди рднреА рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛)ред

PostgreSQL рд╕рд░реНрд╡рд░ рдХреЛ рдХреНрд╡реЗрд░реА рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо Knex рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред

  1. рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ
knex migrate:make --knexfile knexfile.ts -x ts <your-migration-name>
  1. рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдПрдБ
knex migrate:latest --knexfile knexfile.ts 
  1. рдмреАрдЬ рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ
knex seed:make --knexfile knexfile.ts -x ts <your-seed-name>
  1. рдмреАрдЬ рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдПрдБ
knex seed:run --knexfile knexfile.ts 

--knexfile knexfile.ts рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк knexfile.js рдХреНрдпреЛрдВрдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред

рддрдп рдХрд░рдиреЗ рдкрд░ рдХреЛрдИ рдпреЛрдЬрдирд╛? рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рде Knex рдЕрдкрдирд╛рдиреЗ рдХреЛ рдмрдврд╝рд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ: /

@ рджрд╛рджрд╛рдЧрд┐рд░реА рд░рд┐рдорд╛рдЗрдВрдбрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЖрдЬ рдпрд╛ рдХрд▓ рджреЗрдЦ рд▓реВрдВрдЧрд╛ред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде

рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ!
https://github.com/tgriesser/knex/pull/3282

рдЖрдЬ рдпрд╣ рднреА рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ knex --knexfile knexfile.ts migrate:make (...) .ts рдХреА рдмрдЬрд╛рдп рдПрдХ .js рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдЧреАред (рдкрд╣рд▓реЗ, рдЬрдм knex рдиреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ knexfile.ts рдЙрдард╛рдпрд╛ рдерд╛, рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ .ts рдорд╛рдЗрдЧреНрд░реЗрд╢рди рднреА рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛)ред

рдХреЗрд╡рд▓ рдХреНрдпрд╛ рд╡реЗ рдЕрд▓рдЧ рдмрдЧ рд╣реИрдВ?

@ рдореИрдерд┐рдпреБрдордЧ рд╣рд╛рдВред рдкреАрдЖрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рдорд┐рдирдЯ рдкрд╣рд▓реЗ рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рд╣реИ: рдбреА

@kibertoad рдореИрдВрдиреЗ рдХрд┐рдпрд╛! рд╡рд┐рд╡рд░рдг рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ Knexfile рдХреЗ рд╕рдорд╛рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ред

The description makes it sounds like that was rather for inferring the extension based on the same extension as the Knexfile -> рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣рд╛рдБ, рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ knexfile рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдпрд╛ рдСрдЯреЛрд░реЗрд╕реНрдкреЛрдиреНрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЯреАрдПрд╕ рдиреЗрдХреНрд╕рдлрд╝рд╛рдЗрд▓реНрд╕ рдХреЗ 0.17.6 рдирд┐рд╢реНрдЪрд┐рдд рдСрдЯреЛрд░реЗрд╕реНрдкреЛрд▓реЗрд╢рдиред

рдареАрдХ рд╣реИ! рдХреНрдпреЛрдВрдХрд┐ extension: "ts" рд╕рд╛рде 0.17.6 рдиреЗ рдЕрднреА рднреА ".js" рдкрд░рд┐рдгрд╛рдо рджрд┐рдпрд╛ред рдЙрди рдмрдЧреНрд╕ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! ЁЯШД

рдХреНрдпреЛрдВрдХрд┐ 0.17.6 рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде: "ts" рдиреЗ рдЕрднреА рднреА ".js" рдкрд░рд┐рдгрд╛рдо рджрд┐рдпрд╛

рдЖрд╣, рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдиреЗрдХреНрд╕реНрдЯрд╛рдЗрд▓ рд╣реИ

{
...
migrations: {
  extension: "ts"
}

рдЗрд╕ рдореЗрдВ? рдЙрд╕ рдПрдХ рдХреЛ https://github.com/tgriesser/knex/commit/a65a95bc672563e01c08b40384e1dc2b079ecee1 рдореЗрдВ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдкрд░ рдЕрдкрдирд╛ рд╕рдВрд╕реНрдХрд░рдг рд▓реЙрдХ рдХрд░рдХреЗ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрджрд┐ рдЖрдк рд╕реАрдзреЗ рдорд╛рд╕реНрдЯрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ 0.17 рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛

0.18.0 рдЕрднреА рднреА рдХрд╛рдлреА рдЖрдЧреЗ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдЧрд▓рд╛ -1 рдЬрд╛рд░реА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдЕрд░реЗ, рдореИрдВрдиреЗ рдкреАрдЖрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА рд╣реИ, рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

@kibertoad рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛, рд╕рдЯреАрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рд╣рдо 0.18 рдкрд░ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдИ рддрдирд╛рд╡ рдирд╣реАрдВред ЁЯШД

@kibertoad рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╕реАрдзреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдкреНрд░рддрд┐рдмрджреНрдз рдЖрдк рдХреЗрд╡рд▓ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

module.exports = {
  migrations: {
    extension: 'ts';
  }
}

рд▓реЗрдХрд┐рди рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд╣рд╛рдВ рд░рдЦрд╛ рдЬрд╛рдП рдФрд░ рдХрд╣рд╛рдВ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рдП, рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ рдЗрд╕рдХреЗ рддрд╣рдд рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ

module.exports = {
  [environment]: {
    migrations: {
      directory: './migrations';
    }
}

рдпрджрд┐ рдореИрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рд╡рд╕реНрддреБ рд╕реЗ migrations рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@ViggoV рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЖрдЬ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред

@ViggoV рдХреНрдпрд╛ рдЖрдк рдирд╡реАрдирддрдо рдорд╛рд╕реНрдЯрд░

0.18.0-next2 рдореЗрдВ рдЬрд╛рд░реА

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ { ext: 'ts' } рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛, рдЬреЛ рдХрд┐ рдореЗрд░реА рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдордп рд╣реЛрдиреЗ рдкрд░ рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░реВрдВрдЧрд╛

рд╣рд╛рдп, рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереАред рдореИрдВрдиреЗ рдЕрдкрдиреЗ knexfile.ts рдореЗрдВ ts-node / register рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛

`
рдЖрд╡рд╢реНрдпрдХрддрд╛ ('ts-node / register')
const s = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("./ settings.js");
рдореЙрдбреНрдпреВрд▓ред рдирд┐рд░реНрдпрд╛рдд = {

client: 'pg',
connection: {
  user: s.user,
  host: s.host,
  database: 'starwars',
  password: s.password,
  ssl: true

}
};

`

рдореИрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рд╕рд░рд▓ рдерд╛ред рдореИрдВ рд╕рд┐рд░реНрдл _knexfile.js_ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ "/ рдмреИрдХрдПрдВрдб" рдореЗрдВ рдиреЗрдХреНрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдЕрдирдЬрд╛рдиреЗ рдХрд╛рд░рдг рд╕реЗ рдлрд╛рдЗрд▓ рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЪрд▓реА рдЧрдИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ knexfile.js рдХреЛ "backend / knexfile.js" рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рд╣рд╛рдп @moacirandretti , рдореЗрд░реЗ knexfile.ts рдпрд╣ рд░реВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд▓реА рд╣реЗрд░реЛрдХреВ heroku run knex --knexfile knexfile.ts migrate: latest
рдпрд╣ рд╕рдВрджреЗрд╢ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред

Running knex --knexfile knexfile.ts migrate: latest on тмв backend-ecolab ... up, run.5056 (Free)
Failed to load external module ts-node / register
Failed to load external module typescript-node / register
Failed to load external module typescript-register
Failed to load external module typescript-require
Failed to load external module sucrase / register / ts
Failed to load external module @ babel / register
Error: Cannot find module 'ts-node / register'
Require stack:
- /app/knexfile.ts
- /app/node_modules/knex/bin/cli.js
    at Function.Module._resolveFilename (internal / modules / cjs / loader.js: 966: 15)
    at Function.Module._load (internal / modules / cjs / loader.js: 842: 27)
    at Module.require (internal / modules / cjs / loader.js: 1026: 19)
    at require (internal / modules / cjs / helpers.js: 72: 18)
    at Object. <anonymous> (/app/knexfile.ts:1:1)
    at Module._compile (internal / modules / cjs / loader.js: 1138: 30)
    at Object.Module._extensions..js (internal / modules / cjs / loader.js: 1158: 10)
    at Module.load (internal / modules / cjs / loader.js: 986: 32)
    at Function.Module._load (internal / modules / cjs / loader.js: 879: 14)
    at Module.require (internal / modules / cjs / loader.js: 1026: 19)

рдореИрдВрдиреЗ рдЗрд╕ рдкреИрдХреЗрдЬ ts- рдиреЛрдб рдХреЛ рджреЗрд╡ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ

рдореИрдВрдиреЗ рдЙрд╕реА рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ред
knexfile.ts:

import dotenv from "dotenv";
import { Config } from "knex";
dotenv.config();

interface KnexConfig {
  [name: string]: Config;
}

const knexConfig: KnexConfig = {
  development: {
    client: "pg",
    connection: {
      host: process.env.DB_HOST || "127.0.0.1",
      user: process.env.DB_USERNAME || "postgres",
      password: process.env.DB_PASSWRORD || "postgres",
      database: process.env.DB_DEV_NAME || "done_list",
    },
    migrations: {
      directory: "./migrations",
      extension: "ts",
    },
  },
  test: {
    client: "pg",
    connection: {
      host: process.env.DB_HOST || "127.0.0.1",
      user: process.env.DB_USERNAME || "postgres",
      password: process.env.DB_PASSWRORD || "postgres",
      database: process.env.DB_DEV_NAME || "done_list_test",
    },
  },
};

export { knexConfig };

рдЬрдм рдореИрдВ knex migrate:make user рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрдиреБрд╕рд╛рд░ knex migrate:make --migrations-directory ./scr/migrations -x ts user рдЪрд▓рд╛рддрд╛ рд╣реВрдВред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ: 4.0.2
knex: 0.21.5
@ рдкреНрд░рдХрд╛рд░ / knex: 0.16.1

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕