KnexããŒãžã§ã³ïŒ 0.16.3
ããŒã¿ããŒã¹+ããŒãžã§ã³ïŒdocker postgres:10.4
OSïŒWindows 10ProãšDocker node:8.14.0
knex migrate:make --knexfile knexfile.ts
Unexpected token import
0.15.x
æ£åžžã«åäœããŸã
0.16ã§ã¯ããªããžããªã«TypeScriptã¿ã€ããå«ãŸããããã«ãªããŸããïŒïŒ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
ã¯ããã¬ãŒã³ããŒãã§typescriptã³ãŒããå®è¡ããããšããŠããã®ã§ã¯ãããŸãããïŒ 0.15ã§ããããã©ã®ããã«æ©èœããã®ãç§ã«ã¯ããããŸããã
knexfileã¯ã©ã®ããã«èŠããŸããïŒ ã€ã³ããŒãã¹ããŒãã¡ã³ãã¯ãããŸããïŒ
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ãJavaScriptã«ã³ã³ãã€ã«ããããã€ã³ããŒãæ§æãç解ããNode.jsããŒãžã§ã³ã䜿çšãããïŒhttps://nodejs.org/api/esm.htmlãåç
§ïŒããã¡ã€ã«ãå
ã«æ»ããŠå€ãrequire()
ã䜿çšããå¿
èŠããããŸãã
knex 0.15ã«ãã°ããã£ãããããã®knexfileãèªã¿åãããªãã£ããšæããŸãã åäœããªãã¯ãã®0.16ã®ãã°ã®ããã«ã¯èŠããŸããã
ãã®knexfileã決ããŠèªã¿åããªãããã«
knexfileã100ïŒ èªã¿åããŸããããŸããŸãªç§»è¡ãã©ã«ããŒãšæ¥ç¶ããŒã¿ã䜿çšããŠãè€æ°ã®ãããžã§ã¯ãã§äœ¿çšããŸãïŒé ã®ãŠã£ãºããããæ¬çªç°å¢ã§ã¯4ãšèããããŸãïŒã
ããŒãžã§ã³0.15
ã§ã¯ããã¡ã€ã«ãèªåçã«ã³ã³ãã€ã«ãããã ts-node
䜿çšããŠãã¡ã€ã«ãå®è¡ããŠããŸããã
ç§ã¯ã¡ããã©ããããã¹ãããŸãã...ããªãã¯æ£ããã§ããäž¡æ¹ã®ããŒãžã§ã³ã¯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.16ã§ã¯ãªã0.15ã§åäœããçç±ã調æ»ãããå Žåã«åããŠãå®å šãªäŸãèšå®ããŸããã
ãã©ã³ãïŒ 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
ãããæ©èœããå Žåã¯ã /api/src/db/migrations
test
ãšãã移è¡ã衚瀺ãããã¯ãã§ãã
ããã«ããã€ãã®ããã±ãŒãžïŒts-node ts-node-dev typescriptïŒãã€ã³ã¹ããŒã«ããåŸã0.15ãš0.16ã®äž¡æ¹ãããã§ã¯åé¡ãªãæ©èœããŠããããã§ã...ãããå®éãããŒã0.16ã§ã®Dockerã»ããã¢ããã¯å€±æããŠãããçç±ãããããŸãã
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ã§ã¯ããã¯ã§åŒã³åºãããŸã
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ãã€ã³ã¹ããŒã«ãããšæ©èœããŸãïŒGitãªããžããªã§æäŸããäŸã®ããã«ïŒã
ãããã°ãè¡ã£ãŠãããèŠã€ããŸãããã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ããã£ããPRããããã§ãã¯ããŠããããŸããïŒ
https://github.com/tgriesser/knex/pull/3005
ããã¯ããããã©ããã®ãã°ãªã®ã§ãåéããŸã... osxã§ãããåçŸããæ¹æ³ãããããªããŠãã
åèãŸã§ã«ãç§ã¯brunolmã®äŸãå®è¡ããŸããããknex 0.15.2ã¯æ©èœããŸãããknex0.16.3ã¯æ©èœããŸããã
@scorbinã¯ãã
ããã§ãåãåé¡ããããŸãïŒTypeScriptã®ç§»è¡+ 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
ãæçµçã«åŒã³åºããããšãã«å£ããŸãïŒTypeScriptã§ãã移è¡ã¹ã¯ãªããã§#require
ãåŒã³åºãããïŒã
ã圹ã«ç«ãŠãã°...
次ã®å°ããªå€æŽã§ãç¶æ³ã¯æ£åžžã«æ»ã£ãããã«èŠããŸãã
function listAllAndCompleted(config, trxOrKnex) {
return _bluebird.default.all([listAll(config.migrationSource, config.loadExtensions), listCompleted(config.tableName, config.schemaName, trxOrKnex)]);
}
ãã ãã移è¡è ã®èšèšã«100ïŒ æºæ ããŠããããšã¯æ€èšŒããŠããŸãããæ€èšŒããå¿ èŠããããããç¥èãè±å¯ã§ãã :)
KnexããŒãžã§ã³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)
ãã®è§£æ±ºçã¯æšå¥šãããŠããŸãããã knexfile.ts
ãã¡ã€ã«ã®å
é ã«ts-node/register
ãè¿œå ããã ãã§ä¿®æ£ã§ããŸããã
require('ts-node/register');
//
0.16.4ã§ä¿®æ£ããå¿ èŠããããŸã-next2
0.16.4-next2ãè©ŠããŠã¿ãŸããã åããšã©ãŒãèŠãŠæ²ãã
@brunolm 0.16.4-next2ããŸã ããã«å€±æããããšã確èªã§ããŸããïŒ
@pvoisin 0.16.4-next2ã§åäœããŸããïŒ
@ kibertoad0.16.4-next2ã§ããŸã£ããåããšã©ãŒãçºçããŸãã
OKãããã«å¯Ÿããé©åãªä¿®æ£ã¯ã migrationïŒmakeããknexfileããšã§ãïŒå®éã«ã¯å¿ èŠãªãããïŒã
ç§ã¯æ»ãã 銬ãåããããããŸãããã @ kibertoadã¯ãããä¿®æ£ããå¿ èŠããããšèšããŸããã ãã®ä¿®æ£ã®èšŒæ ã¯ã©ãã«ãããŸãããïŒ ååž°ãã¹ãã¯äœæãããŠããŸããïŒ ä¿®æ£ããå¿ èŠããããšèšã£ãŠåé¡ãéããåãåé¡ãååšããããšã¯ããªãªãŒã¹ãããã·ã¥ããæ¹æ³ã§ã¯ãããŸããã
@juliancolemanãããåçŸããã®ã¯å°é£ã§ããã ããããå®éã«ã¯ãä¿®æ£ã«ååž°ãã¹ããè¿œå ãããŠããã¯ãã§ãïŒå®éã«ãã£ããã©ããã確èªããããã¹ãã¯ci envã§å€±æããŸããã§ããïŒã
æ¯ãè¿ã£ãŠã¿ããšãç§ãå«ããŠèª°ãåçŸããããã®æé ãè¿œå ããŠããªãããšãããã£ãã®ã§ãåçŸããã®ãé£ããã®ã¯å®éã«ã¯å ¬å¹³ã§ãã
[email protected]
ãäŸåé¢ä¿ã«è¿œå ããŸãknexfile.ts
äœæããŸãModel.knex
knexæ§æãã€ã³ã¹ã¿ã³ã¹åããŸãpackage.json
è¿œå ããŸã"knex": "knex --knexfile ./path/to/Knexfile.ts"
yarn knex migrate:latest
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
ç§ã®PRã¯ãããä¿®æ£ããŸãã誰ããããã調ã¹ãããšãã§ããã°ãç§ã¯ãããå®å šã«ãã¹ãããããã®ç¥èãªã©ãæã£ãŠããŸãã...
ç§ã¯æ»ãã 銬ãåããããããŸãããã @ kibertoadã¯ãããä¿®æ£ããå¿ èŠããããšèšããŸããã ãã®ä¿®æ£ã®èšŒæ ã¯ã©ãã«ãããŸãããïŒ ååž°ãã¹ãã¯äœæãããŠããŸããïŒ ä¿®æ£ããå¿ èŠããããšèšã£ãŠåé¡ãéããåãåé¡ãååšããããšã¯ããªãªãŒã¹ãããã·ã¥ããæ¹æ³ã§ã¯ãããŸããã
ç³ãèš³ãããŸããããããã¢ã ã¹ãã«ãã ã§ã¯æ·±å€ã§ãããç§ã®èšèã®éžæã¯æ¬åœã«æé«ã§ã¯ãããŸããã§ããã TBHã®ããã«ãã0.16.4-next2ã§åé¡ã解決ãããã©ããæããŠãã ããããšããã¯ãã ã£ãã®ã§ããããããããªããç§ã¯éåžžã«é©ããŸããã ãã®ä¿®æ£ãå®éã«äœãä¿®æ£ããããæ£ç¢ºã«æ€èšŒããåäœãã¹ããæžãããŠããŸããããä»ã§ã¯äœã誀解ããŠããªããšç¢ºä¿¡ããŠããŸãããã®åé¡ã¯ãŸãã«ç§ãæã£ãŠãããã®ã§ããã以åã¯ã©ã®ããã«æ©èœãããã瀺ãå¯äžã®æ¹æ³ã§ãã knexfileãå®å šã«ãã€ãã¹ããããšã§ãã ããã¯ãè¿ãå°æ¥ã«æ¹åããäºå®ã®ã·ã¹ãã åäœã§ãããäºåã«ããã€ãã®åææ¡ä»¶ãæºãããŠããå¿ èŠããããŸãã ãè¿·æãããããç³ãèš³ããããŸããã å°ãæéããã ããã ãããŸã§ã®éãts-nodeã䜿çšããããšã¯é©åãªè§£æ±ºçã®ããã«èŠããŸã-移è¡ãã¡ã€ã«ã®å Žæã«é¢ããä¿¡é Œã§ããå¯äžã®æ å ±æºãšããŠknexfileã䜿çšã§ãããããknexfileã«äŸåããªããããå®éã«ã¯ãããã³ã°ãå°ãªããšäž»åŒµãã人ããããããããŸããã
@kibertoad
以åã¯ã©ã®ããã«æ©èœããŠããããç¥ãå¯äžã®æ¹æ³ã¯ãknexfileãå®å šã«ãã€ãã¹ããããšã§ãã
ããã¯çå®ã§ã¯ãããŸãããç§ã®ä»¥åã®ã³ã¡ã³ããåç §ããŠãã ããã ãã¹ãŠã0.15ã§åäœããŸãã
@brunolmãããã
@kibertoadç§ã¯çŸåšts-nodeã䜿çšããŠããŸãã ãªããããæè¡ã¬ãã«ã§çºçããã®ãããããŸãã
ãœãŒã¹ã確èªããæéãããã°ãããããŸãããç§ã¯Knexãäœå¹Žã䜿çšããŠããããã®æç¹ã§æ©èœãããšä¿¡ããŠããŸãã ç§ã¯0.15ã«æ»ãããã¹ãŠãæ©èœããŸã...ãã¡ãããããé€ã
@brunolmãããã
ãããè¡ããšãknexfile.tsãã¡ã€ã«ãç¡èŠããã«ãknex 0.15
ã§å®å
šã«æ©èœããŠããããšãããããŸãã
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ã®äŸã確èªããŸããããmacosã§å€±æããåçŸã±ãŒã¹ãäœæããããšã¯ã§ããŸããã§ããããDockerã®ã»ããã¢ãããåçŸããããšã¯ã§ããŸããã
ãããã£ãŠãçŸåšã®åé¡ã¯ãknex CIã®ãã¹ãã±ãŒã¹ãäœæã§ããããšã§ãããããå®éã«ã¯0.16ã§å€±æãã0.15ã§åäœããŸãã CIã¯å€ãubuntuãå®è¡ããŠããã®ã§ããããããã®ãã¹ãã±ãŒã¹ã¯åé¡ãªãæ©èœããŸãïŒå€±æããããšãæå³ããŸãïŒã
ç§ã®åŽã®ã¯ã€ãã¯ã¢ããããŒãã ããã圹ç«ã€ãã©ããã¯ããããŸããããç§ã®åé¡ã¯ããããžã§ã¯ãã§è€æ°ã®tsconfig.json
ãã¡ã€ã«ã䜿çšããŠããŠã knex
ãããã©ã«ãã䜿çšããŠããããšã§ããã knex
ã䜿çšããŠts-node
knex
ãçŽæ¥èµ·åããŠãã®æ©èœãç¡å¹ã«ãããšããã®ãšã©ãŒãåé¿ã§ããŸããã
ç§ã®æŽæ°ããã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
ãµãŒãã¹ãæäŸããããããã«ãããå¿
èŠããªãããã1ã€ã ã䜿çšããŸãã
{
"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ã䜿çšããŠããŸãã
ããããç§ã¯ãã®åé¡ã解決ããPRãäœæããŸãããknexããã©ãŒã¯ããŠãããã®å€æŽãé©çšã§ããŸãïŒ https ïŒ
æ®å¿µãªãããããã¯ããã»ã©åçŽã§ã¯ãããŸããã ä»é±ã¯ããŠãŒã¹ã±ãŒã¹ãå£ããªãä¿®æ£ãèãåºãããã«ããŸãã
å€åããã¯èª°ããå©ããã§ãããã tsconfig.json "module"ïŒ "es2015"ã "module"ïŒ "commonjs"ã«å€æŽããããšãã«ä¿®æ£ãããŸãã
package.jsonã®ã³ãã³ã=> "migrate"ïŒ "ts-node -P ./tsconfig.json node_modules / .bin / knex merge ïŒlatest --knexfileknexfile.ts"ã
å€åããã¯èª°ããå©ããã§ãããã tsconfig.json "module"ïŒ "es2015"ã "module"ïŒ "commonjs"ã«å€æŽããããšãã«ä¿®æ£ãããŸãã
package.jsonã®ã³ãã³ã=> "migrate"ïŒ "ts-node -P ./tsconfig.json node_modules / .bin / knex merge ïŒlatest --knexfileknexfile.ts"ã
æé©ãªãœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸããããæ£åžžã«æ©èœããŸãã
@Areshetcov @Meldironç§ã䜿çšããŠããcommonjs
ããªããèŠãããšãã§ããããã«ãã¢ãžã¥ãŒã«äžã§ã æ¬åœã«å¿
èŠãªã®ã¯ãããæ·±ããµããŒãã§ãããå¿
ããã倧éã®ãŠãŒã¶ãŒæ§æãåŒãèµ·ããããã§ã¯ãªããšæããŸãã ãããæ¬åœã«éžæè¢ã§ã¯ãªãå Žåãé€ããŠ
ãã®åé¡ãçŸåšé
ããŠãããªãªãŒã¹ãšã©ã®ããã«é¢é£ããŠããããèãããšãããã¯çŸåš0.17.6
ã§ããïŒ
@juliancoleman ts-nodeã䜿çšããã®ãäŸç¶ãšããŠæåã®è§£æ±ºçã§ããããã¯ãknexãknexfile.jsãéãããšããJavascript圢åŒã§ãªãå Žåã¯ççºããããã§ãã ãã ããããå€ãã®å ŽåïŒç§»è¡ã®çæãããã©ã«ãã®å Žæã§ã®knexfileã®è§£æ±ºãªã©ïŒã§TSæ¡åŒµæ©èœãããé©åã«åŠçããããã®æ¹åããããŸããã ããªãã¯ã©ã®ç¹å®ã®åé¡ãæ±ããŠããŸããïŒ
ãããã«ããããã®åé¡ã«ã€ããŠç§ã«æãåºãããŠãããŠããããšãã ç§ã¯é±æ«ã«ããã§å¥ã®ã¹ã€ã³ã°ãããããšããŸããããŸãããã°ãå°ãªããšãéå»ã«ãããæ©èœããçç±ãç解ããããšãã§ããŸãïŒD
ãã®PRãäœæãããšããTypeScriptã ãã§ãªããbabelããã®ä»ã®ãã®ã§ãæ©èœããããšã«ãªã£ãŠããããšã«æ°ä»ããŸãããæ£ããèŠããŠããã°ãããããã¹ãŠãåŠçããããã±ãŒãžããããŸãã
ç§ã®PRã«ã¯ããã€ãã®åœ¹ç«ã€ãã³ãããããããããŸããhttps://github.com/tgriesser/knex/pull/3005/files
ç§ãæ±ããŠããåé¡ã¯ã npm run knex migrate:latest
ãå®è¡ãããšã unexpected token '{'
ãååŸããããšã§ãã ç§ã¯ãã®APIã«ã®ã¿ts-nodeã䜿çšããŸãã ç§ã¯ãããã©ã®ãã³ãã©ãŒã«ãéãããTSãã³ã³ãã€ã«ããŸããã ããã_è¡ã_ããšã¯ããããè¯ãããšã§ã¯ãããŸããããããã¯ç§ãä»ããŠããããšã§ãã ãã ããTypescriptã¯ãµãŒãããŒãã£ã®typescriptãã¡ã€ã«ãã€ã³ããŒãã§ããªãããšãèªèããŠããŸãã ãããã¯æåã«æ§ç¯ããå¿
èŠããããŸãã Knexã ãã§ãªããä»ã®å Žæã§ããããçµéšããŸãã
ãã ããTypescriptã¯ãµãŒãããŒãã£ã®typescriptãã¡ã€ã«ãã€ã³ããŒãã§ããªãããšãèªèããŠããŸãã
ts-node
ãrequire()
ã¿ã€ãã¹ã¯ãªãããã¡ã€ã«ãããŒãã§ããªããšããããšã§ããïŒ Migratorã¯require()
ã䜿çšããŠããããã®ç§»è¡ãã¡ã€ã«ãåçã«ããŒãããŸã...
ä»ã®èª°ããç§ãšåãåé¡ãæ±ããŠããå Žåã¯ãããã§ãã£ã€ã ã鳎ãããŠãã ããïŒç§ã¯[email protected]
ãæã£ãŠããŠãæ¬è³ªçã«* knex --knexfile src/knexfile.ts
ãå®è¡ããããšããŸããããæããã«knexfileãJSãšããŠèªã¿åãããšãããã倱æããŸããã knex --cwd src
ã¯ãæå³ãããšããã«æ©èœããŸãã
*ïŒå®éã®ã³ãã³ãã©ã€ã³ã¯node -r dotenv/config node_modules/knex/bin/cli [...]
ããããã¯ããããåé¡ã§ã¯ãããŸããã
@ilkkaãã®æèã§ãæå³ãããšããã«æ©èœããããšã¯ã©ãããæå³ããæ確ã«ã§ããŸããïŒ ts-node
ã§ã¯ãªãnode
ãå®è¡ããŠããããšãèãããšãKnexãknexfile.tsã®è§£æã«å€±æããŠããã®ã§ã¯ãªããããŒãã§ãã ãã¡ã€ã«åã®è§£å床ãæ£ããæ©èœããŠããªãããšãæå³ããªãéãã
knex --cwd src
å®éã«åé¡ã®knexfileãéãããšãã§ãããã®æ§æå€æŽã«æ£ããåå¿ããŸããïŒ
ãããäžæã§ããããªããã npmã¹ã¯ãªããããknexãå®è¡ãããšãã«--cwd
ãã©ã¡ãŒã¿ãŒã䜿çšãããšããå€éšã¢ãžã¥ãŒã«ts-node / registerãå¿
èŠã§ãããšå ±åãããknexfileãèªã¿åãããŠæ©èœããŸãã npmã¹ã¯ãªããã®å€ã§npx knex
ãšããŠå®è¡ããŠããåäœã¯åãã§ãã
@ilkkaèå³æ·±ãã knexãts-nodeãåç¬ã§ããŒãããããšããŠãããšã¯æããªãã®ã§ã䜿çšããŠããã¹ã¿ãã¯ããå¥ã®ãã®ã§ããå¿ èŠããããŸãã ãããæ£ç¢ºã«äœã§ããããç¹å®ã§ããã°ããããšã®äºææ§ãå£ãããã«ç§ãã¡ãäœãããããç解ããããšãå¯èœã§ãããã
ã¢ãžã¥ãŒã«ãèŠæ±ããããšã«é¢ããã¡ãã»ãŒãžã¯ãLiftoffã€ãã³ãïŒãrequireããLiftoffã§å¥ã®ååã«å€æŽãããåããïŒã«ãã£ãŠåŒãèµ·ããããcli.js
ã«ãã£ãŠcoffee-script
ãããªãã©ã³ã¹ãã€ã©ãŒãèªåçã«ããŒãããŠç»é²ãããæ¹æ³ã«ã€ããŠã®ã¡ã¢ããããŸãã ã ãã...å€åãã®ç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ã§ç§ã®ãã¹ã«ts-node
ãæã£ãŠããã ãã§ãããæ©èœãããã®ã«ååã§ããïŒ ããã¯ããªãè€éãªã·ã¹ãã ã§ãã
ãšã«ãããnpmã¹ã¯ãªããã§node
ãts-node
ã«å€æŽããã ãã§ããããæ©èœããããšã«æ°ã¥ããŸããã
調ã¹ãŠãããŠããããšãã ãããã®å Žåã«ãªãããªããåäœãããããšãã§ãããã©ããã確èªããŸãïŒD
ããããããã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",
ïŒts-nodeããŒãžã§ã³ã¯ïŒ8.3.0ïŒ
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
䜿çšãããšæ©èœããŸãã
knexfile
cwd
ã䜿çšããå¿
èŠãããããšã¯ããã¥ã¡ã³ãã«æ確ã§ã¯ãããŸããã
é¢æ°ã®ã·ã°ããã£ããã§ãã¯ããŸããã§ãããæ£ãããã©ã¡ãŒã¿ãæž¡ãããã«å€æŽããPRãäœæãããšãã«ããŸã ééã£ããã©ã¡ãŒã¿ãæž¡ããŠããå¯èœæ§ããããŸãã
ããã«ã¡ã¯ãã¿ããª
ç§ããã®ãšã©ãŒããããŸãã
åé¡ã¯ããªãã·ã§ã³--knexfile
ãknexfile.tsã®ãã£ã¬ã¯ããªã誀ã£ãŠèšå®ããŠããããšã ãšæããŸãã
ã ããç§ã¯knexfile.ts
ãã£ã¬ã¯ããªã«--cwd
ã§æ瀺çãªæ¹åãèšå®ããŸãã
ããã¯ç§ã®ããã«åããŸãïŒ "knex migrate:make --cwd src"
ïŒããã¯æ¬¡ã®ããã«ãªããŸãïŒ "cd src knex migrate:make"
ïŒ
knex migrate:make --knexfile knexfile.ts -x ts new_script
ãè©ŠããŸãã
次ã®ãšã©ãŒãçºçããŸã
'knex'ããknexãã€ã³ããŒãããŸãã
^^^^
SyntaxErrorïŒäºæããªãèå¥å
cwdãè¿œå ãããšã
internal / process / main_thread_only.jsïŒ29
binding.chdirïŒãã£ã¬ã¯ããªïŒ;
ç§ã®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',
},
};
ã©ããªææããïŒ
仲éã®ã°ãŒã°ã«ã®å Žåããã«ã¿ã€ãã¹ã¯ãªããã¢ãŒãã§ææ°ã®knex 0.19ã䜿çšããŠäžäžã«ç§»è¡ããããšãããšããäºæããªãããŒã¯ã³ã®ãšã¯ã¹ããŒãããšã©ãŒãçºçããŸããã
äœæ¥ãã£ã¬ã¯ããªã«tsconfig.json
ãš.babelrc
ã®äž¡æ¹ãããããšãããããŸãããããã®ãã¡ã®1ã€ãå€æã劚害ããã®ã§ã¯ãªãããšæããŸãã
移è¡ãã©ã«ããšknexfile.ts
ãã¯ãªãŒã³ãªãã£ã¬ã¯ããªã«ç§»åãããšãåã³æ©èœããŸããâ
ã
ããã«ã¡ã¯ãã¿ããªã ãããã£ãŠã @ miklãèšã£ãããã«ãåé¡ã¯ãããŒãã€ã³ã¿ãŒããªã¿ãŒã§typescriptã³ãŒããå®è¡ããããšããŠããããšã§ãã ä»æ¥ãæ°ãã移è¡ãäœæããããšãããšãã«ããã®åé¡ãçºçããŸããã
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ã§äœæ¥ããŠãããšãã¯å®å šã«å£ããŠããããã®ã¹ã¬ããããã§ããéãã®ããšãè©ŠããŸãã...ïŒææ°ããŒãžã§ã³+ typescript 3.6.4ïŒ
ãªããããééãããŠããã®ã§ããïŒ knexfile.tsã§äœæ¥ããŠãããšãã¯å®å šã«å£ããŠããããã®ã¹ã¬ããããã§ããéãã®ããšãè©ŠããŸãã...ïŒææ°ããŒãžã§ã³+ typescript 3.6.4ïŒ
æ°ããåé¡ãéããè€è£œã³ãŒããæäŸããŸãïŒããšãã°ãåé¡ãçºçãããµã³ãã«ãããžã§ã¯ããžã®ãªã³ã¯ïŒã @brunolmã圌ã®åé¡ã«å¯Ÿãã圌ã®è§£æ±ºçãèŠã€ããã®ã§ãããã¯éããããŸããã
ããã¯ãŸã --cwd
å£ããŠããŸãïŒ
knexfile.ts:6
export default {
^^^^^^
SyntaxError: Unexpected token export
ã ããããããã©ã®ããã«æ©èœããã®ãããããããªãã®ã§ãç§ã¯æ°ããåé¡ãæèµ·ããŸããã ããã¥ã¡ã³ãå
ã®æå°éã®å®å
šãªã¿ã€ãã¹ã¯ãªããã®äŸã¯... godsend
Objectin.js typescriptã®äŸã§ã¯ãtypescriptã§knexã䜿çšããå¿
èŠããªãã£ããããåãåé¡ãçºçãããšæããŸã...
ããŠ...ç§ã欲ããã£ããã®ïŒ
ãã®æåŸã®ç¹ã¯ãã£ãšèŠçã ã£ããšæããŸã...
ããããã¹ãŠæ©èœãããããã«ç§ãããªããã°ãªããªãã£ãããšïŒ
export =
ã䜿çšããããšãå¿
é ã®ããã§ã...ããã§ããç§ã¯tsãã¡ã€ã«ãæã£ãŠããŸãããç§ã®app.tsã§ãããã€ã³ããŒãã§ããããããèŠæ±ããªããã°ãªããŸããã§ãããknex.migrate.latest({
loadExtensions: ['.js'],
});
"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 ïŒ
ãããã誰ãããã«å¯ŸåŠããããããŸããã 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æ¢åã®ãã¹ããå£ããªãä¿®æ£prãæäŸã§ããŸããïŒ
@kibertoad + @brunolm ïŒä»æ¥ãææ¥é
ãã«äœããLiftoff
ã©ã€ãã©ãªã«ãã£ãŠãã§ã«æäŸãããŠããæ©èœã®äžéšãè€è£œããŠããããã§ãã
@briandamagedå¯èœæ§ããããŸãã cliãã¹ãã«åæ ŒãããŠãŒã¶ãŒã«é倧ãªå€æŽãå°å ¥ãããŠããªãããšããããéããå¿ èŠã«å¿ããŠèªç±ã«ãªãã¡ã¯ã¿ãªã³ã°ããŠãã ããã
@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ããã @ 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-nodeãè¿œå ããããšã§ä¿®æ£ãããŸããã ãäžäŸ¿ãããããŠãã¿ãŸããã
æãåèã«ãªãã³ã¡ã³ã
KnexããŒãžã§ã³
0.16.3
ã§ãåãåé¡ã«çŽé¢ããŠããŸããããã®è§£æ±ºçã¯æšå¥šãããŠããŸãããã
knexfile.ts
ãã¡ã€ã«ã®å é ã«ts-node/register
ãè¿œå ããã ãã§ä¿®æ£ã§ããŸããã