これが私のファイルです。 knexfile.js
require('dotenv').config();
module.exports = {
development: {
client: process.env.DB_CLIENT,
connection: {
Host: process.env.DB_Host,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME
},
migrations: {
directory: __dirname + '/db/migrations'
},
seeds: {
directory: __dirname + '/db/seeds'
}
}
};
knex.js
const environment = process.env.NODE_ENV || 'development';
let config = require('../knexfile')[environment];
module.exports = require('knex')(config);
index.js
require('babel-register');
import express from 'express';
const port = process.env.PORT || 5000;
const app = express();
app.listen(port, () => {
console.log('Server running on portt:', port); // eslint-disable-line
});
export default app;
今、次のコマンドを実行すると:knex migrate:make create_employee_and_company_tables
次のエラーが発生します
Error: knex: Required configuration option 'client' is missing.
at new Client (/Users/sujin.v2px/NodeJS/nodees6/node_modules/knex/lib/client.js:99:11)
at Knex (/Users/sujin.v2px/NodeJS/nodees6/node_modules/knex/lib/index.js:56:34)
at initKnex (/usr/local/lib/node_modules/knex/bin/cli.js:73:10)
at Command.<anonymous> (/usr/local/lib/node_modules/knex/bin/cli.js:139:22)
at Command.listener (/usr/local/lib/node_modules/knex/node_modules/commander/index.js:315:8)
at emitTwo (events.js:126:13)
at Command.emit (events.js:214:7)
...
いくつかの構成がありませんか? client
の欠落は実際には何を指しますか?
これは、TypeScriptを使用しているのと同じ問題があるため、ここに上陸する一部の人々にとって役立つ答えです。 (dotEnvの問題のポイントを超えています(他の答えを確認してください))。
問題は、TypeScript export default
は、デフォルトではknex cliでサポートされていません。
説明する:
ご覧のように、インポート構文などすべて、TypeScriptを通常どおり使用できます。次に、エクスポートするときにcommonjs構文を直接使用する必要があります。
高く評価されていない場合は、このgithubの問題を解決策について確認できます。
https://github.com/tgriesser/knex/issues/1232
Tsconfig.jsonのknexの解決方法がわかりません。それは重要かもしれません。また、knexfile.tsがある新しいtsconfig.jsonを追加できます。
私の場合、私はそれを私の設定に持っていました(それは私のプロジェクトルートにあり、knexfile.tsではありません(プロジェクトのコンパイル用))
"compilerOptions": {
/* Basic Options */
// "incremental": true, /* Enable incremental compilation */
"target": "ES2018", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'AMD', 'system', 'umd', 'es2015', or 'ESNext'. */
// "lib": [], /* Specify library files to be included in the compilation. */
"allowJs": true,
ターゲットを変更することもできます。
もう1つの重要なポイントは、node-ts
は、ボンネットの下で使用されるため、インストールされます。ただし、そうしないと、別の完全なエラーが発生する場合があります。クライアントをインストールすることを忘れないでくださいǹpm i --save pg sqlite3 node-ts TypeScript knex
。 (dev依存関係を分離することができます)。
さらなる調査の後に更新します。理由を深く説明するために!
私はこの問題を抱えており、私の設定はハードコードされています:
client: 'pg',
.env
ファイルの環境変数を使用するには、次のようにconfig
にパス引数を渡します。
require('dotenv').config({path: 'path-to-.env')
きみの process.env.DB_CLIENT
はundefined
です。ハードコーディングすることで確認できます
client: 'pg',
環境変数/ dotenvを使用しようとせずに。
すべての構成の読み取りが失敗し、構成が未定義だった場合、別のエラーがスローされます(client
of undefined
を読み取ることはできません)。
観察されたknexfile.jsは、パスなしのenv configをサポートしていません。
次のように使用します。
require('dotenv').config({path: './'});
私にとってこの問題を解決したのは、非標準の環境名を使用していたKnexfileにありました:
let dbConnection = {
client : "pg",
connection: connectionObject,
migrations: {
directory: './db/migrations'
},
useNullAsDefault: true
};
module.exports = {
connection: dbConnection
};
だから、knex migrate:make --env connection migration_name
そして、期待どおりに機能しました。