DataviewJS 脚本间的「函数」复用方法

DataviewJS 脚本间的「函数」复用方法

在一个 DataviewJS 脚本中,如何复用另一个脚本的「函数」?

「函数」复用可以通过如下两行代码来实现

  • 模块导入
const functionName = await new Promise(resolve=>dv.view(modulePath, resolve)) 
  • 模块导出
input(functionName)

下面是一个例子

一个脚本 main.js 获取并调用另一个脚本 get-greeting.js 内部的 getGreeting 函数

main.js

/**
 * @name main.js
 * @description 主脚本(其类型是 DataviewJS 脚本)
 */
 
// 导入函数 getGreeting
/** @function */
const getGreeting = await new Promise(resolve=>dv.view("get-greeting", resolve)) 

// 测试函数 getGreeting, 从而输出函数返回值
console.log(getGreeting("world"))

// 输出函数返回值 hello, world

get-greeting.js

/** 
 * @name get-greeting.js
 * @description 被调模块(其类型是 DataviewJS 脚本)
 */

/**
 * @param {string} audience
 * @return {string}
 */
function getGreeting(audience){
    return "hello, " + audience
}

// 导出函数 getGreeting
input(getGreeting)

方法优点:快速原型开发

通过“构建—反馈—优化”的循环,可以快速提升脚本成品与自己需求的契合度,尤其适用于高不确定性的项目。

方法缺点:软件工程问题和性能问题

JavaScript 不像 TypeScript 那样适合拿来开发大型项目,可能会引起软件工程问题

并且,在每次导入函数时,都会生成一次函数对象,可能会引起性能问题

未来可能:函数入库

如果脚本中的函数有维护的价值,那么可以考虑将其加入自己插件项目的代码库(使用 TypeScript 开发的插件项目)