...
 
Commits (7)
......@@ -18,6 +18,7 @@
- [Фильтр записей в формах](tutorial/gym/gym_rls.md)
### Общее
- [Использование ub c командной строки](tutorial/UB_in_CMD.md)
- [generator-UB](tutorial/generator-ub.md)
- [Мета-файлы](tutorial/meta-file.md)
- [ubConfig](tutorial/ubConfig.md)
......
......@@ -5,7 +5,8 @@
### [yeoman](tutorial/libraryArchive/generatorUB.md)
### пример без моделей
https://gitlab.intecracy.com/unitybase/crypto-sample
### ub c коммандной строки
### [Использование ub c командной строки](tutorial/UB_in_CMD.md)
### [минимально простое приложение](tutorial/libraryArchive/README.md)
- [Начало работы над проектом](getting_started.md)
- [Создание мета-файлов](creating_meta-file.md)
......@@ -33,7 +34,7 @@ https://gitlab.intecracy.com/unitybase/crypto-sample
### продвинутые темы
- [генератор юб](tutorial/generator-ub.md)
- [мета файл](tutorial/meta-file.md)
- !!![конфиг](tutorial/ubConfig.md)
- !!! [конфиг](tutorial/ubConfig.md)
- [ubcli ddl init](tutorial/init_DDL_initialize.md)
- [uba](tutorial/uba.md)
- ubm
......
## Использование ub с командной строки
[Код с последующих примеров можно посмотреть тут](../tutorial_projects/cmd)
Платформа UB, аналогично Node.js, поддерживает выполнение JS кода напрямую из файла.
Для запуска простейшего скрипта, создадим файл `test.js` в корневом каталоге проекта по адресу:
`C:\test\`.
Впишем текст:
```js
console.log("Hello, World!")
```
Далее для запуска и проверки его работоспособности выполним следующую последовательность:
- Откроем консоль
- Проверим чтобы наше местоположение совпадало с местоположением нашего файла, в нашем случае `C:\test>`
- Запустим наш файл командой: `ub test.js`
В ответ получим:
```
C:\test>ub test.js
Hello, World!
```
Как результат видим, что UB выполнила JS код.
### Функции создания, записи данных и чтение файлов
Для начала работы по созданию файлов и папок подключим встроенный в UB (аналогичный Node.js) модуль для работы с файловой системой `fs`, а также модуль `path`.
Впишем в `test.js`:
```js
const fs = require('fs')
const path = require('path')
```
Для примера создадим файл c данными в отдельной папке с названием `test_dir`.
:exclamation: Небольшое, но важное пояснение:
```
Платформа UB, в отличие от Node.js, была спроектирована под работу с синхронным кодом, потому асинхронный код (промисы) не будет работать.
Соответственно в модуле fs есть только синхронные версии методов.
```
Для того чтобы проверить есть ли данная папка воспользуемся `fs.existsSync`
```js
const exists = fs.existsSync(path.join(__dirname, 'test_dir'))
console.log(exists ? 'Директория уже существует' : 'Директория не найдена!')
```
Используем `fs.mkdirSync` для создания директории.
```js
fs.mkdirSync(path.join(__dirname, 'test_dir'))
```
Вызов функции с таким параметром создаст в текущей директории создать папку с названием `test_dir`.
Для обращения к файлу создаем переменную с произвольным названием, которую в последствии будем использовать как адрес файла.
В нашем случае это `testPath`.
```js
const testPath = path.join(__dirname, 'test_dir', 'text.txt')
```
Следующий код создаст текстовый файл с названием `text.txt`.
```js
fs.writeFileSync(testPath, 'It\'s time to try some new!')
```
Метод `writeFileSync` перезаписывает содержимое файла при каждом вызове, потому если вам нужно дописать дополнительную строку используйте `appendFileSync`.
```js
fs.appendFileSync(testPath, '\nGood news Everyone!', true)
```
Таким образом получаем файл с дописанным в него текстом.
Теперь рассмотрим чтение данных.
Для упрощения задачи используем уже созданный нами ранее файл `text.txt`
Чтение файла:
```js
const fileText = fs.readFileSync(testPath, 'utf-8')
console.log('text from file.txt:', fileText)
```
Если не указать формат вывода `utf-8`, то результат будет выведен в виде буфера c hex значениями.
В результате выполнения `ub test.js` получаем:
```
С:\library>ub test
text from file.txt: It's time to try some new!
Good news Everyone!
```
### Передача параметров с командной строки.
При запуске приложения из терминала/командной строки мы можем передавать ему параметры.
Для получения параметров в коде приложения применяется массив process.argv.
Это аналогично тому, как в языках C/C++/C#/Java в функцию main передается набор аргументов в виде строкового массива.
Первый элемент этого массива всегда указывает на путь к дистрибутиву `ub`, который запускает приложение.
Второй элемент массив всегда указывает на путь к файлу приложения, который выполняется.
Создадим файл с наименованием `arg.js`
Добавим код:
```js
const ubPath = process.argv[0]
const appPath = process.argv[1]
const name = process.argv[2]
const age = process.argv[3]
console.log('ubPath: ' + ubPath)
console.log('appPath: ' + appPath)
console.log()
console.log('name: ' + name)
console.log('age: ' + age)
```
При запуске `ub agr.js` получим результат:
```
С:\library>ub arg
ubPath: C:\ub\ub.exe
appPath: arg
name: undefined
age: undefined
```
В данном случае мы ожидаем, что приложению будут переданы два параметра: name и age. И поскольку мы их не передавали, то получаем undefined.
Если ввести ту же команду, но с параметрами `ub agr.js Nick 27`, получим:
```
С:\library>ub arg Nick 27
ubPath: C:\ub\ub.exe
appPath: arg
name: Nick
age: 27
```
В данном случае "Nick" и "27" - это те значения, которые помещаются соответственно в process.argv[2] и process.argv[3]
const ubPath = process.argv[0]
const appPath = process.argv[1]
const name = process.argv[2]
const age = process.argv[3]
console.log('ubPath: ' + ubPath)
console.log('appPath: ' + appPath)
console.log()
console.log('name: ' + name)
console.log('age: ' + age)
\ No newline at end of file
const fs = require('fs')
const path = require('path')
// Проверка на существование папки
const exists = fs.existsSync(path.join(__dirname, 'test_dir'))
console.log(exists ? 'Директория уже существует' : 'Директория не найдена!')
// Создание директории
fs.mkdirSync(path.join(__dirname, 'test_dir'))
// Запись текста в файл
const testPath = path.join(__dirname, 'test_dir', 'text.txt')
fs.writeFileSync(testPath, 'It\'s time to try some new!')
// Добавление данных в файл
fs.appendFileSync(testPath, '\nGood news Everyone!')
// Чтение данных из файла
const fileText = fs.readFileSync(testPath, 'utf-8')
console.log('text from file.txt:', fileText)