esbuild + knex:找不到模块'../../dialects/mysql/index.js'
esbuild + knex: Cannot find module '../../dialects/mysql/index.js'
我目前正在尝试将一些代码从 javascript 迁移到打字稿。此代码使用 knex 包。我可以使用 tsc
构建并 运行 它,但我想使用 esbuild
代替(为了更快的构建)。
我构建的是:
npx esbuild index.ts --bundle --platform=node --sourcemap=external --outfile=dist/index.js
但是当我尝试 运行 编译代码时,我得到:
Cannot find module '../../dialects/mysql/index.js'
我不知道这个 dialect
目录是什么,也找不到任何关于它的文档。看了一下this 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 and @types/mysql 但它并没有解决我的问题。
如果有帮助,我使用以下 tsconfig.json
:
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"outDir": "dist",
"target": "es6",
"esModuleInterop": true
}
}
我也遇到过这个问题,我在 esbuild GitHub.
上看到了一个相关的帖子
您只需将 knex 初始化更新为以下内容:
import Knex from 'knex';
import KnexMysql from 'knex/lib/dialects/mysql';
const knex = Knex({
client: KnexMysql,
...
});
我目前正在尝试将一些代码从 javascript 迁移到打字稿。此代码使用 knex 包。我可以使用 tsc
构建并 运行 它,但我想使用 esbuild
代替(为了更快的构建)。
我构建的是:
npx esbuild index.ts --bundle --platform=node --sourcemap=external --outfile=dist/index.js
但是当我尝试 运行 编译代码时,我得到:
Cannot find module '../../dialects/mysql/index.js'
我不知道这个 dialect
目录是什么,也找不到任何关于它的文档。看了一下this 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 and @types/mysql 但它并没有解决我的问题。
如果有帮助,我使用以下 tsconfig.json
:
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"outDir": "dist",
"target": "es6",
"esModuleInterop": true
}
}
我也遇到过这个问题,我在 esbuild GitHub.
上看到了一个相关的帖子您只需将 knex 初始化更新为以下内容:
import Knex from 'knex';
import KnexMysql from 'knex/lib/dialects/mysql';
const knex = Knex({
client: KnexMysql,
...
});