我想尝试制作适用于kali linux 2018.3的gnome-shell扩展 我对Java的经验很少,我认为这将是学习的好机会。所以我用gnome-shell-extension-tool --create-extension创建一个基本模板。在创建的.js文件中,我注意到导入与我使用的不同。它们是这样导入的:
const St = imports.gi.St;
const Clutter = imports.gi.Clutter;
const Main = imports.ui.main;
我唯一的经验是像这样的进口商品:
import java.awt.*;
import java.util.blahblah;
我很难弄清楚如何导入其他任何东西,这是我找不到它的错误的正常方式。谁能给我快速解释为什么会这样呢?
答案 0 :(得分:0)
从技术上讲,这些不是Java脚本中的导入。
相反,在示例代码中,存在全局对象imports
,并将其分配给常量变量。
您可以轻松地为作业写信:
var St = imports.gi.St;
let Clutter = imports.gi.Clutter;
这是非常特定于您的代码的,不适用于Javascript。
最初,JavaScript本身没有导入。取而代之的是,在“模块”周围放有语法糖,它们提供相似的功能,通常需要编译器才能将其转换为有效的JavaScript语法。
有几种实现方式,但是两种常见的模式是:
CommonJS
const async = require('async')
和ES6模块
import async from 'async'
NodeJS支持CommonJS格式。当ES6模块被添加到标准中时,有两种方法可以将它们与NodeJS一起使用:1.使用Babel之类的工具将文件从ES6模块转换为CommonJS格式,或者2:以*.mjs
扩展名命名文件
较新的浏览器现在支持ES6模块,但是通常Web部署使用Babel和Webpack的组合来以最兼容的Java语言方言标准化输出。
答案 1 :(得分:0)
谢谢alan的解释。我认为这种特定情况甚至更加复杂,因为Gnome将gjs / seed用于js绑定,这是少数“导入”对象的来源。我认为出于我的目的,我只是打算在python中编写一个辅助应用程序来完成我需要做的一些事情。我确定我可以深入研究transpiler选项并提出一些建议,但是我对该项目的主要目的是开始学习js,所以我认为从标准类型项目开始会更好。看起来这个项目通常会教给我一些有关gnome的知识。