現在、一部のコードを 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
}
}