вопрос об импорте JavaScript.почему они импортируются как консты? - PullRequest
0 голосов
/ 07 декабря 2018

Я хочу попробовать свои силы в создании расширения gnome-shell для kali linux 2018.3 У меня очень мало опыта работы с 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;

У меня возникли проблемы при поиске, как импортировать что-то еще, нормальный способ получения ошибок по поводуэто не найдено.Может ли кто-нибудь дать мне быстрый анализ того, почему это так?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Спасибо, Алан, за объяснение.Я думаю, что этот конкретный сценарий еще более сложен, поскольку Gnome использует gjs / seed для привязок js, откуда и происходит объект для нескольких «импортов».я думаю, что для своих целей я просто собираюсь написать вспомогательное приложение на python, чтобы сделать несколько вещей, которые мне нужны.Я уверен, что смогу погрузиться в опцию транспилятора и что-то придумать, но моя главная причина этого проекта - начать изучать js, так что я думаю, что мне было бы лучше начать с проекта стандартного типа.похоже, этот проект в основном научит меня вещам, специфичным для gnome

0 голосов
/ 07 декабря 2018

Технически это не импорт в Javascript.

Вместо этого в вашем примере кода существует глобальный объект imports, и вы присваиваете его постоянным переменным.

Вы можете простокак легко написать для ваших заданий:

var St = imports.gi.St; let Clutter = imports.gi.Clutter;

Это очень специфично для вашего кода и не всегда применимо к Javascript.

Изначально, сам Javascriptне имеет импорта.Вместо этого есть синтаксический сахар, помещенный вокруг «модулей», которые предоставляют сходные функциональные возможности, которые обычно требуют транспилятора для преобразования его в действительный синтаксис javascript.

Существует несколько разновидностей того, как это делается, но два общих шаблонаявляются:

CommonJS

const async = require('async')

и модули ES6

import async from 'async'

Выход из шлюза Поддерживается формат CommonJS, поддерживаемый NodeJS,Поскольку в стандарт были добавлены модули ES6, их можно было использовать с NodeJS двумя способами: 1. Использовать такой инструмент, как Babel, для переноса файлов из модулей ES6 в формат CommonJS или 2: присваивать имена файлам с расширением *.mjs.

Новые браузеры теперь поддерживают модули ES6, но обычно при веб-развертывании используется комбинация Babel и Webpack для стандартизации вывода в наиболее совместимом диалекте Javascript.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Browser_compatibility

...