返回介绍

安装 Knex.js

发布于 2024-09-11 01:11:55 字数 1807 浏览 0 评论 0 收藏 0

成功引入 better-sqlite3 并且压缩了 better-sqlite3 模块在安装包的体积后,面临着另一个问题需要解决。

使用 better-sqlite3 读写数据库中的数据时,要书写 SQL 语句,这种语句是专门为数据库准备的指令,下面是为 sqlite 数据库建表和在对应表中完成增删改查的 SQL 语句:

create table admin(username text,age integer);
insert into admin values('allen',18);
select * from admin;
update admin set username='allen001',age=88 where username='allen' and age=18;
delete from admin where username='allen001';

使用 Knex.js 可以来完成对应的操作,Knex.js 允许使用 JavaScript 代码来操作数据库里的数据和表结构,它会把 JavaScript 代码转义成具体的 SQL 语句,再把 SQL 语句交给数据库处理,可以把它理解为一种 SQL Builder。

npm install knex -D

打包之前编译这个库,代码如下所示:

plugins/buildPlugin.ts

prepareKnex() {
    let pkgJsonPath = path.join(process.cwd(), 'dist', 'node_modules/knex');
    fs.ensureDirSync(pkgJsonPath);
    require('esbuild').buildSync({
      entryPoints: ['./node_modules/knex/knex.js'],
      bundle: true,
      platform: 'node',
      format: 'cjs',
      minify: true,
      outfile: './dist/node_modules/knex/index.js',
      external: ['oracledb', 'pg-query-stream', 'pg', 'sqlite3', 'tedious', 'mysql', 'mysql2', 'better-sqlite3'],
    });
    let pkgJson = `{"name": "bindings","main": "index.js"}`;
    pkgJsonPath = path.join(process.cwd(), 'dist', 'node_modules/knex/package.json');
    fs.writeFileSync(pkgJsonPath, pkgJson);
  }

相对于压缩 better-sqlite3 的体积来说,压缩 Knex.js 包的体积就简单多了,仅仅是通过 esbuild 工具编译了一下这个包的代码就完成了工作。

这段代码有以下几点需要注意。

  • 配置项 external 是为了避免编译过程中 esbuild 去寻找这些模块而导致编译失败,也就是说 Knex.js 中这样的代码会保持原样输出到编译产物中: require('better-sqlite3')。
  • package.json 增加一个生产依赖:localPkgJson.dependencies['knex'] = '*';,以避免 electron-builder 安装 Knex.js 模块。
  • closeBundle 钩子函数中调用这个方法:buildObj.prepareKnex()。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文