如何理解Javascript Epub阅读器Foliate源码中的imports风格模块导入语法
GJS imports导入语法说明
是什么
这是GNOME生态专用的JavaScript运行时GJS的特有模块导入语法,早于ES模块规范实现,通过全局挂载的imports对象加载所有模块,你看到的这段代码属于Linux桌面EPUB阅读器Foliate的源码,该项目就是基于GJS开发的。
适用场景
- 仅可在GJS运行时环境下使用,所有GNOME桌面应用、Shell扩展、GJS脚本都会用到该语法
- 支持导入两类资源:GObject生态的系统公共库,以及项目内自定义的JS模块
具体使用方式
导入系统公共库
所有支持GObject内省的系统库都会被挂载到imports.gi命名空间下,直接解构即可获取对应的库实例:
// 导入GTK图形界面库、Gio IO操作库 const { Gtk, Gio } = imports.gi
GJS自带的原生工具库也直接挂载在imports下,比如国际化工具:
// 导入gettext的复数翻译方法 const ngettext = imports.gettext.ngettext
导入项目自定义模块
GJS会自动把项目根目录下的JS文件、子目录按路径结构挂载到imports对象上,无需声明相对路径和文件后缀:
你给出的代码里的自定义模块导入规则如下:
imports.utils对应项目根目录下的utils.js文件imports.epubView对应项目根目录下的epubView.js文件imports.contents对应项目根目录下的contents.js文件
如果是嵌套目录下的文件,按层级写路径即可,比如imports.lib.xxx对应项目根目录lib文件夹下的xxx.js文件。
补充说明
目前GJS已经支持标准ES6模块的import/export语法,这套imports写法属于历史兼容方案,现存的GJS生态项目中仍然被大量使用。
内容的提问来源于stack exchange,提问作者pinche
相关产品推荐
相关产品推荐

