1

現在、一部のコードを javascript から typescript に移行しようとしています。このコードはknexパッケージを使用します。を使用してビルドおよび実行できますが、代わりtscに使用したいと思いますesbuild(ビルドを高速化するため)。

私は以下で構築します:

npx esbuild index.ts --bundle --platform=node --sourcemap=external --outfile=dist/index.js

しかし、コンパイルされたコードを実行しようとすると、次のようになります。

Cannot find module '../../dialects/mysql/index.js'

このディレクトリが何であるかはdialectわかりません。また、それに関するドキュメントも見つかりませんでした。この SO questionを見てみましたが、その中のコードを本当に理解できず、エラーはbrowserified.

エラーを再現するために使用したコードは次のとおりです。

import Knex from 'knex';

const knex = Knex({
  client: 'mysql',
  connection: {
    port: 3306,
    host: 'localhost',
    database: 'database',
    user: 'user',
    password: 'password',
    charset: 'utf8mb4',
  },
});

const fetchData = async () => {
  const data = await knex('table')
    .select()
    .first();
  return data;
};

(async () => {
  const results = await fetchData();
  console.log(results);
})();

興味深いことに、パッケージを使用せずにmysqlパッケージのみを使用するknexと、 と の両方tscでうまく機能しましesbuildた。

何らかの理由でビルドのみがesbuild失敗します。最初はパッケージが足りないと思い、@types/node@types/mysqlをインストールしましたが、問題は解決しませんでした。

それが役立つ場合は、次を使用しますtsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist",
    "target": "es6",
    "esModuleInterop": true
  }
}
4

1 に答える 1

2

This is a problem I've had as well and I came across a related thread on the esbuild GitHub.

You'll just need to update your knex initialisation to the following:

import Knex from 'knex';
import KnexMysql from 'knex/lib/dialects/mysql';

const knex = Knex({
  client: KnexMysql,
  ...
});
于 2021-12-20T01:54:42.287 に答える