Новые возможности скриптов в Базис 10 - BazisSoft/Scripts GitHub Wiki

Общая информация

В Базис 10 для исполнения скриптов используется новый движок на основе Node.js.
Преимущества нового движка:

  1. Поддержка новых стандартов языка Javascript.
  2. Поддержка синтаксиса языка Typescript.
  3. Поддержка отладки скрипта (см. Отладка скриптов).
  4. Поддержка модулей.
  5. Большое количество функций для работы с системой.

Рекомендации

  1. Писать скрипты лучше в редакторе Visual Studio Code (см. Настройка VSCode для редактирования скриптов). Этот редактор имеет встроенную поддержку синтаксисов Javascript и TypeScript, что обеспечивает более упрощенный процесс написания скриптов в сравнении со встроенным в Базис редактором.

Поддержка Typescript

Новый движок имеет поддержку синтаксиса Typescript. Основное преимущество Typescript - типизация данных. Это позволяет предостерегать пользователя от попытки записи несовместимых типов и улучшает работу автодополнения. types

Модули

Node.js позволяет писать модули для программы, а также использовать уже существующие модули из менеджера пакетов npm. Модули располагаются в папке node_modules и вызываются через функцию require(). Сторонние модули можно установить через npm, который устанавливается вместе с Node.js. Пример простого модуля на TypeScript:

export function writeHello() {
    console.log('hello');
}

Ключевое слово export означает, что этот элемент (функция или переменная) будет доступен вне модуля Этот код можно сохранить в файл index.ts, который расположен в папке node_modules/newmodule. Структура должна выглядеть примерно так:
image
Теперь этот модуль можно использовать в других скриптах, например:

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

Здесь приведен список наиболее полезных (на наш взгляд) функций:

  1. fs - модуль для работы с файловой системой. Подключается через require Основные функции:
    1.1. fs.readdirSync - считывает папку и возвращает массив имен файлов кроме '.' и '..'. Может использоваться для пакетной обработки файлов скриптом (см. Примеры пакетной обработки)
    1.2. fs.writeFileSync, fs.appendFileSync, fs.readFileSync - функции записи, добавления в файл и чтения из файла соответственно
  2. **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\\'
  1. setTimeout - Вызывает таймер, по завершению которого выполнится функция. Пример:
setTimeout(function(){
  console.log('Hello') //В консоль выведется 'Hello' только через секунду после вызова setTimeout.
}, 1000);