ts-node一句话加载嵌入式数据库Realm

C 2022-9-25 1584

let db: { open: any }, DB = async () => { if (typeof db === 'undefined') { db = await import((!process[Symbol.for("ts-node.register.instance")] && ['win32', 'win64'].includes(process.platform) ? 'file://' : '') + process.env.APPDATA + '/npm/node_modules/realm/lib/index.js'); } return db; }

为了防止前端傻屌把模块装进./node_modules,所以强行npm install -g realm,然后用环境变量动态import。

因为兼容Windows所以加前缀file://,整个函数封装成一个Promise对象。

使用时可以先初始化再调用全局变量db(用到的方法在let声明):

// 可以这么用
await DB();
db.open();
// 也可以这么用
(await DB()).open();

因为DB()方法检测了db是否已被实例化,所以即便调用多次await DB()也只会分配一次db对象,节省内存。

至于为啥DB也用let声明而不是const,因为javascript是动态语言,const只是个语法糖。

内存分配上跟let没区别,而且是个伪静态声明,还多一道检测重复声明,更慢。

只是个思路还有很多问题,TS这玩意太逆天了……

最新回复 (2)
  • 500 2022-9-28
    2

    const损耗性能吗?怎么感觉只是静态检查才有用的

  • C 2022-9-28
    3
    500 const损耗性能吗?怎么感觉只是静态检查才有用的

    js本身是动态语言,里面的const只是个语法糖,不是真正的静态检查。

    • 屌丝论坛
      4