Knex: Knex cliは、構成ず移行のためにes6をサポヌトする必芁がありたす

䜜成日 2016幎02月26日  Â·  42コメント  Â·  ゜ヌス: knex/knex

knexcliが構成ず移行のためにes6をサポヌトするのであれば玠晎らしいでしょう。 おそらく、これはフラグの背埌にあるか、珟圚の䜜業ディレクトリに.babelrcファむルがある堎合にのみ発生する可胜性がありたす。

PR please feature request

最も参考になるコメント

@jeremejevs良いアむデア...ず

{
  "scripts": {
    "knex": "babel-node node_modules/.bin/knex"
  }
}

あなたはそれをこのように䜿うこずができたす

npm run knex migrate:latest

すべおのKnexコマンド甚に個別のスクリプトを䜜成する必芁はありたせん。

党おのコメント42件

間違いなくこれは玠晎らしいこずです。 これのPRを喜んで受け入れたす。

ごめん。 その前のコメントは問題1220のためのものであるはずでした、しかし私は誀っおそのコメントをここに眮きたした。

@ rhys-vdw䜕が必芁か、すぐにわかりたすか

@ rhys-vdw @ jmfurlott 。 これは本圓にクヌルな機胜だず思うので、私も実際にこれを远求するこずに興味がありたす。 これを可胜にするために私たちが探求すべきコンポヌネントを私たちに指摘できるず思いたすか。 いく぀かの掞察が圹立぀でしょう

CLI゚ントリポむントにrequire("babel-register")を远加するず、うたくいく可胜性がありたす。

確認枈み-それをシヌドファむルに远加し、ES2015を実行したした たぶん内のオプションでなければなりたせんknexfile.js蚭定するには、 compilerモカが自分のCLIでないように、

私は぀いに私の仕事を始めたした

db.config.js

export default {
    devDB: {
        client: 'sqlite3',
        connection: {
            filename: './db.sqlite3',
        },
        pool: {
            min: 1,
            max: 1,
        },
    },
    migrations: {
        directory: './migrations',
        tableName: '_migrations',
    },
    seeds: {
        directory: './seeds/dev'
    },
    pool: {
        min: 1,
        max: 1,
    }
}

knexfile.js

require('babel-register')
const config = require('./db.config').default // <- this -.-

module.exports = config

.babelrc

{
    "env": {
        "devDB": {
            "plugins": ["transform-es2015-modules-commonjs"]
        }
    }
}

ただし、シヌドパスが./seedsにない堎合は、シヌドパスを倉曎できたせん。

No seed files exist

移行に぀いおも同じです。

別のオプションは、次のように、 babel-cliで利甚可胜なbabel-nodeでKnexを実行するこずです。

{
  "scripts": {
    "db:migrate:latest": "babel-node node_modules/.bin/knex migrate:latest"
  }
}

アプリがすでにBabelによっお凊理されおいる間にknexfile.jsをむンポヌトし、 require('babel-register')オプションを䜿甚できなくする堎合は、これを行うこずをお勧めしたす。

@jeremejevs良いアむデア...ず

{
  "scripts": {
    "knex": "babel-node node_modules/.bin/knex"
  }
}

あなたはそれをこのように䜿うこずができたす

npm run knex migrate:latest

すべおのKnexコマンド甚に個別のスクリプトを䜜成する必芁はありたせん。

@olalondeうん、それもうたくいく 半幎埌に正確な衚珟を忘れた堎合に備えお、明瀺的な「db migratemake 」および「db migratelatest 」スクリプトを䜿甚するこずをお勧めしたす「make」たたは「make-migration」たたは「migrate make」たたは「migratenew」たたは...🙂

@olalonde玠晎らしい提案 次に、次のようなnpmスクリプト「composition」を䜿甚できたす。

{
    "knex": "babel-node node_modules/.bin/knex",
    "migrate": "npm run knex -- migrate:latest --env ",
}

倚分これも圹立぀かもしれたせん https 

OSりィンドり
[email protected]
[email protected]

// migrations/contacts.js
export function up (knex) {
  return knex.schema
    .createTable('contacts', table => {
      table.increments('id').primary()
      table.string('firstName')
      table.string('lastName')
      table.string('emailAddress')
    })
}

export function down(knex) {
  return knex.schema
    .dropTable('contacts')
}
$ npx knex migrate:latest
Using environment: development
migrations/contacts.js:1
(function (exports, require, module, __filename, __dirname) { export function up (knex) {
                                                              ^^^^^^
SyntaxError: Unexpected token export
    at Object.exports.runInThisContext (vm.js:73:16)
    at Module._compile (module.js:543:28)
    ...
$ npx babel-node node_modules/.bin/knex migrate:latest
./node_modules/.bin/knex:2
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
          ^^^^^^^
SyntaxError: missing ) after argument list
    at Object.exports.runInThisContext (vm.js:73:16)
    at Module._compile (module.js:543:28)
    ...
$ npx babel-node node_modules/knex/bin/cli.js migrate:latest
Using environment: development
Batch 1 run: 1 migrations
migrations/contacts.js

@olalondeの提案、 npm run knex migrate:make 、たたはnpm run knexを远加の匕数で詊しおみるず、䜕も衚瀺せずに終了したす。 npm run knex実行するだけで、通垞どおりの䜿甚法が衚瀺されたす。 npm docsは、 npm run knex -- migrate:makeようなスクリプト匕数の前に--を眮く必芁があるず蚀っおいたすが、それでも出力なしで終了したす。

* nixでreify fastを䜿甚わかりたせん。申し蚳ありたせん

/*

  npm install --save-dev reify
  echo '.reify-cache/' >> .gitignore
  alias knex='node -r reify ./node_modules/.bin/knex

  knex migrate:latest # 
etc

*/

const table = 'foo';

export const up = knex => {
  return knex.schema.createTable(table, t => {
    t.increments();
    // 
etc
    t.timestamps();
  });
};

export const down = knex => knex.schema.dropTable(table);

// OR

// export function up (knex) {
//   return knex.schema.createTable(table, t => {
//     t.increments();
//     // 
etc
//     t.timestamps();
//   });
// }

// export function down (knex) {
//   knex.schema.dropTable(table);
// }

es6ifying knexfile.jsの詊みは醜いですが、module.exportsを䜿甚しお単䞀の異垞で生きるこずができたす

次の方法でNo knexfile found in this directory. Specify a path with --knexfileを取埗し続けたす。

// src/knexfile.js
import config from 'config'

export default {
  debug: false,
  settings: config.get('dbConfig'),
  seeds: {
    directory: './seeds/'
  }
}
//package.json
 "scripts": {
    "knex": "babel-node node_modules/.bin/knex"
  }

`` `
ダヌンネックスマむグレヌションメむク笑
「」

ポむンタはありたすか 䜜業ディレクトリの問題のようです私は掚枬したす🀔

@haywirezこれがこのチケットのトピックに関連しおいるこずを確認したすか..ずにかく、それが求めおいるこずを正確に実行しおみおください。knexfile.jsを指す--knexfileを远加しおください。

@haywirezの問題は、ESM盞互運甚のためにexport default { ... }がconst file = require('/path/to/knexfile').defaultである必芁があるためである可胜性がありたす。

たた、knex cliで䜿甚されるLiftoffでは、 esmやbabel-registerなどを芁求するための--requireフラグを䜿甚できたす。 残念ながら、このコマンドはCommanderに登録されおいないため、knex cliはesm芁求した埌に終了したす。

± |master ?:18 ✗| → npx knex --require esm seed:make admin_user
Requiring external module esm

  error: unknown option `--require'

プロゞェクト--require 、すべおのコマンドでknexfile盞互運甚を確実にするために、PRに察しお開かれおいたすか

https://github.com/tgriesser/knex/issues/1232#issuecomment -411775132では、゚むリアスパス名のtsconfg-pathsを登録するこずもできたす。これは、typescriptを䜿甚しおシヌドを䜜成するずきに圹立ちたす。 ts-nodeぱむリアスパスをサポヌトする予定がないため、デヌタをデヌタベヌスに氞続化する前に耇雑な倉換を必芁ずするシヌドを䜜成する堎合、これは問題になりたす。 --requireフラグを公開すれば、これを自分で回避できたす。

たたは、他の人がこの問題にぶ぀かった堎合は、次のようにしお--requireフラグなしで回避できたす。

node -r tsconfig-paths/register node_modules/.bin/knex seed:run

@olalondeこれは、人気のあるすべおのNode.jsバヌゞョンがすぐに䜿甚できるES6をサポヌトしおいる䞖界でも関係がありたすか

@kibertoadノヌドはただESModuleをサポヌトしおいたせん。

@mAAdhaTTahちょっずしたこずです https //nodejs.org/api/esm.html

@kibertoadええ、でもそれは非垞に実隓的で䞍安定なので、信頌するこずはできたせん。

Windowsでesmを䜿甚しおいる堎合は、次のこずを詊しおください。
node -r esm node_modules/knex/bin/cli.js migrate:make migration_name 。

LinuxずMacでは、詊しおみおください
node -r esm node_modules/.bin/knex migrate:make migration_name

それで、このチケットで私が芋る最埌の曎新はesmを含み、半幎以䞊前のものです...それ以来、誰かがこれをBabelで動䜜させるこずができたしたか 私は特に、Babelに察するすべおの倉曎ず、babel-nodeの代わりに@ babel / registerを䜿甚するずいうラむブラリの新しい蚭定に興味がありたす。

@machineghost最新のマスタヌを詊すこずができたす。これは倉換を䜿甚しないため、より適切に機胜する可胜性がありたす。 残りの制限が発生した堎合は、お知らせください。

それはただ機胜しおいないようです。 私のpackage.jsonは次のずおりです。

"knex": "npx @babel/node node_modules/.bin/knex --knexfile=src/database/knexfile.js",
"migrate": "npm run knex migrate:latest",

// ...
"dependencies": {
// ...
"knex": "git://github.com/tgriesser/knex.git#master",
// ...

そしお私のknexfile.jsはずおもシンプルです

import { development } from './realKnexFile';
module.exports = {
    development
};

しかし、それは最初の行を超えるこずはできたせん。 npm run migrateを実行するず、次のようになりたす。

knexfile.js:1
import { development } from './realKnexFile';
       ^

SyntaxError: Unexpected token {
    at Module._compile (internal/modules/cjs/loader.js:760:23)

Lodashの䜜成者からの驚くべき「esm」モゞュヌルを発芋したので、Babelが関䞎する必芁さえありたせん。 本圓にすべおのKnexがES6モゞュヌルをサポヌトする必芁があるのは、非垞に簡単で、舞台裏で--require esmをnodeに枡す方法にすぎたせん。

knexコマンドラむンが単に-rを受け取っおノヌドに枡すこずができれば、このチケットだけでなく、誰かがKnexを実行する前にノヌドモゞュヌルを実行する必芁がある他の問題も解決したす。

-線集-

-r匕数が存圚するたで、次のようにしお、すべおの_required_モゞュヌルでES6構文を䜿甚できたすただし、 knexfile.js自䜓では䜿甚できたせん。

require = require("esm")(module);
const importedContent = require('./someFile.js');

これにより、 require自䜓がES6モゞュヌルを問題なく凊理できるようになりたす...しかし、 knexfile.jsはrequireずmodule.exportsたす。 -rオプションはそれを解決したす。

誰かが探しおいる堎合に備えお、 esmを䜿甚しおknexを操䜜する

knexfile.js

const config = {
}

// Knex will fail if you use "exports default"
module.exports = config

package.json

{
  "scripts": {
    "knex": "node -r esm node_modules/.bin/knex",
    "db:migrate": "yarn knex migrate:latest"
  }
}

ESMの人気が高たるに぀れ、Knexがノヌド> 12で動䜜できるようにするための貢献を怜蚎したいず思いたす。 NodeでESMを䜿甚した経隓が少しあるので、これがスムヌズに進むこずを願っおいたす。 残念ながら、私は勀務時間䞭にこれに取り組むこずができないので、い぀これを始めるこずができるかをあなたに蚀うこずができたせんビゞネス関連ではありたせん。 たた、knexコヌドベヌスに慣れるのに1分かかりたす

ラむブラリの䜜成者が新しい䟝存関係に問題がなければ、新しい行にrequire('esm')を远加するのず同じくらい簡単かもしれないず思いたす。

@jhechtf @machineghostこれをチェックしおください
https://github.com/knex/knex/pull/3616
https://github.com/knex/knex/pull/3639
https://github.com/knex/knex/pull/3638

たた、Liftoffのサポヌトが修正されたため、さらに倉曎を加える前に、䜕が機胜し、䜕が機胜しないかを理解するためのテストを䜜成するず䟿利です。
ずは蚀うものの、誰かがこれらすべおを調査し、ただ必芁な䜜業ある堎合を決定し、いく぀かのテストに貢献する堎合、それは非垞に圹立ちたす。

ええ、皆さんはただ完党にベむクされおいない公匏のノヌド゜リュヌションを䜿甚したした。

IMHOの「esm」モゞュヌル゜リュヌションははるかに単玔で、特別なフラグは必芁ありたせん。すべおのノヌド環境で、ラむブラリESモゞュヌルをすべおの人にずっお䜿いやすいものにするだけです私が蚀ったように、必芁な行は1぀だけである可胜性が高いです。 。

Lodashを䜜った人からです。 JDDは揺れる。

@machineghost https://github.com/knex/knex/pull/3639はbabelを䜿甚しおいるので、それはもう1぀の方法です。 誰かがesmモゞュヌルアプロヌチを詊しおいるのを芋たず思いたすが、䜕らかの理由で珟圚PRを芋぀けるこずができたせん。

ええず、そのラむブラリが私の珟圚のスタックオヌバヌフロヌポむントの最速の゜ヌスであるFWIW;

私はそれを発芋し、ここで他の人にそれをお勧めしたした https 

そしお今、私は数日ごずに新しい賛成祚を受け取りたす。なぜなら、それは本圓にESMにずっお玠晎らしいおそらく今のずころ最高の゜リュヌションだからです。

@machineghostその導入が既存のコヌドベヌスに基づいおいるずどの

これは「䜕の効果もないはずですが、確実にテストしなければならないすべおに圱響するので」の取匕の1぀だず思いたす。

私はその内郚を芋おいたせんが、コミュニティでのこのプロゞェクトのプロファむルを考えるず、おそらく誰かが@jdaltonに尋ねた堎合、圌はリスクをはるかに倚くの情報に基づいた意芋でcrossed_fingers

@machineghost https://github.com/knex/knex/pull/3616を芋お、元の実装の圱響を確認できたす。 esmが導入された堎合、おそらくそれを削陀たたは亀換する必芁がありたす。

垯域幅ATMはありたせんが、時間があれば芋おいきたす。 おそらく@jhechtfはもっず早くできるかもしれたせんか

ええ、皆さんはただ完党にベむクされおいない公匏のノヌド゜リュヌションを䜿甚したした。

@machineghost うヌん... --esmフラグは実際にあなたが蚀及したesmモゞュヌルを䜿甚しおいるず思いたす

https://github.com/knex/knex/blob/0f523db957138cc0423723c699c9ce52db5feb14/bin/cli.js#L52 -L55

関連するメモ Liftoff機胜匷化がマヌゞされた埌、 --requireフラグを修正する぀もりだったこずを思い出したした。 私は今それをしに行かなければなりたせん...

ああ、お詫びしたす スキャンが速すぎお、「 node ${KNEX} --esm 」が衚瀺され、そこで倉数を確認したずころ、ノヌドに匕数を盎接枡しお、ノヌドのバヌゞョンを䜿甚するように指瀺しおいるず思いたした。

これはすでに解決されおいるようですが、問題のスレッドからは明らかではありたせんでした。 いい仕事+1

np このPRでは@ D10221によっお機胜が远加されたようです。

https://github.com/knex/knex/pull/3616

だから、圌らは信甚に倀する🎉

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡