gpt4 book ai didi

javascript - 如何使用 Gjs Gnome Javascript 包含文件

转载 作者:行者123 更新时间:2023-11-30 08:30:35 24 4
gpt4 key购买 nike

我知道我可以很容易地导入文件,但我正在尝试制作某种插件结构。我希望能够扫描文件夹并加载每个 Javascript 文件。

有了 Seed JS,我可以使用 Seed.include() 来计算一个文件,就像它在调用 include 时被包含在文件中一样。 ( reference )

Gnome Javascript (Gjs) 是否具有等效功能?

最佳答案

有一个thread关于这个问题,这个人显然提示它实际上不起作用。我不知道是否值得尝试,因为无论如何这种方法都很糟糕 - 在我看来它太麻烦了。

所以我将分享我在我的 gnome 扩展中所做的事情。

TL;DR:使用 Node + Webpack 拥有良好的模块系统并访问庞大的模块库。

  • 首先,我安装了 Node + npm,因为它们一起为您提供了非常强大的模块系统。奖励 - 如果公共(public) NPM 模块不使用任何 Node API,您可以使用它们。
  • 我已经创建了 package.json 文件,这里是:
{
"name": "blah",
"version": "0.0.1",
"description": "blah",
"scripts": {
"watch": "nodemon --exec 'npm run build'",
"build": "webpack"
},
"author": "me",
"license": "ISC",
"devDependencies": {
"nodemon": "^1.11.0",
"webpack": "^2.2.1"
},
"dependencies": {
"string-format": "^0.5.0"
}
}
  • 接下来,我创建了我的 webpack.config.js 文件:
var path = require('path');

module.exports = {
entry: {
main: './src/main.js',
ui: './src/ui.js'
},
output: {
filename: '[name].js',
path: path.resolve(__dirname),
libraryTarget: 'var',
library: '[name]'
},
resolve: {
modules: [
path.resolve('./src'),
'node_modules'
]
},
externals: {
'gnome': 'global',
'lang': 'imports.lang',
'gi/meta': 'imports.gi.Meta',
'gi/shell': 'imports.gi.Shell',
'ui/main': 'imports.ui.main',
'ui/popupMenu': 'imports.ui.popupMenu',
'ui/panelMenu': 'imports.ui.panelMenu',
'gi/atk': 'imports.gi.Atk',
'gi/st': 'imports.gi.St',
'gi/gtk': 'imports.gi.Gtk',
'gi/gdk': 'imports.gi.Gdk',
'gi/gobject': 'imports.gi.GObject',
'gi/gio': 'imports.gi.Gio',
'gi/soup': 'imports.gi.Soup',
'gi/glib': 'imports.gi.GLib',
'gi/clutter': 'imports.gi.Clutter',
'misc/config': 'imports.misc.config',
'me': 'imports.misc.extensionUtils.getCurrentExtension()'
}
};

所以现在我开始使用 Node 的模块系统,我可以只需要将我的东西放入文件中。然后我运行 npm run build 并且 webpack 给我一个非常紧凑的文件,我可以运行它,其中包含所有需要的东西。

有一个文件的例子:

const Lang = require('lang')
const Gdk = require('gi/gdk')

const parser = require('./parser')
const modifier = require('./modifier')

const rules = [
parser((state, result) => {
const name = result.string
const rule = new RegExp('^[a-zA-Z0-9]+$')
return name && rule.test(name)
}, '', true),
modifier(Gdk.ModifierType.SUPER_MASK, 'super', false),
modifier(Gdk.ModifierType.MOD1_MASK, 'alt', false),
modifier(Gdk.ModifierType.CONTROL_MASK, 'control', false),
// this makes sure that we have at least one modifier enabled
modifier(Gdk.ModifierType.MODIFIER_MASK, false, true)
]

module.exports = function(state, keyval) {
const result = {
valid: false,
string: '',
}

if(state[0] && keyval[0]) {
result.valid = true,
result.string = Gdk.keyval_name(keyval[1])

rules.forEach((rule) => {
result = rule(state[1], result)
})
}

return result
}

关于javascript - 如何使用 Gjs Gnome Javascript 包含文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38537256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com