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

这也是我遇到的一个问题,我在esbuild GitHub上遇到了一个相关线程。

您只需将 knex 初始化更新为以下内容:

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

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