Новые возможности скриптов в Базис 10 - BazisSoft/Scripts GitHub Wiki
Общая информация
В Базис 10 для исполнения скриптов используется новый движок на основе Node.js.
Преимущества нового движка:
- Поддержка новых стандартов языка Javascript.
- Поддержка синтаксиса языка Typescript.
- Поддержка отладки скрипта (см. Отладка скриптов).
- Поддержка модулей.
- Большое количество функций для работы с системой.
Рекомендации
- Писать скрипты лучше в редакторе Visual Studio Code (см. Настройка VSCode для редактирования скриптов). Этот редактор имеет встроенную поддержку синтаксисов Javascript и TypeScript, что обеспечивает более упрощенный процесс написания скриптов в сравнении со встроенным в Базис редактором.
Поддержка Typescript
Новый движок имеет поддержку синтаксиса Typescript. Основное преимущество Typescript - типизация данных. Это позволяет предостерегать пользователя от попытки записи несовместимых типов и улучшает работу автодополнения.
Модули
Node.js позволяет писать модули для программы, а также использовать уже существующие модули из менеджера пакетов npm.
Модули располагаются в папке node_modules
и вызываются через функцию require()
. Сторонние модули можно установить через npm, который устанавливается вместе с Node.js.
Пример простого модуля на TypeScript:
export function writeHello() {
console.log('hello');
}
Ключевое слово export
означает, что этот элемент (функция или переменная) будет доступен вне модуля
Этот код можно сохранить в файл index.ts, который расположен в папке node_modules/newmodule. Структура должна выглядеть примерно так:
Теперь этот модуль можно использовать в других скриптах, например:
let newmodule = require('newmodule');
newmodule.writeHello();
Примечание:
Если имя подключаемого модуля задано строкой, не обозначающей путь к файлу, Node.js производит поиск модулей только в папке node_modules в каждой директории пути к скрипту, не считая корневой. Например: запущен файл C:\folder1\subfolder1\scripts\myscript.js. В этом случае, require('newmodule')
будет искать модуль 'newmodule' в папках
C:\folder1\subfolder1\scripts\node_modules, C:\folder1\subfolder1\node_modules, C:\folder1\node_modules\
Возможности Node.js
Новый движок создан на основе Node.js 6 версии. Список всех стандартных модулей, доступных для использования описан в документации Node.js(англ.). Модули не подключены по умолчанию, поэтому для использования функций модуля необходимо его подключить. Для этого используется функция require. Например, подключение модуля fs:
let fs = require('fs');
Далее можно использовать использовать функции этого модуля, например:
let content = fs.readFileSync('myFile.txt') //Считываем содержимое файла в переменную content
Здесь приведен список наиболее полезных (на наш взгляд) функций:
- fs - модуль для работы с файловой системой. Подключается через require Основные функции:
1.1. fs.readdirSync - считывает папку и возвращает массив имен файлов кроме '.' и '..'. Может использоваться для пакетной обработки файлов скриптом (см. Примеры пакетной обработки)
1.2. fs.writeFileSync, fs.appendFileSync, fs.readFileSync - функции записи, добавления в файл и чтения из файла соответственно - **path **- модуль для работы с путями файлов и папок
2.1 path.parse - разбирает строку на несколько составляющих. Возвращает объект распарсенной строки. Например:
path.parse('C:\\path\\dir\\file.txt')
// Результат:
// {
// root : "C:\\",
// dir : "C:\\path\\dir",
// base : "file.txt",
// ext : ".txt",
// name : "file"
// }
┌─────────────────────┬────────────┐
│ dir │ base │
├──────┬ ├──────┬─────┤
│ root │ │ name │ ext │
" C:\ path\dir \ file .txt "
└──────┴──────────────┴──────┴─────┘
2.2 path.extname - возвращает расширение файла, начинающееся с последней точки. Например:
path.extname('file.txt') //возвращает '.txt'
path.extname('mylog.log.out') //возвращает '.out'
path.extname('myFile.') //возвращает '.'
2.3 path.normalize - нормализует путь, переводя '.' и '..'. Если параметр - пустая строка, то результат будет '.', который указывает на текущую директорию, Например:
path.normalize('C:\\temp\\\\foo\\bar\\..\\');
// Результат: 'C:\\temp\\foo\\'
- setTimeout - Вызывает таймер, по завершению которого выполнится функция. Пример:
setTimeout(function(){
console.log('Hello') //В консоль выведется 'Hello' только через секунду после вызова setTimeout.
}, 1000);