文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
安装 Knex.js
成功引入 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论