• Добро пожаловать! Если у вас не проходит регистрация - попробуйте отключить программы, которые могут изменять интернет-подключение.

Внедрение технологии Require-by-String

Регистрация
Дек 7, 2024
Сообщения
73
Репутация
2
Discord
dieverka
Привет, разработчики!

Мы рады сообщить о новой функции Luau, доступной в движке Roblox: импорт модулей по строковому пути! С помощью этой функции вы сможете подключать модули, используя строковые пути вместо навигации через объекты Instances. Это сделает ваш код совместимым с Luau-кодом, написанным для других сред выполнения, а также упростит чтение и написание.

Подробности​

Разрешение строковых путей​

Импорт по строковому пути (require-by-string) позволяет подключать модули с использованием относительных путей.
  • Символ / используется в качестве разделителя в путях.
  • Относительные пути должны начинаться с ./ или ../.
Например, следующие два вызова теперь эквивалентны:
LUA:
local Module = require(script.Parent.Parent.Folder.ModuleScript)
local SameModule = require("../Folder/ModuleScript")

Поддержка файлов Init​

Важно: Некоторые сторонние инструменты, такие как Rojo, используют другую семантику для файлов с именем init.luau. Дополнительную информацию можно найти в разделе FAQ.

Кроме того, теперь можно импортировать объекты Instance, содержащие ModuleScript с именем Init или init. Это поведение соответствует тому, как обрабатываются папки во внешнем Luau-коде, где скрипт init.luau внутри папки используется как точка входа. Благодаря этому изменению вы можете организовывать код в папки и импортировать всю папку целиком, упрощая структуру проекта!

Автодополнение​

Чтобы упростить разработку, в редакторе скриптов (Script Editor) теперь отображаются подсказки автодополнения по мере ввода путей в выражениях require.
b91fde76d909adcaabd3a93492d9b1c670627b48.gif


Проверка типов​

При включенном строгом режиме (strict mode) вы также получите ошибку типа для любого пути, который не может быть разрешен в ModuleScript.
222ce711e82e60ed151bc4f0550dd1a4b56289c1.gif


Часто задаваемые вопросы (FAQ)
Нет, но ожидание события game.Loaded, используя game.Loaded:Wait(), будет достаточным, если ваши скрипты находятся не в Workspace. В противном случае, для ручной синхронизации можно использовать Instance:WaitForChild().
Нет. Мы намерены сохранять совместимость с open-source версией Luau, которая не поддерживает абсолютные пути. Однако мы уже работаем над решениями, которые упростят доступ к общим библиотекам независимо от расположения ваших скриптов в проекте или файловой системе.
Пока нет, но мы работаем над этим! Поддержка алиасов в путях подключения — это важный шаг к полной кроссплатформенной совместимости.
Мы решили сохранить текущее поведение для файлов init, чтобы обеспечить согласованность с тем, как Luau работает за пределами Roblox. Хотя это решение может не полностью охватывать все случаи использования, оно помогает избежать поломки существующих проектов и является первым шагом к унифицированной экосистеме Luau.

Для большинства сторонних инструментов вы сможете использовать импорт по строковому пути без проблем. Однако некоторые инструменты используют другую семантику для файлов init, что может привести к проблемам совместимости.

В частности, инструмент Rojo обрабатывает файлы init так, как если бы они представляли собой саму директорию, преобразовывая их в объекты ModuleScript с дочерними элементами при импорте в Roblox. Подробнее об этом можно узнать в разделе Rojo: Sync Details 20. Вы все равно сможете использовать импорт по строковому пути с Rojo, но следует учитывать эту потенциальную проблему при импорте проектов.

Чтобы решить этот вопрос, мы планируем внедрить импорт относительно проекта, который обеспечит единый способ ссылаться на файлы в Roblox, файловой системе и при использовании сторонних инструментов, таких как Rojo. Мы расскажем больше об этом в будущем. Однако на данный момент это лишь первый шаг к согласованности между различными средами выполнения Luau.

Ссылка на оригинальную статью
 
Назад
Сверху