<p>knex 0.16 рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП knexfiles рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ</p>

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

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

рдХреНрдиреЗрдХреНрд╕ рд╕рдВрд╕реНрдХрд░рдг: 0.16.3
рдбреЗрдЯрд╛рдмреЗрд╕ + рд╕рдВрд╕реНрдХрд░рдг: рдбреЙрдХрд░ postgres:10.4
рдУрдПрд╕: рд╡рд┐рдВрдбреЛрдЬ 10 рдкреНрд░реЛ рдФрд░ рдбреЙрдХрд░ node:8.14.0

рдХреАрдбрд╝рд╛

  1. knex migrate:make --knexfile knexfile.ts
  2. рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢: Unexpected token import

рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ 0.15.x рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

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

рдореБрдЭреЗ рдХреНрдиреЗрдХреНрд╕ рд╕рдВрд╕реНрдХрд░рдг 0.16.3 рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рдерд╛ред

import * as Knex from 'knex';
^^^^^^

SyntaxError: Unexpected token import
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:617:28)
    at Object.Module._extensions..js (module.js:664:10)

рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ ts-node/register knexfile.ts рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ

require('ts-node/register');
//

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

0.16 рдореЗрдВ рдЕрдм рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ рд░реЗрдкреЛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рджреЗрдЦреЗрдВ #2845 )ред рдЗрд╕рдХреЗ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ @types/knex рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ред

рдореИрдВрдиреЗ @types/knex рд╕реНрдерд╛рдкрдирд╛ рд░рджреНрдж рдХрд░ рджреА рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред

/usr/src/app/src/db/knexfile.ts:1
(function (exports, require, module, __filename, __dirname) { import { database } from '../config'
                                                              ^^^^^^

SyntaxError: Unexpected token import
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:617:28)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at initKnex (/usr/src/app/node_modules/knex/bin/cli.js:62:25)
    at Command.commander.command.description.option.action (/usr/src/app/node_modules/knex/bin/cli.js:172:24)
    at Command.listener (/usr/src/app/node_modules/commander/index.js:315:8)
    at emitTwo (events.js:126:13)
    at Command.emit (events.js:214:7)
    at Command.parseArgs (/usr/src/app/node_modules/commander/index.js:654:12)
    at Command.parse (/usr/src/app/node_modules/commander/index.js:474:21)

knex migrate:make --knexfile knexfile.ts рдХреНрдпрд╛ рдпрд╣ рд╕рд╛рджрд╛ рдиреЛрдб рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ 0.15 рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рдерд╛ред

рдЖрдкрдХрд╛ рдиреЗрдХреНрд╕рдлрд╛рдЗрд▓ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдХреЛрдИ рдЖрдпрд╛рдд рд╡рд┐рд╡рд░рдг рд╣реИ?

import * as knex from 'knex'
import * as path from 'path'
import { env } from './env'

const database = {
  client: 'postgresql',
  connection: env.databaseUrl,
  migrations: {
    directory: path.resolve('../db/migrations'),
    tableName: 'knex_migrations',
  },
  seeds: {
    directory:  path.resolve('../db/seeds'),
  },
} as knex.Config

export = database

0.15 рдкрд░ 100% рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ 0.15 рдХреЗ рд╕рд╛рде рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЪреВрдВрдХрд┐ рддреНрд░реБрдЯрд┐ Unexpected token import рдЖрдкрдХреЛ рдмрддрд╛рддреА рд╣реИ, import * as knex from 'knex' Node.js рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдЙрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд╣реАрдВ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред

рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдЕрдкрдиреЗ knexfile рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдПрдХ Node.js рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЖрдпрд╛рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ (рджреЗрдЦреЗрдВ https://nodejs.org/api/esm.html ), рдпрд╛ рдкреБрд░рд╛рдиреЗ require() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╡рд╛рдкрд╕ рд▓рд╛рдПрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ knex реж.резрел рдореЗрдВ рдПрдХ рдмрдЧ рдерд╛ рддрд╛рдХрд┐ рд╡рд╣ рдЙрд╕ knexfile рдХреЛ рдХрднреА рди рдкрдврд╝реЗред 0.16 рдореЗрдВ рдмрдЧ рдХреА рддрд░рд╣ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рддрд╛рдХрд┐ рд╡рд╣ рдЙрд╕ knexfile рдХреЛ рдХрднреА рди рдкрдврд╝реЗрдВ

рдпрд╣ 100% knexfile рдкрдврд╝рддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдореЗрд░реЗ рд╕рд┐рд░ рдХреЗ рдКрдкрд░ рд╕реЗ рдореИрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ 4 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ) рд╡рд┐рднрд┐рдиреНрди рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рдеред

рд╕рдВрд╕реНрдХрд░рдг 0.15 рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ ts-node рдХрд╛ рд╕рдВрдХрд▓рди рдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ ... рдЖрдк рд╕рд╣реА рд╣реИрдВ, рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдг рдЯреАрдПрд╕-рдиреЛрдб рд╕рд╛рдорд╛рди рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдЕрдЧрд░ рджрд╕реНрддрд╛рд╡реЗрдЬ рднреАред

рдирд╣реАрдВ... рдЕрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдиреЛрдб 8 рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдЖрд╡рд╢реНрдпрдХ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ

Mikaels-MacBook-Pro-2:test mikaelle$ npm install [email protected] ts-node-register
npm WARN [email protected] No description
npm WARN [email protected] No repository field.

+ [email protected]
+ [email protected]
updated 2 packages and audited 1037 packages in 2.135s
found 0 vulnerabilities

Mikaels-MacBook-Pro-2:test mikaelle$ echo "import * as knex from 'knex'; export = {client: 'pg'}" > knexfile.ts
Mikaels-MacBook-Pro-2:test mikaelle$ node_modules/.bin/knex migrate:make --knexfile knexfile.ts -x ts foo
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 @babel/register
/Users/mikaelle/Projects/Vincit/yessql/dodo-objection/test/knexfile.ts:1
(function (exports, require, module, __filename, __dirname) { import * as knex from 'knex'; export = {client: 'pg'}
                                                              ^^^^^^

SyntaxError: Unexpected token import

рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ knex рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдмреАрдЬреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ts-node рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ 0.15 рдкрд░ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ 0.16 рдкрд░ рдирд╣реАрдВ, рддреЛ рдореИрдВрдиреЗ рдПрдХ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ

рд╢рд╛рдЦрд╛: knex16 рдореЗрдВ 0.16.3 рд╕реНрдерд╛рдкрд┐рдд рд╣реИ
https://github.com/brunolm/knex16bug/tree/knex16

рд╢рд╛рдЦрд╛: knex15 рдореЗрдВ 0.15.2 рд╕реНрдерд╛рдкрд┐рдд рд╣реИ
https://github.com/brunolm/knex16bug/tree/knex15

рдЙрд╕ рд╢рд╛рдЦрд╛ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдВрдЪрдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

docker-compose up

рдпрджрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ test рдореЗрдВ /api/src/db/migrations test рдирд╛рдордХ рдПрдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП

рдХреБрдЫ рдФрд░ рдкреИрдХреЗрдЬ (рдЯреАрдПрд╕-рдиреЛрдб рдЯреАрдПрд╕-рдиреЛрдб-рджреЗрд╡ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ, 0.15 рдФрд░ 0.16 рдпрд╣рд╛рдВ рдареАрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ ... рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдиреЛрдб 0.16 рдХреЗ рд╕рд╛рде рдЖрдкрдХрд╛ рдбреЙрдХрдЯрд░ рд╕реЗрдЯрдЕрдк рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпреЛрдВ

Mikaels-MacBook-Pro-2:test mikaelle$ rm -fr node_modules/*
Mikaels-MacBook-Pro-2:test mikaelle$ npm install knex typescript ts-node
npm WARN [email protected] No description
npm WARN [email protected] No repository field.

+ [email protected]
+ [email protected]
+ [email protected]
added 295 packages from 184 contributors and audited 1213 packages in 6.59s
found 0 vulnerabilities

Mikaels-MacBook-Pro-2:test mikaelle$ node_modules/.bin/knex migrate:make --knexfile knexfile.ts test
Requiring external module ts-node/register
Created Migration: /xxx/migrations/20190119003358_test.js
Mikaels-MacBook-Pro-2:test mikaelle$ cat knexfile.ts 
import * as knex from 'knex'; export = {client: 'pg'}
Mikaels-MacBook-Pro-2:test mikaelle$ 

рдореИрдВрдиреЗ рдЖрдкрдХреЗ docker-compose.yml рдХреЛ рдХрд╛рдлреА рд╕рдорд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

version: '3'

services:
  api:
    image: node:8.14.0
    command: bash -c 'rm -fr api/node_modules; npm i knex ts-node typescript; node_modules/.bin/knex migrate:make --knexfile ./src/db/knexfile.ts test'
    working_dir: /usr/src/app
    volumes:
      - ./api:/usr/src/app
api_1  | npm WARN [email protected] No repository field.
api_1  | 
api_1  | + [email protected]
api_1  | + [email protected]
api_1  | + [email protected]
api_1  | updated 3 packages and audited 1176 packages in 9.804s
api_1  | found 0 vulnerabilities
api_1  | 
api_1  | /usr/src/app/src/db/knexfile.ts:1
api_1  | (function (exports, require, module, __filename, __dirname) { import { database } from '../config'
api_1  |                                                               ^^^^^^
api_1  | 

рдЕрдЧрд░ рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ knexfile рдХреЛ /usr/src/app рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ рддреЛ рдЙрд╕рдиреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ ... рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рднрд▓реЗ рд╣реА knexfile.ts рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдЕрдВрджрд░ рд╣реЛ...

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╢рд╛рдпрдж 0.16 рдкрд░ рдПрдХ рдмрдЧ рдорд┐рд▓рд╛, рдпрд╛ рдмрд╕ рдХреБрдЫ рдЕрдЬреАрдмред

0.15 рдкрд░ launch рдХреЛ configPath рд╕рд╛рде рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
https://github.com/tgriesser/knex/blob/0.15.2/bin/cli.js#L260

рд▓реЗрдХрд┐рди 0.16 рдкрд░ рдЗрд╕реЗ with . рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ

    knexfile: argv.knexfile,
    knexpath: argv.knexpath,

https://github.com/tgriesser/knex/blob/0.16.3/bin/cli.js#L303 -L304

рд▓рд┐рдлрд╝реНрдЯрдСрдлрд╝ var env = this.buildEnvironment(opts); рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ findConfig({ рдкрд╛рд╕рд┐рдВрдЧ configPath (рдЬреЛ рдЕрдм рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ configPath рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ knexfile рдпрд╛ knexpath рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред


рдореЗрд░реЗ рдкрд╛рд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ typescript рдФрд░ ts-node рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рдФрд░ рдпрд╣ рддрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ v0.15 рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЧрд┐рдЯ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдкрд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рд╣реИред

рдореИрдВрдиреЗ рдХреБрдЫ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдФрд░ рдЗрд╕реЗ рдкрд╛рдпрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ 0.15 . рдкрд░ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

[email protected]

рдЗрд╕ рд▓рд╛рдЗрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд▓реЙрдЧ рдХрд░рдирд╛

var config = require(env.configPath);

https://github.com/tgriesser/knex/blob/0.15.2/bin/cli.js#L55

рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛

api_1    |   require(/usr/src/app/src/db/knexfile.ts)------------ { client: 'postgresql',
api_1    |   connection: 'postgres://user:password@db/api-db',
api_1    |   migrations:
api_1    |    { directory: '/usr/src/app/src/db/migrations1337',
api_1    |      tableName: 'knex_migrations' },
api_1    |   seeds: { directory: '/usr/src/app/src/db/seeds' } }
api_1    | this.config { extension: 'js',
api_1    |   loadExtensions:
api_1    |    [ '.co',
api_1    |      '.coffee',
api_1    |      '.eg',
api_1    |      '.iced',
api_1    |      '.js',
api_1    |      '.litcoffee',
api_1    |      '.ls',
api_1    |      '.ts' ],
api_1    |   tableName: 'knex_migrations',
api_1    |   schemaName: null,
api_1    |   directory: '/usr/src/app/src/db/migrations1337',
api_1    |   disableTransactions: false }

рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╣ рд░рд╣реА рд╣реИ directory: '/usr/src/app/src/db/migrations1337', , рдЬреЛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ knexfile.ts . рдкрд░ рд╣реИ

рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдлрд╛рдЗрд▓ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ .ts

require('/usr/src/app/src/db/knexfile.ts')

[email protected]

рдЖрд╡рд╢реНрдпрдХрддрд╛ рдареАрдХ рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ

// /usr/src/app/src/db/knexfile.ts
env.configuration = require(resolvedKnexfilePath);

[email protected]

рдореИрдВрдиреЗ typescript рдФрд░ ts-node рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЕрдм рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИ:

api_1    | Failed to load external module ts-node/register
api_1    | Failed to load external module typescript-node/register
api_1    | Failed to load external module typescript-register
api_1    | Failed to load external module typescript-require
api_1    | Failed to load external module @babel/register
cli.on('requireFail', function(name) {
  console.log(chalk.red('Failed to load external module'), chalk.magenta(name));
});

https://github.com/tgriesser/knex/blob/0.15.2/bin/cli.js#L254

рдореБрдЭреЗ рдпрд╣ рд╕рдВрджреЗрд╢ 16 рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдмрд╕ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред

@elhigu рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдордЭ рд▓рд┐рдпрд╛, рдореИрдВрдиреЗ рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рдпрд╛, рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ?
https://github.com/tgriesser/knex/pull/3005

рдЗрд╕рдХреЗ рдмрд╛рдж рд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рд╢рд╛рдпрдж рдХрд╣реАрдВ рдПрдХ рдмрдЧ рд╣реИ ... рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдУрдПрд╕рдПрдХреНрд╕ рдкрд░ рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПред

FYI рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдмреНрд░реВрдиреЛрд▓рдо рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рдпрд╛ рдФрд░ knex 0.15.2 рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдмрдХрд┐ knex 0.16.3 рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

@scorbin рд╣рд╛рдБ, рдореИрдВ рдЙрд╕реЗ рднреА

рдпрд╣рд╛рдБ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдЗрдЧреНрд░реЗрд╢рди + 0.16.3)ред
рдЬрдм Migrator#latest рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреА рд╢реБрд░реБрдЖрдд migrationListResolver#listAllAndCompleted рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ listAll(config.migrationSource) рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ migrationSource рдореЗрдВ loadExtensions = [".co", ".coffee", ".eg", ".iced", ".js", ".litcoffee", ".ls", ".ts"] , рднрд▓реЗ рд╣реА рдореИрдВ { тАж, loadExtensions: ['.js'], тАж } рдкреНрд░рд╡рд╛рд╕реА рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╣ .ts рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ .js рджреЛрдиреЛрдВ рдХреЛ рдЪреБрдирддрд╛ рд╣реИ рдФрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ .ts рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╛рд╣рд┐рд░ рд╣реИ), рдЬреЛ ... рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм #getMigration рдХреЛ рдЕрдВрддрддрдГ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде #require рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ)ред

рдЙрдореНрдореАрдж рд╣реИ рдпреЗ рдорджрдж рдХрд░реЗрдЧрд╛...

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдереЛрдбрд╝реЗ рд╕реЗ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде, рдЪреАрдЬреЗрдВ рд╡рд╛рдкрд╕ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдиреЗ рд▓рдЧрддреА рд╣реИрдВ:

function listAllAndCompleted(config, trxOrKnex) {
  return _bluebird.default.all([listAll(config.migrationSource, config.loadExtensions), listCompleted(config.tableName, config.schemaName, trxOrKnex)]);
}

рдореИрдВрдиреЗ рдпрд╣ рдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдкреНрд░рд╡рд╛рд╕реА рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде 100% рдЕрдиреБрд░реВрдк рд╣реИ - рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рд╕реЗ рдПрдХ рдФрд░ рдЬрд╛рдирдХрд╛рд░ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛! :)

рдореБрдЭреЗ рдХреНрдиреЗрдХреНрд╕ рд╕рдВрд╕реНрдХрд░рдг 0.16.3 рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рдерд╛ред

import * as Knex from 'knex';
^^^^^^

SyntaxError: Unexpected token import
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:617:28)
    at Object.Module._extensions..js (module.js:664:10)

рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ ts-node/register knexfile.ts рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ

require('ts-node/register');
//

0.16.4-рдЕрдЧрд▓реЗ2 . рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдмрд╕ 0.16.4-рдЕрдЧрд▓рд╛ 2 рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рд╡рд╣реА рддреНрд░реБрдЯрд┐ рджреЗрдЦрдХрд░ рджреБрдЦ рд╣реБрдЖ

@brunolm рдХреНрдпрд╛ рдЖрдк рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ 0.16.4-рдЕрдЧрд▓рд╛ 2 рдЕрднреА рднреА рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ?

@pvoisin рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП 0.16.4-рдЕрдЧрд▓рд╛ 2 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

@kibertoad рдореБрдЭреЗ 0.16.4-next2 рдкрд░ рдареАрдХ рд╡реИрд╕реА рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред

рдареАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕реЗ knexfile рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдП

рдореИрдВ рдорд░реЗ рд╣реБрдП рдШреЛрдбрд╝реЗ рдХреЛ рд╣рд░рд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди @kibertoad рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЗрд╕реЗ

@juliancoleman рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлрд┐рдХреНрд╕ рдореЗрдВ рд░рд┐рдЧреНрд░реЗрд╢рди рдЯреЗрд╕реНрдЯ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ (рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдерд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕реАрдЖрдИ рдПрдирд╡реА рдкрд░ рдЕрд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖ)ред

рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдЪрд┐рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдкреАрдЫреЗ рдореБрдбрд╝рдХрд░ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд╕рд╣рд┐рдд рдХрд┐рд╕реА рдиреЗ рднреА рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХрджрдо рдирд╣реАрдВ рдЬреЛрдбрд╝реЗ рд╣реИрдВред

  1. рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ [email protected] рдЬреЛрдбрд╝реЗрдВ
  2. рдПрдХ knexfile.ts рдмрдирд╛рдПрдВ
  3. (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрд╢рдирдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) Model.knex рдкрд░ рддрддреНрдХрд╛рд▓ knex рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди
  4. рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ package.json

    • "knex": "knex --knexfile ./path/to/Knexfile.ts"

  5. рдкрд▓рд╛рдпрди рдХрд░реЗрдВ

    • yarn knex migrate:latest

  6. SyntaxError рдореЗрдВ рдЪрд▓рд╛рдПрдБ

рдореИрдВрдиреЗ рдЗрди рдЪрд░рдгреЛрдВ рдХреЛ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рджреВрд╕рд░реЗ рджрд┐рди рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛, рдЬреЛ рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд▓реЗ рдЖрдпрд╛

    "knex": "^0.16.4-next2",
git clone [email protected]:brunolm/knex16bug.git
cd knex16bug
git checkout knex16
npm run api-i
docker-compose up
api_1    | > knex migrate:make --knexfile ./src/db/knexfile.ts "test"
api_1    |
api_1    | /usr/src/app/src/db/knexfile.ts:1
api_1    | (function (exports, require, module, __filename, __dirname) { import { database } from '../config'
api_1    |                                                               ^^^^^^
api_1    |
api_1    | SyntaxError: Unexpected token import
api_1    |     at createScript (vm.js:80:10)
api_1    |     at Object.runInThisContext (vm.js:139:10)
api_1    |     at Module._compile (module.js:617:28)
api_1    |     at Object.Module._extensions..js (module.js:664:10)
api_1    |     at Module.load (module.js:566:32)
api_1    |     at tryModuleLoad (module.js:506:12)
api_1    |     at Function.Module._load (module.js:498:3)
api_1    |     at Module.require (module.js:597:17)
api_1    |     at require (internal/module.js:11:18)
api_1    |     at initKnex (/usr/src/app/node_modules/knex/bin/cli.js:62:25)
api_1    |     at Command.commander.command.description.option.action (/usr/src/app/node_modules/knex/bin/cli.js:172:24)
api_1    |     at Command.listener (/usr/src/app/node_modules/commander/index.js:315:8)
api_1    |     at emitTwo (events.js:126:13)
api_1    |     at Command.emit (events.js:214:7)
api_1    |     at Command.parseArgs (/usr/src/app/node_modules/commander/index.js:654:12)
api_1    |     at Command.parse (/usr/src/app/node_modules/commander/index.js:474:21)
api_1    | npm ERR! code ELIFECYCLE
api_1    | npm ERR! errno 1
api_1    | npm ERR! [email protected] migrate-make: `knex migrate:make --knexfile ./src/db/knexfile.ts "test"`
api_1    | npm ERR! Exit status 1
api_1    | npm ERR!
api_1    | npm ERR! Failed at the [email protected] migrate-make script.
api_1    | npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
api_1    |
api_1    | npm ERR! A complete log of this run can be found in:
api_1    | npm ERR!     /root/.npm/_logs/2019-03-18T21_39_10_408Z-debug.log

рдореЗрд░рд╛ рдкреАрдЖрд░ рдЗрд╕реЗ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдЬреНрдЮрд╛рди рдирд╣реАрдВ рд╣реИ, рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕реЗ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ ...

https://github.com/tgriesser/knex/pull/3005

рдореИрдВ рдорд░реЗ рд╣реБрдП рдШреЛрдбрд╝реЗ рдХреЛ рдкреАрдЯрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди @kibertoad рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдлрд┐рдХреНрд╕ рдХрд╛ рд╕рдмреВрдд рдХрд╣рд╛рдВ рдерд╛? рдХреНрдпрд╛ рдкреНрд░рддрд┐рдЧрдорди рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ? рдпрд╣ рдХрд╣рдирд╛ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдирд╛, рдФрд░ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдореМрдЬреВрдж рд╣реЛрдирд╛, рд░рд┐рд▓реАрдЬ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ, рдпрд╣рд╛рдВ рдПрдореНрд╕реНрдЯрд░реНрдбрдо рдореЗрдВ рджреЗрд░ рд╣реЛ рдЪреБрдХреА рдереА рдФрд░ рдореЗрд░реЗ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЪреБрдирд╛рд╡ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рдерд╛ред рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ "рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ 0.16.4-рдЕрдЧрд▓рд╛ 2 рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ", рдЬреИрд╕рд╛ рдХрд┐ рдЯреАрдмреАрдПрдЪ, рдЕрдЧрд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рддреЛ рдореБрдЭреЗ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрддрд╛ред рдПрдХ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдлрд┐рдХреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдм рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛, рдФрд░ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдпрд╣ рдкрд╣рд▓реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рдерд╛ knexfile рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдХреЗ рд╣реИред рдпрд╣ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕реБрдзрд╛рд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдХреБрдЫ рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛рдПрдБ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдЕрд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБред рдмрд╕ рдореБрдЭреЗ рдХреБрдЫ рд╕рдордп рджреЛред рдЗрд╕ рдмреАрдЪ, ts-node рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ - рдХреЛрдИ рдпрд╣ рддрд░реНрдХ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ knexfile рдкрд░ рдирд┐рд░реНрднрд░ рди рд╣реЛрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╣реИрдХреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдЪреНрдЪрд╛рдИ рдХреЗ рдПрдХрд▓ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ knexfile рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

@kibertoad

рдФрд░ рдПрдХ рд╣реА рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рдерд╛, рд╡рд╣ рд╣реИ knexfile рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдирд╛ред

рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИ, рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджреЗрдЦреЗрдВред рд╕рдм рдХреБрдЫ 0.15 рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@brunolm рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рддрдХрдиреАрдХреА рд╕реНрддрд░ рдкрд░ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрд╛рд▓реНрдкрдирд┐рдХ рд░реВрдк рд╕реЗ рднреА рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╕рдордп Node.js рдХреИрд╕реЗ рдЪреЛрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВ рдкреАрдЖрд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░реВрдБрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрддрддрдГ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдзреНрдпрдореЛрдВ рд╕реЗ) - knexfile рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред

@kibertoad рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ ts-node рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рддрдХрдиреАрдХреА рд╕реНрддрд░ рдкрд░ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ

рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╕реНрд░реЛрдд рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрддрд╛, рддреЛ рдореИрдВ рд╣реЛрддрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдХреНрдиреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╡рд╛рдкрд╕ 0.15 рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ , рдмрд┐рд▓реНрдХреБрд▓

@brunolm рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рддрдХрдиреАрдХреА рд╕реНрддрд░ рдкрд░ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрд╛рд▓реНрдкрдирд┐рдХ рд░реВрдк рд╕реЗ рднреА рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╕рдордп Node.js рдХреИрд╕реЗ рдЪреЛрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВ рдкреАрдЖрд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░реВрдБрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрддрддрдГ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдзреНрдпрдореЛрдВ рд╕реЗ) - knexfile рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ knex 0.15 рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, knexfile.ts рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рди рдХрд░рддреЗ рд╣реБрдП

git clone [email protected]:brunolm/knex16bug.git
cd knex16bug
git checkout knex15
npm run api-i
docker-compose up

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрджрд┐ рдЖрдк рдареАрдХ рд╡рд╣реА рдЪреАрдЬрд╝ knex 0.16 рдкрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХреНрд▓реЛрди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдПрдХ рдЕрд▓рдЧ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреНрд▓реЛрдирд┐рдВрдЧ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдЖрдк рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╣реИрдВ

git clone [email protected]:brunolm/knex16bug.git
cd knex16bug
git checkout knex16
npm run api-i
docker-compose up

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ @brunolm рдХреЗ рдЙрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдерд╛, рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрднреА рднреА рдкреНрд░рдЬрдирди рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рдмрдирд╛ рдореИрдХреЛрдЬрд╝ рдкрд░ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдбреЙрдХрдЯрд░ рд╕реЗрдЯрдЕрдк рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

рддреЛ рд╕рдорд╕реНрдпрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ knex CI рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧреА, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 0.16 рдкрд░ рднреА рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ 0.15 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИред рдЪреВрдВрдХрд┐ рд╕реАрдЖрдИ рдХреБрдЫ рдкреБрд░рд╛рдиреЗ рдЙрдмрдВрдЯреВ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдЕрд░реНрде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ) рдареАрдХ рд╣реИред

рдореЗрд░реА рдУрд░ рд╕реЗ рддреНрд╡рд░рд┐рдд рдЕрдкрдбреЗрдЯред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ tsconfig.json рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ knex рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЬрдм рдореИрдВ рд╕реАрдзреЗ рд╢реБрд░реВ рдХрд░рдХреЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ overrode knex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ ts-node , рдореИрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдореЗрд░рд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ package.json :

// ...
"knex": "ts-node --project tsconfig.server.json $(npm bin)/knex --knexfile ./src/server/knexfile.ts",
// ...

рдореИрдВ рдЕрдм рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреИрд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ:

npm run knex -- migrate:latest

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред

@FindAPattern рдХреНрдпрд╛ рдЖрдк рдЕрдкрдирд╛ tsconfig рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ? рдпреЗ рдореЗрд░рд╛ред рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ ts-node рд╕рд╛рде рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ

{
  "compilerOptions": {
    "noEmit": true,
    "rootDir": "src",
    "target": "es6",
    "module": "commonjs",
    "moduleResolution": "node",
    "declaration": true,
    "inlineSourceMap": true,
    "resolveJsonModule": true,
  },
  "include": [
    "src/**/*.ts",
  ],
  "exclude": [
    "src/**/*.spec.ts"
  ]
}

рдирдорд╕реНрддреЗ! рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рд╣реБрдИ рд╣реИ?

@brunolm рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдХреЛрдИ рдЙрдкрд╛рдп?

@algil рдореБрдЭреЗ рдЕрднреА рддрдХ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрднреА рднреА рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП 0.15 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдЖрдк knex рдХреЛ рдлреЛрд░реНрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЗрд╕рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/tgriesser/knex/pull/3005

рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗред рдореИрдВ рдПрдХ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ рдЬреЛ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рддрд╛ рд╣реИред

рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред tsconfig.json "рдореЙрдбреНрдпреВрд▓" рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рдордп рдлрд┐рдХреНрд╕реНрдб: "es2015" рд╕реЗ "рдореЙрдбреНрдпреВрд▓": "commonjs"
package.json => "migrate" рдореЗрдВ рдХрдорд╛рдВрдб: "ts-node -P ./tsconfig.json node_modules/.bin/knex рдорд╛рдЗрдЧреНрд░реЗрдЯ:latest --knexfile knexfile.ts"ред

рд╢рд╛рдпрдж рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред tsconfig.json "рдореЙрдбреНрдпреВрд▓" рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рдордп рдлрд┐рдХреНрд╕реНрдб: "es2015" рд╕реЗ "рдореЙрдбреНрдпреВрд▓": "commonjs"
package.json => "migrate" рдореЗрдВ рдХрдорд╛рдВрдб: "ts-node -P ./tsconfig.json node_modules/.bin/knex рдорд╛рдЗрдЧреНрд░реЗрдЯ:latest --knexfile knexfile.ts"ред

рдЗрд╖реНрдЯрддрдо рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@Areshetcov @Meldiron рдореИрдВ commonjs рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдПрдХ рдЧрд╣рд░рд╛ рд╕рдорд░реНрдерди рд╣реИ, рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдПрдХ рдЯрди рд╣реЛред рдЬрдм рддрдХ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд┐рд╕реА рд░рд┐рд▓реАрдЬрд╝ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬреЛ рдЕрдм рдкреАрдЫреЗ рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 0.17.6 рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ?

@juliancoleman ts- рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрднреА рднреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ knex рдЕрднреА рднреА knexfile.js рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд░ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реИ рддреЛ рд╡рд┐рд╕реНрдлреЛрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдзрд┐рдХ рдорд╛рдорд▓реЛрдВ рдореЗрдВ TS рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реБрдЖ рдерд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЬрдирд░реЗрд╢рди рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдерд╛рди рдкрд░ knexfile рдХреЛ рд╣рд▓ рдХрд░рдирд╛)ред рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреМрди рд╕рд╛ рд╡рд┐рд╢реЗрд╖ рдореБрджреНрджрд╛ рд╣реИ?

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рджрд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдореЗрдВ рдЗрд╕ рдкрд░ рдПрдХ рдФрд░ рд╕реНрд╡рд┐рдВрдЧ рд▓реЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рдХрдо рд╕реЗ рдХрдо рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЕрддреАрдд рдореЗрдВ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдбреА

рдЬрдм рдореИрдВрдиреЗ рд╡рд╣ рдкреАрдЖрд░ рдмрдирд╛рдпрд╛ рддреЛ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдпрд╣ рди рдХреЗрд╡рд▓ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде, рдмрд▓реНрдХрд┐ рдмреЗрдмреЗрд▓ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдПрдХ рдкреИрдХреЗрдЬ рд╣реИ рдЬреЛ рдпрд╣ рд╕рдм рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ - рдЕрдЧрд░ рдореБрдЭреЗ рд╕рд╣реА рд╕реЗ рдпрд╛рдж рд╣реИред

рдореЗрд░реЗ рдкреАрдЖрд░ рдореЗрдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╕рдВрдХреЗрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ https://github.com/tgriesser/knex/pull/3005/files

рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВ npm run knex migrate:latest рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ unexpected token '{' ред рдореИрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЯреАрдПрд╕-рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдмрдВрдбрд▓рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдЪрд▓рд╛рддрд╛ рдФрд░ рдореИрдВ TS рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ред рдпрд╣ рд╢рд╛рдпрдж _do_ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рдореИрдВ рдпрд╣реА рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреГрддреАрдп-рдкрдХреНрд╖ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд╣реАрдВ рдФрд░ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ Knex рдХреЗ рд╕рд╛рде

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреГрддреАрдп-рдкрдХреНрд╖ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ ts-node рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ require() рд╕рд╛рде рд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдорд╛рдЗрдЧреНрд░реЗрдЯрд░ рдЙрди рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП require() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ...

рдЕрдЧрд░ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рддреЛ рдмрд╕ рдпрд╣рд╛рдВ рдЪрд┐рд▓реНрд▓рд╛ рд░рд╣рд╛ рд╣реИ: рдореЗрд░реЗ рдкрд╛рд╕ [email protected] рдФрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ * knex --knexfile src/knexfile.ts рдЬреЛ рдЕрд╕рдлрд▓ рд░рд╣рд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреЗрдПрд╕ рдХреЗ рд░реВрдк рдореЗрдВ knexfile рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред knex --cwd src рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

*) рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдорд╛рдВрдбрд▓рд╛рдЗрди node -r dotenv/config node_modules/knex/bin/cli [...] рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред

@ilkka рдХреНрдпрд╛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ "рдЗрдЪреНрдЫрд┐рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ" рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ? рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЖрдк node рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ рди рдХрд┐ ts-node , рдпрд╣ Knex knexfile.ts рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реИ, рдпрд╣ Node. рдЬрдм рддрдХ рдЖрдкрдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдЧрд▓рдд рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рдХреНрдпрд╛ knex --cwd src рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╢реНрди рдореЗрдВ knexfile рдЦреЛрд▓рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ?

рдЖрд╣, рдореБрдЭреЗ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдЬрдм рдореИрдВ рдЕрдкрдиреА npm рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ knex рдЪрд▓рд╛рддреЗ рд╕рдордп --cwd рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ "рдмрд╛рд╣рд░реА рдореЙрдбреНрдпреВрд▓ ts-рдиреЛрдб/рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛" рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдореЗрд░реЗ knexfile рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╣реА рд╣реИ рдпрджрд┐ рдореИрдВ рдЗрд╕реЗ npx knex рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдПрдХ npm рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рд╣рд░ред

@ilkka рджрд┐рд▓рдЪрд╕реНрдкред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдиреЗрдХреНрд╕ рдХрднреА рднреА рдЯреАрдПрд╕-рдиреЛрдб рдХреЛ рдЕрдкрдиреЗ рдЖрдк рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╕реНрдЯреИрдХ рд╕реЗ рдХреБрдЫ рдФрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдкрд╣рдЪрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдордиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд┐рдпрд╛ред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ cli.js рджреНрд╡рд╛рд░рд╛ рд╣реИ , рдЬреЛ рдПрдХ рд▓рд┐рдлреНрдЯрдСрдл рдШрдЯрдирд╛ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ (рдкрд╣рд▓реЗ 'рдЖрд╡рд╢реНрдпрдХрддрд╛' рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ рд▓рд┐рдлреНрдЯрдСрдлрд╝ рдореЗрдВ рдХреБрдЫ рдФрд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рд▓рд┐рдлреНрдЯрдСрдлрд╝ рдмрджрд▓реЗ рдореЗрдВ рд▓реЛрдбрд░ рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рд░реЗрдХреЛрдЗрд░" рдирд╛рдордХ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд░реАрдХреЛрдЗрд░ рдХреЗ рд░реАрдбрдореЗ рдореЗрдВ рдпрд╣ рдиреЛрдЯ рд╣реИ рдХрд┐ рдпрд╣ " coffee-script рдЬреИрд╕реЗ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдФрд░ рдкрдВрдЬреАрдХреГрдд рдХреИрд╕реЗ рдХрд░реЗрдЧрд╛"ред рддреЛ ... рд╢рд╛рдпрдж рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореЗрд░реЗ рдкрде рдореЗрдВ ts-node рд╣реЛрдирд╛ рд╣реА рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ? рдпрд╣ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рдкреНрд░рдгрд╛рд▓реА рд╣реИред

рд╡реИрд╕реЗ рднреА, рдЕрдм рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рд╣рдо рдЕрдкрдиреА npm рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ node рдХреЛ ts-node рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рдереЗ рдФрд░ рдпрд╣ рдХрд╛рдо рднреА рдХрд░ рд╕рдХрддрд╛ рдерд╛ред

рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓рд┐рдлреНрдЯрдСрдл рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ: рдбреА
рд▓реЗрдХрд┐рди рд╣рд╛рдБ, рдЯреАрдПрд╕-рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАрдзреЗ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдереАред рдирд┐рдХрд▓рд╛ рдореИрдВрдиреЗ рдЧрд▓рдд tsconfig.json рдХреЙрдкреА рдХрд┐рдпрд╛ рд╣реИред рдЕрдм рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╡рд┐рдиреНрдпрд╛рд╕:

package.json (рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░)

  "scripts": {
    "migrate:make": "knex --cwd src migrate:make -x ts"
  },
  "dependencies": {
    "knex": "0.19.0",
    "pg": "7.11.0"
  }

package.json (рд░реВрдЯ):

        "ts-node-dev": "1.0.0-pre.40",

(рдЯреАрдПрд╕-рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рд╣реИ: рео.рей.реж)

tsconfig.json (рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░):

{
    "extends": "../../tsconfig.node.json",
    "compilerOptions": {
        "rootDir": "./src",
        "outDir": "./build",
    }
}

tsconfig.node.json (рд░реВрдЯ):

{
    "compilerOptions": {
        "target": "es2015",
        "moduleResolution": "node",
        "esModuleInterop": true,
        "strict": true,
        "alwaysStrict": true,
        "declaration": true,
    }
}

src/knexfile.ts:

import { Config } from 'knex'

export = {
    client: 'pg',
    connection: {
      database: 'db',
      user: 'user',
    },
} as Config

рдЪрд▓рд╛рдиреЗ рдХреА рдЖрдЬреНрдЮрд╛:

yarn migrate:make my_migration_name

рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА [email protected] рдкрд░ рдмрдиреА рд╣реБрдИ рд╣реИ

git clone [email protected]:brunolm/knex16bug.git
cd knex16bug
git checkout knex19
npm run api-i
docker-compose up
api_1    | /usr/src/app/src/db/knexfile.ts:1
api_1    | (function (exports, require, module, __filename, __dirname) { import { database } from '../config'
api_1    |                                                               ^^^^^^ 

@brunolm рддреБрдо рдЗрддрдиреЗ рдЕрдЬреНрдЮрд╛рдиреА рдХреНрдпреЛрдВ рд╣реЛ?

diff --git a/api/package.json b/api/package.json
index c0f8bff..0906f51 100644
--- a/api/package.json
+++ b/api/package.json
@@ -8,7 +8,7 @@
     "dev": "ts-node-dev --respawn --poll --no-notify src/index.ts",
     "\n# Database": "",
     "migrate": "knex migrate:latest --knexfile ./src/db/knexfile.ts",
-    "migrate-make": "knex migrate:make --knexfile ./src/db/knexfile.ts",
+    "migrate-make": "knex migrate:make --cwd src/db",
     "seed": "knex seed:run --knexfile ./src/db/knexfile.ts",
     "seed-make": "knex seed:make --knexfile ./src/db/knexfile.ts",
     "\n# Testing": "",
api_1    | > [email protected] migrate-make /usr/src/app
api_1    | > knex migrate:make --cwd src/db "test"
api_1    | 
api_1    | Requiring external module ts-node/register
api_1    | Working directory changed to /usr/src/app/src/db
api_1    | Created Migration: /usr/src/app/src/db/migrations/20190723173751_test.ts

--knexfile рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп --cwd src/db рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ cwd рд╕реЗ рдЕрдзрд┐рдХ knexfile ред

рдореИрдВрдиреЗ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА, рдЬрдм рдореИрдВрдиреЗ рдЙрд╕ рдкреАрдЖрд░ рдХреЛ рд╕рд╣реА рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рджрд┐рдпрд╛, рддреЛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдЧрд▓рдд рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ

рдореБрдЭреЗ рднреА рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рдереА
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдХрд▓реНрдк --knexfile рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ knexfile.ts . рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рджрд┐рд╢рд╛-рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ --cwd рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП knexfile.ts

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: "knex migrate:make --cwd src"
(рдпрд╣ рдмрд░рд╛рдмрд░ рд╣реИ: "cd src knex migrate:make" )

рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА knex migrate:make --knexfile knexfile.ts -x ts new_script
рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

'knex' рд╕реЗ рдЖрдпрд╛рдд knex;
^^^^
рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рддреНрд░реБрдЯрд┐: рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛

cwd . рдЬреЛрдбрд╝рддреЗ рд╕рдордп

рдЖрдВрддрд░рд┐рдХ/рдкреНрд░рдХреНрд░рд┐рдпрд╛/main_thread_only.js:29
рдмрд╛рдЗрдВрдбрд┐рдВрдЧ.рдЪрджрд┐рд░ (рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛);

рдореЗрд░рд╛ knexfile.ts рдиреАрдЪреЗ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ

import knex from 'knex';
export const database: knex.Config = {
  client: 'postgresql',
  connection: process.env.databaseURL,
  migrations: {
    extension: 'ts',
    directory: './ds/migrations',
  },
  seeds: {
    directory: './ds/seed',
  },
};

рдХреЛрдИ рд╕реБрд░рд╛рдЧ?

рд╕рд╛рдереА googlers рдХреЗ рд▓рд┐рдП, рдкреВрд░реНрдг рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЛрдб рдореЗрдВ рдирд╡реАрдирддрдо knex 0.19 рдХреЗ рд╕рд╛рде рдКрдкрд░/рдиреАрдЪреЗ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореЗрд░реЗ рдкрд╛рд╕ "рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЯреЛрдХрди рдирд┐рд░реНрдпрд╛рдд" рддреНрд░реБрдЯрд┐ рдереАред

рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХрд╛рд░реНрдпрд╢реАрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ tsconfig.json рдФрд░ .babelrc , рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд┐рдпрд╛ рдерд╛ред

рдЬрдм рдореИрдВрдиреЗ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ knexfile.ts рдХреЛ рдПрдХ рдХреНрд▓реАрди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛, рддреЛ рдЗрд╕рдиреЗ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ тЬЕ ред

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВред рддреЛ рдЬреИрд╕рд╛ рдХрд┐ @mikl рдиреЗ рдХрд╣рд╛, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдиреЛрдб рджреБрднрд╛рд╖рд┐рдпрд╛ рдкрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдЖрдЬ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рдЬрдм рдореИрдВ рдПрдХ рдирдпрд╛ рдкреНрд░рд╡рд╛рд╕ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдореИрдВрдиреЗ ts-node (https://npmjs.com/package/ts-node) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ knex рдЪрд▓рд╛рдХрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИред

рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЕрдкрдиреА package.json рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдЬреЛрдбрд╝реЗрдВ :)

"migrate:make": "ts-node ./node_modules/.bin/knex migrate:make --knexfile <PATH_TO_YOUR_KNEXFILE>"

рдЗрд╕реЗ migrate:latest , seed:run рдЖрджрд┐ рдореЗрдВ рджреЛрд╣рд░рд╛рдПрдВ ... :)
рдлрд┐рд░ рдмрд╕ рдЕрдкрдиреА рдирдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ!

рд╕рдорд╛рдзрд╛рди

рдХреЗ рдмрдЬрд╛рдп --knexfile рдХрд╛ рдЙрдкрдпреЛрдЧ --cwd

-    "migrate-make": "knex migrate:make --knexfile ./src/db/knexfile.ts",
+    "migrate-make": "knex migrate:make --cwd src/db",

рд╕рдорд╛рдзрд╛рди

рдХреЗ рдмрдЬрд╛рдп --knexfile рдХрд╛ рдЙрдкрдпреЛрдЧ --cwd

-    "migrate-make": "knex migrate:make --knexfile ./src/db/knexfile.ts",
+    "migrate-make": "knex migrate:make --cwd src/db",

рдзрдиреНрдпрд╡рд╛рдж !! рдЗрд╕рд╕реЗ рдореБрдЭреЗ рдмрд╣реБрдд рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИред

рдпрд╣ рдмрдВрдж рдХреНрдпреЛрдВ рд╣реИ? knexfile.ts рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕ рдзрд╛рдЧреЗ рд╕реЗ рдЬреЛ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдХреЛрд╢рд┐рд╢ рдХреА ... (рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг + рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.6.4)

рдпрд╣ рдмрдВрдж рдХреНрдпреЛрдВ рд╣реИ? knexfile.ts рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕ рдзрд╛рдЧреЗ рд╕реЗ рдЬреЛ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдХреЛрд╢рд┐рд╢ рдХреА ... (рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг + рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.6.4)

рдирдпрд╛ рдЕрдВрдХ рдЦреЛрд▓реЗрдВ рдФрд░ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬрд╣рд╛рдВ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИ)ред рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ @brunolm рдиреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдв рд▓рд┐рдпрд╛ред

рдпрд╣ рдЕрднреА рднреА --cwd рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ:

knexfile.ts:6
export default {
^^^^^^

SyntaxError: Unexpected token export

рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдХреЛрдИ рдирдпрд╛ рдореБрджреНрджрд╛ рдирд╣реАрдВ рдЙрдард╛рдКрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдбреЙрдХреНрд╕ рдореЗрдВ рдПрдХ рдиреНрдпреВрдирддрдо рдкреВрд░реНрдг рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛ ... Godsend
Objectin.js рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрджрд╛рд╣рд░рдг рдиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ knex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЬрд╣рдордд рдирд╣реАрдВ рдЙрдард╛рдИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереА ...

рдЕрдЪреНрдЫрд╛ ... рдореИрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ :

  • ts . рдореЗрдВ рдореЗрд░реЗ рд╕рднреА рд╕реНрд░реЛрдд рдХреЛрдб
  • рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдореЗрдВ knexfile.ts
  • рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрд╢рди (рдХреЛрдбрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп createTable рд╕реНрд╡рдд: рдкреВрд░реНрдг рдПрдкреАрдЖрдИ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП)
  • CLI (knex рдорд╛рдЗрдЧреНрд░реЗрдЯ) рдореЗрдВ рдпрд╣ рд╕рдм рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдФрд░ рдореЗрд░реЗ app.ts рдХреЗ рдЕрдВрджрд░ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рд╕рд░реНрд╡рд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдСрдЯреЛ рдорд╛рдЗрдЧреНрд░реЗрдЯ)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдЦрд┐рд░реА рдмрд┐рдВрджреБ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рджрд░реНрдж рдерд╛ ...

рдпрд╣ рд╕рдм рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рдерд╛:

  • tsconfig рд╕реЗрдЯ рдореЗрдВ allowJs=true + Declaration=false (рдЗрд╕рдХреЗ рдмрд┐рдирд╛ knex .d.ts рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ ...)
  • knexfile.ts : рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рдмрдЬрд╛рдп export = рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд▓рдЧрддрд╛ рд╣реИ ... рддреЛ рд╣рд╛рдБ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ ts рдлрд╝рд╛рдЗрд▓ рд╣реИ рд▓реЗрдХрд┐рди рдореЗрд░реЗ app.ts рдореЗрдВ рдореИрдВ рдЗрд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА ..
  • app.ts : рдХреЗрд╡рд▓ .js рд╕рдВрдХрд▓рд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рдХрд╛рдо рдХрд┐рдпрд╛: knex.migrate.latest({ loadExtensions: ['.js'], });
  • package.json : рд╕рд╛рде рд╣реА, рдХреЗрд╡рд▓ js рд╕рдВрдХрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓реЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ (рдореЗрд░реЗ /dist рдХреЗ рдЕрдВрджрд░): "db:migrate": "knex migrate:latest --cwd ./dist/config --env development --knexfile knexfile.js"

рдФрд░ рдореИрдВ рдХреБрдЫ рднреВрд▓ рдЧрдпрд╛, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ ..

рдЕрдм рдореИрдВ рдХрд╛рдлреА рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣реИрдХреА рд▓рдЧрддрд╛ рд╣реИ

@ ctiaffay-conserto рдЖрдк рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ ( knexfile рдХреЛ cwd рдмрджрд▓реЗрдВ)
https://github.com/brunolm/knex16bug/tree/knex16

рд╕рдорд╛рдзрд╛рди

рдХреЗ рдмрдЬрд╛рдп --knexfile рдХрд╛ рдЙрдкрдпреЛрдЧ --cwd

-    "migrate-make": "knex migrate:make --knexfile ./src/db/knexfile.ts",
+    "migrate-make": "knex migrate:make --cwd src/db",

рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди... рдХреНрдпреЛрдВ? рдпрд╣ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рдХреНрдпреЛрдВрдХрд┐ --knexfile рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@ShGKme рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИрдВ: https://github.com/knex/knex/pull/3005

рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рдХреНрдпреЛрдВрдХрд┐ cwd рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ,

рдореИрдВрдиреЗ рджреЛрдкрд╣рд░ рдХреЛ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдореЗрдВ рдмрд┐рддрд╛рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдПрдХ рдХрд░реАрдмреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рдерд╛ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ @brunolm рдХрд╛ рдЖрдХрд▓рди рд╕рд╣реА рд╣реИ: Liftoff#launch(..) рд╡рд┐рдзрд┐ рдХреЛ рдЧрд▓рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЖрдк рд╡рд┐рд╡рд░рдг #3005 . рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ

рдореЛрдЯреЗ рддреМрд░ рдкрд░, Liftoff рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ:

// If the configPath was specified, then use it.  Otherwise, try to infer it.
const configPath = opts.configPath || inferConfigPath(opts);

function inferConfigPath(opts) {
  // configName represents the expected name of the config file, minus its extension.
  // For example:  "knexfile"
  // If no configName was specified, then attempt to infer it from the name instead.
  // In our case, since `name === "knex"`, this will result in `configName = "knexfile"`
  const configName = opts.configName || (opts.name + "file");

  return findPathFor(configName, {
    withPossibleExtensions: [".js", ".ts"],
    inDirectory: opts.cwd,
  });
}

рдЪреВрдВрдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ Liftoff#launch(..) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ, configPath рдХрд╛ рдорд╛рди _always_ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдирддреАрдЬрддрди, Liftoff рдЙрдкрдпреБрдХреНрдд preload рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ: ts-node/register рд▓реЛрдб рд╣реЛрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣реЗрдЧрд╛)

@briandamaged рдХреНрдпрд╛ рдЖрдк рдПрдХ рдлрд┐рдХреНрд╕ рдкреАрдЖрд░ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдореМрдЬреВрджрд╛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдирд╣реАрдВ

@kibertoad + @brunolm : рдореИрдВ рдЖрдЬ рдпрд╛ рдХрд▓ рдмрд╛рдж рдореЗрдВ рдХреБрдЫ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдЕрднреА рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рдмрдбрд╝реА рддрд╕реНрд╡реАрд░ рдХреЛ рд╕рдордЭреВрдВред рдореИрдВ рдЬреЛ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрдиреЗрдХреНрд╕ рд╕реАрдПрд▓рдЖрдИ рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Liftoff рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╣реИред

@briandamaged рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рддрдХ рдХреНрд▓реА рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рдЬрд╛рди рд╕рдХреЗрдВ рдХрд┐ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рддрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЙрддрдирд╛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд░рд┐рдлреИрдХреНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

@brunolm @ShGKme @mmiszy @ilkka рдпрд╣ @briandamaged рдХреЗ рдЕрджреНрднреБрдд рдХрд╛рдо рдХреЗ рд▓рд┐рдП 0.20.9 рдореЗрдВ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЖрдкрдХреЗ рд▓рд┐рдП рдорджрджрдЧрд╛рд░ рдереЗред

@kibertoad рд╕рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж

@kibertoad рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж ! рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЕрднреА 100% рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ!

api_1    | > knex migrate:make --knexfile ./src/db/knexfile.ts "test"
api_1    |
api_1    | Requiring external module ts-node/register
api_1    | Working directory changed to /usr/src/app/src/db
api_1    | Created Migration: /usr/src/db/migrations/20200210194631_test.ts

@brunolm Haha, @briandamaged рдЕрд╕рд▓реА рд╣реАрд░реЛ рд╣реИред рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рддреНрд░реБрдЯрд┐ NodeJS 14.0.0, рдХрдорд╛рдВрдб knex migrate:make test рдФрд░ рдирд┐рдореНрди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдорд┐рд▓рддреА рд╣реИ:

// knexfile.ts

export const config = {

  development: {
    client: "postgres",
    connection: {
      filename: "./dev.sqlite3"
    }
  },

  staging: {
    client: "postgresql",
    connection: {
      database: "my_db",
      user: "username",
      password: "password"
    },
    pool: {
      min: 2,
      max: 10
    },
    migrations: {
      tableName: "knex_migrations"
    }
  },

  production: {
    client: "postgresql",
    connection: {
      database: "my_db",
      user: "username",
      password: "password"
    },
    pool: {
      min: 2,
      max: 10
    },
    migrations: {
      tableName: "knex_migrations"
    }
  }
};

рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

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 @babel/register
(node:6468) UnhandledPromiseRejectionWarning: C:\Users\Flori\WebstormProjects\OragesAuthentication-Backend\knexfile.ts:3
export const config = {
^^^^^^

SyntaxError: Unexpected token 'export'
    at wrapSafe (internal/modules/cjs/loader.js:1101:16)
    at Module._compile (internal/modules/cjs/loader.js:1149:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1205:10)
    at Module.load (internal/modules/cjs/loader.js:1034:32)
    at Function.Module._load (internal/modules/cjs/loader.js:923:14)
    at Module.require (internal/modules/cjs/loader.js:1074:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at openKnexfile (C:\Users\Flori\WebstormProjects\OragesAuthentication-Backend\node_modules\knex\bin\cli.js:26:16)

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ ts-рдиреЛрдб рдЬреЛрдбрд╝рдХрд░ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред

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

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

marianomerlo picture marianomerlo  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

aj0strow picture aj0strow  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

PaulOlteanu picture PaulOlteanu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mattgrande picture mattgrande  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ